1. 基本概念
struts2是一个非常优秀的MVC开源框架,由传统的struts1和webwork两个经典的框架合并而来,核心就是webwork,采用拦截器的机制来处理用户请求,它虽然是struts1的升级版,但是相对于struts1改动很大。
1.1 核心特点
… 允许POJO对象作为action;
… 支持更多视图技术(JSP、freemarker等);
… 与servlet解耦,完全脱离servlet-api,如request,sessison等;
… 基于spring AOP思想的拦截器机制,更容易拓展;
… 文件上传下载;
… ognl表达式应用;
… 支持EL表达式;
1.2 下载安装地址:http://mirrors.shu.edu.cn/apache/struts/2.5.16/
apps :基于struts2的示例应用
docs :struts2相关文档,API等
lib :struts2核心类库以及第三方插件类库
src :struts2的源码
tips:开发时没必要使用全部jar包。
2.配置
2.1 新建maven项目(war包),导入struts2依赖
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
导入之后会看到:
struts2-core-xxx.jar: truts2的核心包
Log4j-api-xxx.jar: 用来支持log4j
freemarker-xxx.jar: 模板引擎,一个基于模板生成文本输出的通用工具
ognl-xxx.jar: 对象导航语言,struts2通过它来获取和设置对象属性
commons-fileupload-xxx.jar :文件上传组件,2.1.6版本后需要加入
commons-io-xxx.jar :IO包,传文件依赖的包
commons-lang3-xxx.jar :java.lang包的增强包
javassist-xxx.jar :是一个开源的分析、编辑和创建java字节码的类库
2.2 编写Action类
Action就是处理用户请求的动作类,类似于javaweb中的servlet。
public class TestAction {
public String testMethod(){
System.out.println("test!");
return null;
}
}
tips:类名后缀尽量采用Action,可读性强。
tips:方法修饰符使用public,因为需要外部访问。
tips:方法返回值是String类型。
2.3 配置Action
Action需要配置两个xml文件,一个是struts.xml,一个是web.xml,struts.xml用来配置Action,web.xml用来配置过滤器。
配置web.xml
<!-- Filters -->
<!-- START SNIPPET: filter -->
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- END SNIPPET: filter -->
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="package1" extends="struts-default">
<action name="test" class="com.xhh.action.TestAction" method="testMethod"></action>
</package>
</struts>
然后就可以测试来访问action:http://localhost:8080/struts25/test
3.struts2的运行流程
- 启动服务器的时候,加载web.xml,读取到我们的和标签。
- 实例化StrutsPrepareAndExecuteFilter过滤器,执行init方法,加载struts.xml文件。
- 浏览器发送访问请求"http://localhost:8080/struts25/test"。
- StrutsPrepareAndExecuteFilter拦截到该请求,并且分析得到action的名字"test"。
- 在sturts.xml文件中找到名叫"test"的,并获取到同级信息:
class=“com.xhh.Action.TestAction”
method=“testMethod” - 调用com.joe.Action.TestAction中的testMethod方法。