Struts2 应用的开发步骤
2014-02-11 18:25
197 查看
上周刚用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整合开发》 作者:李刚)
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整合开发》 作者:李刚)
相关文章推荐
- Struts2应用的开发步骤
- Struts2与Hibernate整合应用开发步骤及相关文档解释
- Struts2应用的开发步骤和运作流程
- 小结struts2应用开发步骤和流程(三)
- Struts2应用的开发步骤
- Struts2应用的开发步骤和运作流程
- Struts2应用开发步骤
- 【学习笔记】Struts2 应用开发步骤
- 3.3.1: Struts2应用的开发步骤
- 第四天:struts2开发步骤:
- 搭建Struts2开发环境的步骤
- Struts2 开发程序的基本步骤
- iOS应用内付费(IAP)开发步骤列表
- 【C++码农】WMI技术介绍和应用——VC开发WMI应用的基本步骤
- iOS 应用内付费(IAP)开发步骤一:填写相关的税务,银行,联系人信息;
- iOS应用内付费(IAP)开发步骤列表
- [置顶] 面向业务开发应用:如何避免步骤间操作冲突
- 浪曦_Struts2应用开发系列_第2讲.Struts2的类型转换-学习笔记
- web应用开发入门-使用mac版本eclipse搭建tomcat下web应用项目详细步骤
- Struts2之struts-2.3.20开发环境的搭建并实现第一个Hello World小应用