struts2:入门

402 阅读3分钟

介绍

struts2 以WebWork为核心,采用拦截器的机制来处理用户的请求 struts2 = struts+WebWork struts2其实是webWork的2.0版本

Struts2的开发步骤

  1. 导包
  •  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
    
  1. 在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>

  1. 开发一个action:暂时理解成servlet,负责处理请求
  2. 在src目录下创建一个名字叫做:struts.xml的文件,struts2的主配置文件,名字必须是它

struts加载过程

  1. 启动web.xml
  2. 通过核心过滤器启动struts-default.xml(创建各种拦截器,对象),需要的参数从default.properties里面取
  3. 最后加载struts.xml

struts的路径匹配原则

/a/b/c/book_delete

  1. 首先去寻找有没有namespace值为/a/b/c的package
  2. 如果没有则寻找/a/b
  3. ...直到/
  4. 如果有则再改package中寻找name值为book_delete的action,如果没有则404

action开发的三种方式

  1. 继承ActionSupport类
  2. 实现Action接口
  3. 什么都不继承和实现 推荐使用第三种:因为struts2是一种非侵入式的轻量级框架 侵入式:如果要使用某个功能,就必须继承它的一些类或者实现某些接口

action方法

  1. action中写各种方法:不同方法可以处理不通过的请求
  2. action方法必须是public ,返回值必须是String,不能有任何参数
  3. Action中预定以字符串代表的意思
    • SUCCESS: 表示请求处理成功
    • NONE:默认
    • ERROR 请求处理出错
    • INPUT 表示提交的数据不够还需要提交数据
    • LOGIN 登录
  4. 如果用户提交的数据中包含属性的名字,struts2会自动将提交的数据复制给这两个属性

自定义转换器

  1. 需要在src创建一个名字叫做:xwork-conversion.properties java.util.Date=com.dyr.conversion.DateConverter
  2. 在配置文件中指定要转换的类型,例如:
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;
	}

}


配置文件单独出来

  1. 配置文件包:com.dyr.config
  2. 将各种配置放入包:book.xml,user.xml,约束与struts.xml相同
  3. 在struts.xml中包含上述文件

全局配置

  1. 配置后缀
<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>
  1. 所有package必须extends struts-default
  2. struts2如果要使用json返回数据,需要导struts-json-plugin插件包