Struts2

一。Struts2的作用
1.解决MVC开发过程中Controller的问题、
2.什么是MVC
MVC是一种编程思想,由设计者人为的将项目划分成三个层次:M(Module 模型层)V(View 视图层)C(Controller 控制层)
3.MVC编程思想的优点
① MVC处理后,便于多人协同开发,提高开发效率

② 解耦和:解除代码的强关联性 在修改一部分代码实现时不影响其他代码

        4.Struts2业务处理流程

                

        5.解决Servlet作为Controller的问题

   ① 收集数据的代码冗余(如:数据收集、处理中文字符集等)

struts2使用成员变量的形式进行参数的收集,并自动进行类型转换,时间类型支持 yyyy-MM-dd HH:mm:ss格式
   ② 手动进行参数的类型转换
   ③ 跳转路径写死在Controller中不利于后续维护
二。开发步骤简介
    1.框架环境搭建:(本次是基于struts2.x版本描述)
① 获得strts2框架(开源框架  open_source 免费 有源代码)  可以到www.apache.org网站下载
apps  存放的是例子
docs  存放docs文档
lib   相关jar包
src   struts2源代码  xwork源代码
② 第三方依赖jar包
commons-fileupload-1.3.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.15.1.jar
xwork-core-2.3.15.1.jar
    2.初始化配置
将struts.xml放置在src根目录下

在web.xml中配置struts2的核心过滤器  目的:让struts2框架生效 

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

    在struts.xml中的基础搭建

    注意:跨包之间的跳转只能用于Action

<!--
    package标签属性
        name   :在整个struts.xml配置文件中要唯一
        extends:值必须是struts-default 
-->			
<package name="package1" extends="struts-default">
<!-- 
    action标签属性:
        name:是未来用户请求的路径
	    http://localhost:8080/struts2/first
	class:权限定名
-->								
    <action name="first" class="com.struts2.FirstAction">
        <result name="sucess">/a/index.jsp</result>
    </action>
</package>

    全局跳转,解决jsp跳转路径冗余问题

<global-results>
    <result name="success" type="">/result.jsp</result>
</global-results>

    注意:

      ① 全局跳转一定是在开发后期,优化时使用的
      ② 当全局跳转与局部跳转发生冲突时,局部优先
      ③ 全局跳转只在本包中有效(pachage标签内部使用)

三。原理解析
1.Action的创建
Servlet: 一个Servlet类只会创建一个实例对象,所以Servlet是单例的
Action:  一个Action类,每一次请求都会创建一个新的实例对象,所以Struts2是多例的
2.Struts2数据处理机制
 Servlet数据存储在作用域中  用EL表达式来获取数据  在JSP文件中用JSTL标签+EL表达式用来显示
3.ValueStack
① ValueStack的作用:管理(存储) 一次请求中,所涉及的数据
Struts2通过ValueStack(值栈)将客户端数据传递到Action中,
数据都会经过parameters作用域封装成键值对后
根据属性名将参数类型转换并通过set方法进行值的注入
② 优点:与视图层解耦合,防止更换视图层显示技术时Action的代码无法执行
③ 值栈生命周期:   一次请求有效
④ ValueStack为什么叫做栈
[1]后入先出
客户端访问AAction forward跳转到BAction这是一次请求所以A会先存入root区B后存入root区
BAction的位置为第一位
root区底层是由栈来完成的  这个栈是用ArrayList实现的
[2]数据copy问题
同名属性从客户端接收数据时如果有同名属性那么,第一次客户端传来的一个值
会覆盖后面经过forward跳转的Action中的所有同名属性的值

        4.拦截器
① 作用:把多个Action中共有的代码,提取到拦截器中,减少代码冗余
② 拦截器体系:
【1】 自定义拦截器
【2】 系统拦截器:
[1]params        接收客户端提交的数据
[2]fileupload    文件上传拦截器
[3]exception    拦截器
[4]workflow     拦截器
③ 系统拦截器的放置位置
struts-default.xml中有一个默认系统包struts-default  是一个抽象的
这个包中含有大量的封装栈  所以在我们继承了struts-default 时会继承到系统封装的拦截器
注意:当自定义了拦截器栈,并设置成了默认栈后,系统默认拦截器栈将失效,所以一定要将系统默认栈引入自定义栈中
④ 方法拦截器

作用:在DMIAction开发过程中,通过方法拦截器可以拦截Action中的某些方法

        5.工作原理

            在struts2框架中处理大概分为以下几个步骤与
    ① 客户端初始化一个指向Servlet容器(如Tomcat)的请求
    ② 这个请求经过一系列的过滤器(Filter)这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器
    ③ 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action
    ④ 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理嫁给ActionProxy
    ⑤ ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类
    ⑥ ActionProxy创建一个Actionlnvocation的实例来
    ⑦ Actionlnvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器的调用
    ⑧ 一旦Action执行完毕,Actionlnvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是一个JSP 另一个Action调用链或者是FreeMarker的模板。

        6.工作流程
    ① 客户端发出HTTP请求
    ② 根据web.xml配置,该请求被FilterDispatcher接收
    ③ 根据struts.xml配置,找到需要调用的Action类和方法,并通过IOC方式,将值注入给Action
    ④ Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证
    ⑤ Action执行完毕,根据struts.xml中的配置找到哦对应的返回结果result,并跳转到响应页面

    ⑥ 返回HTTP响应到客户端浏览器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值