Struts2 应用的开发步骤

来源:互联网 发布:it人才网 编辑:程序博客网 时间:2024/05/16 09:12

上周刚用Struts2做了个简单的登录例子,下面对开发Struts 2应用的过程做一个总结。

 

Struts 2应用的开发步骤:

(1)在web.xml文件中定义核心Filter来拦截用户请求。

由于Web应用是基于请求/响应架构的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filter,这样才可以让该框架介入Web应用中。

例如,开发Struts 2应用第1步就是在web.xml文件中增加如下配置片段:

<!-- 定义Struts 2的核心Filter -->

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng

.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<!-- 让Struts 2的核心Filter拦截所有请求 -->

<filter-mapping>

<filter-name>struts2</filter-name>

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

</filter-mapping>

 

(2)如果需要以POST方式提交请求,则定义包含表单数据的JSP页面。如果仅仅只是以GET方式发送请求,则无须经过这一步。

 

(3)定义处理用户请求的Action类。

这一步也是所有MVC框架中必不可少的,因为这个Action就是MVC中的C,也就是控制器,该控制器负责调用Model里的方法来处理请求。

MVC框架的底层机制是:核心Servlet或Filter接收到用户请求后,通常会对用户请求进行简单预处理,例如解析、封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法(Struts 1通常是execute,Struts 2可以是任意方法)来处理用户请求。这里又产生了一个问题:当Servlet或Filter拦截用户请求后,它如何知道创建哪个Action的实例呢?这有两种解决方案:

² 利用配置文件:例如,可以配置login.action对应使用LoginAction类。这就可以让MVC框架知道创建哪个Action的实例了。

² 利用约定:这种用法可能是受Rails 框架的启发,例如,可以约定xxx.action总是对应XxxAction类。如果核心控制器收到login.action请求后,将会调用LogoinAction类来处理用户请求。

在MVC框架中,控制器实际上由2个部分共同组成,即拦截所有用户请求,处理请求的通用代码都由核心控制器完成,而实际的业务控制(诸如调用Model,返回处理结果等)则由Action处理。

 

(4)配置Action。对于Java领域的绝大部分MVC框架而言,都非常喜欢使用XML文件来配置管理。配置Action就是指定哪个请求对应用哪个Action进行处理,从而让核心控制器根据该配置来创建合适的Action实例,并调用该Action的业务控制方法。例如,通常需要采用如下代码片段来配置Action。

<action name="login" class="org.crazyit.app.action.LoginAction">

...

</action>

上面配置片段指定如果用户请求URL为login,则使用org.crazyit.app.action.LoginAction来处理。 

现在Struts 2的Convention插件借鉴了Rails框架的优点,开始支持“约定优于配置”的思想,也就是采用约定方式来规定用户请求地址和Action之间的对应关系。

 

(5)配置处理结果和物理视图资源之间的对应关系。

当Action处理用户请求结束后,通常会返回一个处理结果(通常使用简单的字符串就可以了),可以认为该名称是逻辑视图名,这个逻辑视图名需要和指定物理视图资源关联才有价值。所以还需要配置处理结果之间的对应关系。

例如,通过如下代码片段来配置处理结果和物理视图的映射关系。

<action name="login" class=" org.crazyit.app.action.LoginAction ">

<!-- 定义3个逻辑视图和物理资源之间的映射 -->

<result name="input">/login.jsp</result>

<result name="error">/error.jsp</result>

<result name="success">/welcome.jsp</result>

</action>

上面粗体字代码指定了3个处理结果和3个物理视图之间的映射关系,配置片段指定当lee.LoginAction返回input时,实际将进入/login.jsp页面;当返回error时,实际将进入/error.jsp页面;当返回success时,实际将进入/welcome.jsp页面。

 

(6)编写视图资源。如果Action需要把一些数据传给视图资源,则可以借助于OGNL表达式。

 

经过上面6个步骤,就可以基本完成一个Struts 2处理流程的开发,也就是可以执行一次完整的请求/响应过程。

 

 

(参考资料:《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》 作者:李刚)

0 0
原创粉丝点击