Struts2串讲

Struts2串讲

()Struts2概述

Struts2是一个全新的基于MVCWeb编程框架它的整体设计完全不同于Struts1。新的Struts2框架在很多方面采纳了Webwork的设计思想。事实上,Struts2StrutsWebwork整合优化后的新一代的Web编程框架,具有如下的特点:

1.基于AOP的设计思路,将相关的内容集中到单独的软件层面中,这主要体现在Struts2Interceptor的设计上。

2.Struts2Action类不再依赖于Struts框架,任何的类都可作为Struts2Action.

3.提供了大量的自带的Interceptor来实现许多系统级的服务,使开发者可以忽略很多Web编程处理中的细节,从而可以集中精力处理核心的业务问题.

4.提供了更为方便、独立的Spring的集成服务支持。

5.提供了更为方便、独立的Tiles的集成服务支持。

6.提供了大量的缺省配置,这样可以大大简化基于Struts2开发的配置工作量。

7.内置Web2.0 AJAX 特性。

8.内置validation服务。

()Struts2的前端控制器

Struts2的控制器(Controller)是一个过滤器,所有的请求都需要经过该过滤器,其类型为:org.apache.struts2.dispatcher.FilterDispatcher

FilterDispatcher接收到一个请求后,会根据相关的配置信息查找服务于该请求的interceptorsaction类并自动创建它们的实例及调用它的方法服务于请求,它还会根据interceptorsaction的执行结果来调用视图层组件Result来生成响FilterDispatcher过滤器必在应用的web.xml 中部署,并配置为过滤所有的请求,配置方法如下:

<filter>

<filter-name>filterDispatcher</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

<filter-mapping>

<filter-name>filterDispatcher</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

()自定义Interceptor

Interceptor拦截器是遵守struts2规范的一个对象,类似filter,action调用之前及之后被调.有内置或自定义.内置常用为请求参数到action属性的绑定(param),参数校验,消息解析,文件上传处理等.

需要继承AbstractInterceptor接口并且实现方法:

public String intercept(ActionInvocation invocation){

String result = invocation.invoke();

return result;}

<package name="overview" extends="struts-default" namespace="/core">

     

 <interceptors>

 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" /> 内置的

<interceptor name="sessionInterceptor" class="com.tarena.ums.interceptor.SessionInterceptor"/> 

//自定义

 <interceptor-stack name="sessionStack">

       <interceptor-ref name="sessionInterceptor"/>

       <interceptor-ref name="defaultStack"/>

 </interceptor-stack>

       </interceptors>

       <default-interceptor-ref name="sessionStack"/>

 <action name="greeting" 

class="com.tarena.struts2.action.GreetingAction"  method="sayGreeting">

           <interceptor-ref name="params" />   

   <result name="success">/core/greeting.jsp</result>

</action>    

</package>

()一些常用的API和数据模型

1.ActionContext是一个只在当前线程中可用的对象,即它存储在ThreadLocal中,它用来存放一些同当前的action密切相关的信息。使用它可以在所有服务于当前请求的对象之间共享信息。在interceptoraction,及result中均可访问该对象。

2.ValueStack是一个精心设计的栈结构,在栈中可以存放程序运行过程中产生的数据以便实现共享。更为重要的是可以使用ELValueStack中的对象进行赋值以及读取对象的信息。所有的EL操作都是针对最先找到的栈中的对象进行的,搜索顺序为从栈顶到栈底。

3. OGNL(Object Graphic Navigation Language)是一种表达式语言,使用它可以动态地根据某个字符串的表达式对某个对象进行方法调用操作,而不需要知道该对象的具体类型。Struts2ValueStack支持使用OGNL来动态操作栈中的对象。

()编程中的应用

Struts2框架不强制Action类继承于任何父类或实现任何的接口,只要一个类中满足如下的要求,都可以作为Struts2Action

1.有公共的缺省构造器

2.业务方法遵守签名规则:public String methodName()

在默认情况下,控制器会调用Action类的execute方法。如果要调用其它的方法,可以在<action>标签中通过属性method来指定其它的方法名。在开发时,为了保证编译期方法签名的检验,Struts2提供了一个轻量级的接口com.opensymphony.xwork.Action,该接口中规定了execute方法,实现在接口并不会影响程序的便携性。为了更为方便地使用Struts2的其它特性比如:读取资源文件、实现校验等,Struts2提供了该接口的一个实现类供开发者继承使用:com.opensymphony.xwork.ActionSupport

Struts2中的Action对象即作为业务处理对象也作为数据传输对象。

Struts2Action类需要在struts.xml文件中进行配置,这样每个Action类都对应一个可以被访问的URL

在配置文件中,action是通过package来组织的。一个package中可以包含多个action的定义,并且一个package可以通过继承于其它的package来复用父package中的配置信息。Struts2提供了一个叫做的struts-default的缺省的package,应用自定义的package通常继承于struts-default

<package name="albumDefault" 

extends="struts-default“ 

namespace=“/core”>

<action 

namespace="welcome" class="com.allanlxf.struts2.action.WelcomeAction">

<result>/welcome.jsp</result>

</action>

</package>

每个package都同某个namespace关联,这样在控制器接收到请求时,可以将请求的URL映射为某个namespace,并从该namespace所对应的package中查找action

多个package可以对应同一个namespace,没有指定namespacepackage被认为在缺省的namespace中。控制器在查找action时,先看指定的namespace中是否存在该action,如果不存在则在缺省的

namesapce中查找。

1. welcome被认为是要查找的action的名字。

2. namespace/core所对应的package中进行查找。

3. 如果找不到,则在缺省的namespace所对应的package中查找。

4. 如果找不到,报告异常。

注意:在处理任意一个请求的过程中,系统最多查两个名字空间,即最长的名字空间和缺省的名字空间。还有/并不代表缺省的名字空间。

()标签库的应用

使用struts的标签来读取当前ActionContext所关联的ValueStack中的对象的信息,其中message为一个OGNL表达式。

<s:property value=“message” />

<s:property value="#request" />  //#ValueStack之外的属性

<s:url action="login" namespace="/" id="loginActionURL"/>

    <s:param name="user.id" value="id" />      //可以传参数

  </s:url>

<form method="post"

action="<s:property value="#loginActionURL"/>">

<s:iterator value="users" status="status">   //value:要遍历的对象

     <s:property value="#status.count"/>

     <s:url action="load" namespace="/user" id="loadURL">

        <s:param name="user.id" value="id" />

      </s:url>

     <a href="${loadURL}"><s:property value="userName"/></a>

   <s:date name="birthday" format="yyyy-MM-dd"/>

  </s:iterator>

()当一个请求到来,Struts2的流程

客户端发送请 http://localhost:8080/album-app/core/welcome.action

 根据web.xml的配置所有的请求都被FilterDispatcher过滤,根据default.properties的配置,以.action结尾的请求为到action的请求。控制器会根据struts.xml中的配置构建action的调用栈,interceptors在前,然后为action,最后为result。系统创建一个ActionContext对象,并将它和当前的线程关联。系统会在ActionContext对象中构建一个ValueStack用来存放操作过程中的数据,并将action对象放入栈顶。

 调用staticParams interceptor,该interceptor会 struts.xml中配置的当前action<param>信息赋给ValueStack中的action实例,此时使用OGNL实现。

 执行actionexecute方法。

 根据execute的返回值调用相应的Result对象。

 result对象执行目标资源,生成到客户端的响应。

 FilterDispatcher执行ActionCon text的资源回收工作。

(八)知识点回顾

1.报表jasperreport

2.log4j

3.配置文件

4.json

5.interceptor

6.exception

7.from表单的提交,验证

8.文件上传

9.标记库

10.单元测试

<!--EndFragment-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值