介绍
struts2 以WebWork为核心,采用拦截器的机制来处理用户的请求 struts2 = struts+WebWork struts2其实是webWork的2.0版本
Struts2的开发步骤
- 导包
-
commons-fileupload-1.3.2.jar : 文件上传下载的支持包 -
commons-io-2.2.jar :io包,文件读写 -
commons-lang3-3.2.jar :对java.lang包的增强 -
commons-logging-1.2.jar : 通用日志包 -
freemarker-2.3.22.jar : Struts2的标签模板库 -
javassist-3.17.1-GA.jar:Struts2对字节码处理的功能包(处理字节码) -
log4j-1.2.17.jar :log4j日志包 -
ognl-3.0.19.jar:ognl表达式支持包(类似于EL,专门用于Struts2取值) -
struts2-core-2.3.32.jar:Struts2的核心包 -
xwork-core-2.3.32.jar: xwork核心包,里面有Struts2在运行时需要的api
- 在web.xml中引入struts2核心功能
<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>
- 开发一个action:暂时理解成servlet,负责处理请求
- 在src目录下创建一个名字叫做:struts.xml的文件,struts2的主配置文件,名字必须是它
struts加载过程
- 启动web.xml
- 通过核心过滤器启动struts-default.xml(创建各种拦截器,对象),需要的参数从default.properties里面取
- 最后加载struts.xml
struts的路径匹配原则
/a/b/c/book_delete
- 首先去寻找有没有namespace值为/a/b/c的package
- 如果没有则寻找/a/b
- ...直到/
- 如果有则再改package中寻找name值为book_delete的action,如果没有则404
action开发的三种方式
- 继承ActionSupport类
- 实现Action接口
- 什么都不继承和实现 推荐使用第三种:因为struts2是一种非侵入式的轻量级框架 侵入式:如果要使用某个功能,就必须继承它的一些类或者实现某些接口
action方法
- action中写各种方法:不同方法可以处理不通过的请求
- action方法必须是public ,返回值必须是String,不能有任何参数
- Action中预定以字符串代表的意思
- SUCCESS: 表示请求处理成功
- NONE:默认
- ERROR 请求处理出错
- INPUT 表示提交的数据不够还需要提交数据
- LOGIN 登录
- 如果用户提交的数据中包含属性的名字,struts2会自动将提交的数据复制给这两个属性
自定义转换器
- 需要在src创建一个名字叫做:xwork-conversion.properties java.util.Date=com.dyr.conversion.DateConverter
- 在配置文件中指定要转换的类型,例如:
public class DateConverter extends StrutsTypeConverter{
//yyyy-mm-dd
//yyyy/mm/dd
//dd-mm-yyyy
//yyyy年mm月dd日
private SimpleDateFormat[] dateFormat ={
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyyMMdd"),
new SimpleDateFormat("yyyy年MM月dd日")
};
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
for(SimpleDateFormat format:dateFormat){
System.out.println("----");
try {
Date date = format.parse(values[0]);
return date;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
配置文件单独出来
- 配置文件包:com.dyr.config
- 将各种配置放入包:book.xml,user.xml,约束与struts.xml相同
- 在struts.xml中包含上述文件
全局配置
- 配置后缀
<constant name="struts.action.extension" value="dyr"></constant>
2. <global-results>
<!-- 当前文件下所有action的指定方法,如果返回值时success,都统一跳转到
/html/success.html
-->
<result name="success">/jsp/success.jsp</result>
</global-results>
- 所有package必须extends struts-default
- struts2如果要使用json返回数据,需要导struts-json-plugin插件包