Struts2初步学习

一、Struts2概述

1.1 Struts2
MVC框架是指Model、View、COntroller
Struts2是一个MVC框架,主要作用VIEW和Controller层.
View可以改造,因为struts提供了自己的一套标签库。
strut2提供了核心控制器,以及用户自定义的业务控制器,解决了控器制问题。
1.2 框架
框架是一个半成品,剩余的工作,要和根据实际的项目业务情况,进行填充。
Struts1不是Struts2的前身,Strut2的前身是webwork,webwork的核心是xwork,struts2保留了struts1的开发流程
常用的MVC框架:

Struts2 Struts1 webWork springMVC  JSF

二、Struts2入门

1、导入jar包
2、编写strut2编写web.xml中的核心控制器(前端控制器)
    实际上是一个过滤器 **StrutsPrepareAndExecuteFilter**
    <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>
    struts2是基于filter开发
    struts1是基于Servlet开发

3、编写业务控制器(action类),类似于Servlet
    创建类以名称Action结尾,继承ActionSupport类
    里面有普通方法,返回逻辑视图,字符串
4、配置第三步的action类。在struts.xml
    配置文件名必须是struts.xml,放在类路径下
    <package name="default" namespace="/" extends="struts-default">
    <!-- 
        name表示浏览器的访问路径
        class表示Action类的全限定了类名
        method 表示访问时调用的方法名

     -->
    <action name="index1" class="cn.lx.action.HelloAction" method="">
       <!--
            result表示逻辑视图与物理视图的映射关系
            name表示方法返回的逻辑视图名
            值为物理视图名,也即jsp路径
            默认使用转发的方式进行页面跳转
         -->
       <result name="hello">/index.jsp</result>
    </action>
    </package>
5、编写jsp测试页面

三、Struts2分析运行过程

![一张图片](http://img.blog.csdn.net/20160611223451152)

四、Struts2源码分析执行过程

五、Struts2配置文件

配置文件的加载过程
truts2 配置文件 由核心控制器加载 StrutsPrepareAndExecuteFilter  (预处理,执行过滤) 
        init_DefaultProperties(); // [1]   ----------  org/apache/struts2/default.properties 
        init_TraditionalXmlConfigurations(); // [2]  --- struts-default.xml,struts-plugin.xml,struts.xml
        init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties 
        init_CustomConfigurationProviders(); // [5]  ----- 自定义配置提供
        init_FilterInitParameters() ; // [6] ----- web.xml 
        init_AliasStandardObjects() ; // [7] ---- Bean加载 

    结论 :
    default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面  (常量的默认值)
    struts-default.xml 该文件保存在 struts2-core-2.3.7.jar  (Bean、拦截器、结果类型 )
    struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar  (在插件包中存在 ,配置插件信息 )

    struts.xml 该文件是web应用默认的struts配置文件 (实际开发中,通常写struts.xml ) ******************************
    struts.properties 该文件是Struts的默认配置文件  (配置常量 )
    web.xml 该文件是Web应用的配置文件 (配置常量 )

    * 后加载文件中struts2 常量会覆盖之前加载文件 常量内容

1、程序员需要掌握的是struts.xml文件的配置

六、Struts2常量

这些常量可以在default.properties文件中找到
1、struts.i18n.encoding=UTF-8
    可以解决的是post乱码问题,解决不了get请求乱码问题
2、struts.objectFactory = spring
    让spring来管理 struts2的javabean对象
3、struts.multipart.saveDir=     文件保存目录
   struts.multipart.maxSize=2097152   文件大小
    文件上传使用
4、struts.action.extension=action,,
    解释说明了为什么struts默认处理的是action或者空白结尾的请求
    可以进行修改
5、struts.devMode = false
    开发者模式,false表示不是开发者模式,true表示开发者模式
    作用是设置为开发者模式时,实现配置文件的自动加载,也即对配置文件的修改不用重启服务器可以自动加载
6、struts.enable.DynamicMethodInvocation = false
    动态方法调用,false表示不允许动态方法调用,true表示允许动态方法的调用。

七、Action类的编写方式

1、Action是多实例的,每次请求会创建一个实例,无线程冲突问题。
    测试方法:在Action构造方法中加上输出语句,运行时,发现每次请求都会调用构造方法。证明了Action是多实例的,无并发安全问题。
7.1 编写Action类的三种方法
1、继承ActionSupport类
2、实现Action接口    ActionSupport也实现了Action接口
    ActionSupport类实现了Action接口,同时可以更加方便的实现数据校验,且实现了本地化国家化
    Action接口中有五个常量,一个默认方法
    五个常量用于表示返回值,逻辑视图
    SUCCESS、NONE、ERROR、INPUT、LOGIN
    默认方法excute
3、非侵入设计:可以做到与struts2本身的API解耦合,还可以与ServletAPI解耦合
    直接创建一个普通类不继承和实现任何类或接口 ,好处不需要服务器就可以实现代码测试
4、Action类的方法规定
    必须是共有的,返回值是String或void
    必须是无参的

八、Struts2数据封装的方式

1、ServletActionContext 中有getRequest()方法返回Request对象,其他操作和Servlet一样
    该方法为直接访问ServletAPI,进行数据封装
2、与Servlet API 解耦
    ActionContext ac = ActionContext.getContext();
    Map<String,Object> map = ac.getParameters()  返回的是Map<String,Object[]>
    直接操作其中的数据就可以了
3、在Action类中设置成员变量,提供set方法,访问该action类时会自动给变量赋值
    底层是通过拦截器和值栈实现的
4、使用POJO了类来实现数据封装
    Action类创建私有成员变量 ,private Customer customer;
    生成setter/gettter方法
    改造jsp页面,将jsap页面的表单的name属性改成 customer.custName customer.custID
3和4方法为属性驱动,通过获取属性来封装数据
5、模型驱动封装数据
    Action类实现ModelDrivven<T>接口,重现getModel(){}方法
    Action类中创建私有的Customer对象,并进行初始化,getModel中返回的是Customer对象
    使用模型驱动jsp页面不需要改动,还使用custName()就可以  
    模型驱动具有局限性,使用模型驱动只能封装一个对象,如果一个表单中有多个对象的数据,只能一个对象使用模型驱动封装数据,别的对象采用属性驱动封装数据。

九、配置文件的详解

9.1 配置文件的详解
 <package name="default" namespace="/" extends="struts-default">
    <!-- 
        name表示浏览器的访问路径
        class表示Action类的全限定了类名
        method 表示访问时调用的方法名

     -->
    <action name="CustomerAction_addUI" class="cn.lx.web.action.CustomerAction" method="addUI">
       <!--
            result表示逻辑视图与物理视图的映射关系
            name表示方法返回的逻辑视图名
            对应的值为物理视图名,也即jsp路径
         -->
       <result name="success">jsp/customer/add.jsp</result>
    </action>

</package>
1、package主要作用是封装Action类的,便于管理Action类
    name:表示包的名称,包名是唯一的。
    namespace:命名空间 例如 namespace="/customer"
        一个Actoion 的访问路径是  namespace+action中配置的name属性的值
        使用namespace可以将配置文件进行分离,使用    <include file=""></include>进行组装,和jsp组合不同
    extends表示该包继承的父包,一般都会继承struts-default包,可以通过这个继承父包中的很多配置信息
2、action
        name表示浏览器的访问路径
        class表示Action类的全限定了类名    默认值为ActionSupport
            由struts-default.xml配置文件中的 <default-class-ref class=“”>节点决定 ,可以自定义默认类  
        method 表示访问时调用的方法名name表示浏览器的访问路径   默认为excute
        result表示逻辑视图与物理视图的映射关系
            name表示方法返回的逻辑视图名     默认为success
            type代表页面跳转的类型
                默认为dispatcher  转发
                    redirct   重定向
                    redictAction  重定向到Action 类
            对应的值为物理视图名,也即jsp路径
9.2 配置文件的详解
使用通配符进行配置
 <action name="CustomerAction_*" class="cn.lx.web.action.CustomerAction" method="{1}" >
         <result name="save">/jsp/success.jsp</result>
         <result name="addUI" >/jsp/customer/add.jsp</result>
 </action>
method="{1}"  {1}可以获取到第一个*的值
这种配法,可以使用一个Action只用配置一个action节点  

你可能感兴趣的:(框架,struts2.0)