Struts2框架(一)

一、Struts2开发流程

1.Struts2版本:2.3

2.引入jar文件(8个)

  commons-fileupload-1.3.1.jar  【文件上传相关包】

  commons-io-2.2.jar  

  commons-lang3-3.2.jar      【Struts对java.lang包的扩展】

  freemarker-2.3.22.jar       【Struts的标签模板库jar文件】

  javassist-3.11.0.GA.jar      【Struts对字节码的处理相关jar】

  ognl-3.0.6.jar          【Ognl表达式功能支持包】

  struts2-core-2.3.24.1.jar    【Struts2核心功能包】

  xwork-core-2.3.24.1.jar      【Xwork核心包】

3.配置web.xml。

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

    <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即是核心过滤器

使用的Struts版本不一样,核心过滤器是不一样的!

4.开发Action。

  1)Action类,也叫做动作类;一般继承ActionSupport类,即处理请求的类(Struts中的Action类取代之前的Servlet)

  2)Action中的业务方法,处理具体的请求。方法要求:必须返回String,方法不能有参数。

public class HelloAction extends ActionSupport {
    // 处理请求
    public String execute() throws Exception {}
}

5.配置Struts.xml

二、Struts2执行流程

服务器启动:

  1.加载项目web.xml

  2.创建Struts2核心过滤器对象,执行Filter的init()方法,依次加载struts-default.xml(核心功能的初始化)、struts-plugin.xml(struts相关插件)、struts.xml(用户编写的配置文件)文件。

访问:

  3.用户访问Action,服务器根据访问路径名称,找对应的Action配置,创建Action对象

  4.执行默认拦截器栈中定义的18个拦截器

  5.执行Action的业务处理方法

三、struts-default.xml详解

  1.目录:struts2-core-2.3.24.1.jar/struts-default.xml

  2.内容:

    1)bean节点指定Struts在运行的时候创建的对象类型

    2)指定struts-default包【用户写的package(struts.xml)一样要继承此包】

      package       struts-default包中定义了:

        a. 跳转的结果类型

          dispatcher  转发,不指定默认为转发

          redirect    重定向

          redirectAction  重定向到Action资源

          stream    文件下载的时候用

        b.定义了所有的拦截器。总共定义了32个拦截器。为了拦截器引用方便,可以通过定义栈的方式引用拦截器,此时如果引用了栈,栈中的拦截器都会被引用!defaultStack:默认的栈,其中定义了默认要执行的18个拦截器!

        c.默认执行的拦截器栈、默认执行的Action

四、面试题

1.拦截器什么时候执行?先执行Action类创建还是先执行拦截器?

用户访问的时候按顺序执行18个拦截器;先执行Action类的创建,再执行拦截器;最后拦截器执行完,再执行业务方法。

五、Struts2配置

<?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>
    <!-- 
        package   定义一个包。 包作用,管理action。
                   (通常,一个业务模板用一个包)
           name  包的名字; 包名不能重复;
           extends 当前包继承自哪个包
                      在struts中,包一定要继承struts-default
                     struts-default在struts-default.xml中定的包
           abstract  
                     表示当前包为抽象包; 抽象包中不能有action的定义,否则运行时期报错
                    abstract=true  只有当当前的包被其他包继承时候才用!
                    如:
                        <package name="basePackage" extends="struts-default" abstract="true"></package>
                       <package name="user" extends="basePackage">
              namespace   名称空间,默认为"/"
                              作为路径的一部分
                             访问路径=  http://localhost:8080/项目/名称空间/ActionName
              
              
          
        action   配置请求路径与Action类的映射关系
                 name  请求路径名称
                 class 请求处理的aciton类的全名
                 method 请求处理方法        
        result
                 name  action处理方法返回值 
                 type  跳转的结果类型
                   标签体中指定跳转的页面
                    
     -->
    <package name="user" extends="struts-default" namespace="/">
        <action name="login" class="cn.itcast.b_execute.UserAction" method="login">
            <result name="login">/index.jsp</result>
        </action>
    </package> 
    
</struts>

 

原文地址:https://www.cnblogs.com/FlySheep/p/4891965.html