Struts2 整理

1. struts2详解

Struts2 = Struts1 + Xwork

1.1 Struts2开发流程:

版本: 2.3

1.1.1 引入jar文件

commons-fileupload-1.2.2.jar 【文件上传相关包】
commons-io-2.0.1.jar
struts2-core-2.3.4.1.jar 【struts2核心功能包】
xwork-core-2.3.4.1.jar 【Xwork核心包】
ognl-3.0.5.jar 【Ognl表达式功能支持表】
commons-lang3-3.1.jar 【struts对java.lang包的扩展】
freemarker-2.3.19.jar 【struts的标签模板库jar文件】
javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】

1.1.2 配置web.xml

Tomcat启动— 加载自身web.xml—加载所有项目的web.xml
通过在项目的web.xml中引入过滤器,
– Struts的核心功能的初始化,通过过滤器完成
– filter 【 (拦截器的标签)
————-init/ 启动执行
————-doFilter/ 访问执行
————-destroy
————-】


<!-- web.xml:  引入struts核心过滤器 -->
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

StrutsPrepareAndExecuteFilter 即为核心过滤器
来自jar包:struts2-core-2.3.4.1.jar
使用的struts的版本不同,核心过滤器类是不一样的!
struts1的核心过滤器就不是这个

1.1.3 开发Action

  1. struts中的action类取代之前的servlet
    action类,也叫做动作类; 一般继承ActionSupport类(即处理请求的类 )
  2. action中的业务方法,处理具体的请求
    必须返回String
    方法不能有参数
public class HelloAction extends ActionSupport {
    // 处理请求
    public String execute() throws Exception {}
}

1.1.4 配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!--  Overwrite Convention -->
    <package name="xxx" extends="struts-default">
        <action name="hello" class="com.appp.action.HelloAction" method="execute">
            <result name="success">/success.jsp</result>
        </action>
    </package>

</struts>
package:  定义一个包。包作用,管理action(通常一个业务模板一个包)
    name:包的名字,包名不可重复
    extends:当前包继承自哪个包
        Struts中,包一定继承struts-default
        struts-default是在struts-default.xml中定的包
    abstract
        表示当钱包为抽象包;抽象包中不能再有action的定义,否则运行时报错
        sbstract=true  只有当当前的包被其他包继承时才用!
        比如:
            <package name="base" extends="struts-default abstract="true"></package>
            <package name="user" extends="base"></package>
    namespace:  名称空间,默认为"/",即jsp中什么都不用写,
                作为路径的一部分,访问路径= http://localhost:8080/项目名/名称空间/ActionName

action:  配置请求路径与Action类的映射关系
    name: 请求路径名称
    class:请求路径的action类的全名
    method:请求处理方法
result:
    name:action处理方法返回值
    type:跳转的结果类型
    标签中指定跳转的页面

1.2 Struts2执行流程:

服务器启动:

1. 加载项目web.xml
2. 创建Struts核心过滤器对象, 执行filter →  init()

struts-default.xml, 核心功能的初始化
struts-plugin.xml, struts相关插件
struts.xml 用户编写的配置文件

访问:

3. 用户访问Action, 服务器根据访问路径名称,找对应的aciton配置, **创建action对象**(后面每次访问,都会创建action实例)
4. 执行默认拦截器栈中定义的**18个拦截器**(总共定义的有32个拦截器)
5. 执行action的**业务处理方法**

1.3 struts-default.xml 详解:

1.3.1 目录: struts2-core-2.3.4.1.jar/ struts-default.xml

1.3.2 内容:

  1. bean节点指定struts在运行的时候创建的对象类型
  2. 指定struts-default包 【用户写的package(struts.xml)一样要继承此包 】,
    包中定义了:
    2.1 跳转的结果类型
    dispatcher 转发,不指定默认为转发
    redirect 重定向
    redirectAction 重定向到action资源
    stream (文件下载的时候用)
    2.2 定义了所有的拦截器(定义了32个拦截器!)
    为了拦截器引用方便,可以通过定义栈的方式引用拦截器,
    标签interceptor-stack
    此时如果引用了栈,栈中的拦截器都会被引用!
    defaultStack
    默认的栈,其中定义默认要执行的18个拦截器!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章