• 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>

     

  • 相关阅读:
    菜鸟小结
    计算几何题目整理(转)
    poj 3299 Humidex
    基于C的文件操作(转)
    poj 1328 Radar Installation
    poj 1321 棋盘问题(dfs)
    poj 3302 Subsequence
    C# 资产(Property) 与普通字段(field)变量的区别
    Jumping into Cloud, Be Sure You Know How to Get Out
    关于语言的想法。
  • 原文地址:https://www.cnblogs.com/FlySheep/p/4891965.html
Copyright © 2020-2023  润新知