struts2学习1:初识struts2
struts2
Struts2是在WebWork2基础上发展而来,属于MVC框架。优点:
- 提供了拦截器,可以进行AOP编程;
- 提供了类型转换器,可以把特殊的请求参数转换成需要的类型;
- struts2的应用可以不依赖于 ServletAPI和strutsAPI,无侵入式设计;
- 提供支持多种表现层技术,如JSP等等
- struts2的输入校验可以对指定方法进行校验
- 提供全局范围、包范围和Action范围的国际化资源文件管理实现。
搭建struts2开发环境
导入JAR文件
可以从http://struts.apache.org/download.cgi#struts2015下载struts.2.x.x-all.zip。下载完成之后解压文件。开发struts2应用需要依赖的JAR文件在lib文件夹下,不同的应用需要的JAR包是不同的。下面给出开发struts2程序需要的最少的JAR:1
2
3
4
5
6struts2-core-2.x.x.jar:struts2框架的核心类库
xwork-core-2.x.x.jar:XWork类库,struts2在其上面构建
ognl-2.6.x.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
freemarker-2.3.x.jar:struts2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar:ASF出品的日志包,struts2框架使用这个日志包来支持Log4j和JDK1.4+的日志记录
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6之后必须加入此文件。
struts.xml
struts2的默认配置文件为struts.xml,1
2
3
4
5
6
7
8<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
</struts>
web.xml
框架通过Filter(在web.xml中配置)启动。需要在web.xml中配置,1
2
3
4
5
6
7
8<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>
StrutsPrepareAndExecuteFilter中的init()方法将会读取类路径下默认的配置文件struts.xml完成初始化操作。
struts2读取到struts.xml的内容之后,会以JavaBean的形式存放在内存中,以后每次struts2对用户的请求处理将会使用内存中的数据,而不会每次都去读取struts.xml完成初始化操作。
第一个struts2应用
第一步不做太难的,从HelloWorld做起
配置文件struts.xml
1 | <?xml version="1.0" encoding="UTF-8" ?> |
HelloWorldAction
HelloWorldAction类的代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13public class HelloWorldAction {
private String message;
public String getMessage() {
return message;
}
public String execute(){
message = "我的第一个struts应用";
return "success";
}
}
jsp页
在jsp也中,通过${message}即可获得action传递过来的值。
最后,发布到服务器,通过http://localhost:8080/struts01/test/helloworld进行访问。
注:在配置文件中,action中配置的method返回值都是String类型的,浏览器在请求时只要请求http://localhost:8080/struts01/test/helloworld即可,不需要具体知道hello.jsp路径。
struts2的处理流程
StrutsPrepareAndExecutFilter是struts2框架的核心控制器,它负责拦截由1
<url-pattern>/*</url-pattern>
指定的所有用户请求,当请求到达时,该Filter会过滤用户的请求。默认的情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入struts框架处理,否则框架就会忽略这个请求。当请求转入struts框架处理时会先经过一系列的拦截器,然后再到Action。
注:与struts1不同的是,struts2对用的每一次请求都会创建一个Action,所以上struts2中的Action是线程安全的。
为多个应用指定多个struts配置文件
有时为了提供struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个,然后在struts.xml文件中包含其他配置文件:1
2
3
4<struts>
<include file="struts-user.xml"/>
<include file="struts-order.xml"/>
</struts>