struts2
一个基于Xwork的MVC框架
Xwork 是一个命令模式框架
是一个标准的Command模式实现,并且完全从web层脱离出来。
Xwork提供了很多核心功能:
前端拦截机(interceptor),
运行时表单属性验证,类型转换,
强大的表达式语言(OGNL – the Object Graph Notation Language),
IoC(Inversion of Control控制反转)容器等
使用struts2需要的类库:
1. commons-fileupload-X.X.X.jar(可选)
2. commons-io-X.X.X.jar (可选)
3. commons-logging-X.X.X.jar (可选)
4. commons-logging-api.X.X.jar(可选)
5. freemarker-X.X.X.jar
6. ognl-X.X.X.jar
7. struts2-core-X.X.X.X.jar
8. xwork-core-X.X.X.jar
9. javassist-3.7.ga.jar(new for Struts versions 2.2.1 and higher)
环境搭建步骤:
1. web.xml配置struts2过滤器
<!-- 配置Struts2核心控制器 StrutsPrepareAndExecuteFilter
2.1.3之前的版本使用 FilterDispacher过滤器
-->
<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. 在classpath下定义struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!--constant 用来配置struts2常量属性
可以在多个文件声明越靠后的优先级越高
struts2按以下顺序搜索常量:
default.properties
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
struts2支持struts.properties 为兼容WebWork
配置常量应首选考虑struts.xml
配置信息可以在文档或default.properties中找到
-->
<!--
该属性设置Struts2应用是否使用开发模式
如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示
并且修改配置文件后的改动会反映到web应用中不需要重启web服务器
默认值:false
通常,在开发阶段,为true,发布阶段后,为false
-->
<constant name="struts.devMode" value="true" />
<!--
指定Struts2处理的请求后缀,该属性的默认值是.action和空,
即所有匹配*.action的请求都由Struts2处理
如果用户需要指定多个请求后缀,以逗号隔开
-->
<constant name="struts.action.extension" value="action,do,," />
<!--package 将多个action 组织为一个逻辑单元
name 指定包名
extends 指定要继承的包
struts-default包定义在struts-default.xml中
struts-default包为abstract包(不能有action定义,只能被继承)
struts-default包中定义了struts2内置的一些result类型及拦截器等
namespace 指定命名空间
可以将包中的action配置为不同的名称空间,以便在不同命名空间使用同名的action;
Struts2使用action名字和命名空间来标示action,
即在收到请求时把URL分为namespace和action名字两部分,
在strus.xml查找namespace/xxx.action,如无,查找默认命名空间
默认命名空间是"",表示可以接收所有命名空间
访问URL:
/hello.action
/xxx/hello.action
/xxx/yyy/hello.action
struts2支持"/"命名的根命名空间
namespace="/" 访问URL:/xxx.action
namespace一般以模块命名(以/开头)
namespace="/user" 访问URL:/user/xxx.action
namespace="/aaa/bbb" 访问URL:/aaa/bbb/xxx.action
Struts2默认访问URL后缀为.action (可以省略)
可以通过常量struts.action.extension指定
多个包可以定义相同的namespace
-->
<!--
action元素代表具体业务控制器
name指定访问的URL
class指定Action类名
class省略时 class默认为ActionSupport 默认执行execute()
class指定Action时默认执行返回String类型的execute()
result元素通过名称指定action的返回结果
name属性指定返回URL名称 默认为success(Action接口定义常量)
-->
<package name="default" namespace="/"extends="struts-default">
<action name="index">
<result >/index.jsp</result>
</action>
<action name="hello"class="org.struts2.ch1.action.HelloAction">
<result name="success">/ch1/hello.jsp</result>
</action>
</package>
</struts>
3. 编写具体Action类
/*
* struts2 Action的定义方式:
方式1:
action可以是一个普通的pojo对象
但需要有一个返回String类型的execute()
方式2:
实现Action接口
方式3:
常规的做法是继承ActionSupport
注意:
struts2的Action每次请求创建一个新的实例(线程安全)
struts1的Action每次请求共享一个实例(线程不安全)
*/
public class HelloAction {
public HelloAction(){
System.out.println("创建 Struts2 Action实例");
}
public String execute(){
System.out.println(this.getClass().getSimpleName()+" execute...");
return "success";
}
}