一、Struts2
1.1 Struts2的定义
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
1.2 Struts2的工作原理
- 客户端提交一个
HttpServletRequest请求(action或JSP页面)。 - 请求被提交到一系列
Filter过滤器,如ActionCleanUp和FilterDispatcher等。 FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器。- 请求被发送到
FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个action来处理这个Request。 - 如果
ActionMapper决定需要调用某个action,FilterDispatcher则把请求交给ActionProxy进行处理。 ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action。action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。- 最后
ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。
1.3 Struts2的构成
FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。ActionProxy是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。ConfigurationManager是xwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置等。ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter。Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。
1.4 Struts2的特点
- POJO形式和POJO动作 - 已经摆脱了Struts2的动作表单的Struts框架的一个组成部分。Struts2可以使用任何的POJO接收的形式输入。同样的,你现在可以看到任何POJO的Action类。
- Tag支持 - Struts2的形式提高了标签的新标签让开发人员写更少的代码。
- AJAX支持- Struts2中已经认识到了Web2.0技术,并整合到产品中AJAX支持创建AJAX的标签,该功能非常相似的标准Struts2的标签。
- 容易整合 - 与其他框架如Spring,Tiles和SiteMesh的整合是现在更容易与各种集成Struts2。
- 模板支持 - 支持生成使用模板。
- 插件支持 - 核心Struts2行为,可以加强和扩大使用插件。大量的插件可供Struts2。
- 概要分析- Struts2的提供集成的配置,调试和分析应用程序。此外,Struts还提供了内置调试工具的帮助下,集成调试。
- 标签修改容易 - 在Struts2标签标记,可以调整使用FreeMarker模板。这并不需要JSP或Java知识。基本的HTML,XML和CSS知识是不够的修改的标签。
- 提升更少的配置 - Struts2的促进更少的配置与用于各种设置的帮助下,使用默认值。你没有的东西,除非它偏离由Struts2的默认设置的配置。
二、Struts2的简单配置
2.1 解压Struts2的压缩包
如图下所示
apps:应用示例
docs:文档资料
lib:库(*.jar)文件
src:源码资料
2.2 解压apps\struts2-blank.war(提供的空工程)
如图所示
![]()
示例空白工程源码
2.3 找到项目的配置文件
struts2-blank\WEB-INF\web.xml
拷贝过滤器的配置信息到自己的项目中(通过观察发现,该过滤器过滤项目中所有的请求)
<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>
2.4 拷贝项目中的jar包
struts2-blank\WEB-INF\lib路径下所有的jar包
2.5 拷贝struts2的核心配置文件(struts.xml)
将struts2-blank\WEB-INF\classes\struts.xml
拷贝至src根目录
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package>
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
2.6 创建一个普通的java类,然后再类中创建一个普通的方法
public class Hello {
public String helloStruts() {
System.out.println("Hello Struts " + this);
return null;
}
}
2.7 开始在struts.xml中配置java类
删除其他的配置信息
在package标签中配置action元素以及name,class,method三个属性。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="shs" class="shs.hello.Hello" method="helloStruts"></action>
</package>
</struts>
本文详细介绍了Struts2框架的定义、工作原理、构成及其特点。从Struts2的定义出发,阐述了其作为Struts和WebWork的结合产物,如何通过拦截器机制处理请求。文中还详细解释了FilterDispatcher、ActionMapper、ActionProxy等核心组件的作用,以及Struts2在AJAX支持、模板支持、插件支持等方面的特性。通过简单的配置步骤,展示了如何在项目中集成和使用Struts2。
2057

被折叠的 条评论
为什么被折叠?



