Struts2的核心类库 名称 说明 Struts2-core-2.3.4.jar 核心类库 Xwork-core-2.3.4.jar Xwork的核心类库 Ognl-3.0.5.jar Ognl表达式语言类库 Freemarker-2.3.19.jar Freemarker模板语言支持类库 Commons-io-2.0.1.jar 处理IO操作的工作类库 Commons-fileupload-1.2.2.jar 文件上传类库 Javassist-3.11.0.GA.jar 分析、编辑和创建java字节码的类库 Asm-commons-3.3.jar Asm是一个java字节码处理框架,使用它可以动态生成stub类和proxy类,在java虚拟机装载类之前动态修改类的内容 Asm-3.3.jar Commons-lang-3.3.1.jar 包含了一些数据类型工具类,是java.lang.*的扩展 注意:因为Struts的版本号不一样所以jar包最好的数字是版本号信息。 搭建Struts2 1、将需要的jar包都添加到项目类库中。 2、在项目的web.xml中配置struts2的拦截器信息。 <!-- 配置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> 3、配置struts2的struts.xml文件。Struts.xml文件是必须要放在src目录下的,也就是必须跟类放在一起。 struts.xml文件错误。这种错误又分为以下几种:1,struts.xml文件名错误。一定要注意拼写问题;2,struts.xml文件放置路径错误。一定要将此文件放置在src目录下。编译成功后,要确认是否编译到classes目录中;3,struts.xml文件内容错误。下面给出一个正确的struts.xml文件以供参考。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="mypackage" extends="struts-default" > <action name="first"> <result>/first.jsp</result> </action> </package> </struts> Action对象 Action对象是Struts2框架中的重要对象,主要用于处理Http请求。 Action接口中包含5个静态常量: SUCCESS代表Action执行成功返回的值,返回页面。 NONE代表Action执行成功,但不返回页面。 ERROR代表Action执行失败,返回的值。 INPUT代表action需要某个输入信息页面的返回值。 LOGIN代表需要用户登录的返回值。 Action的基本流程 Struts2框架主要通过Struts2的过滤对象拦截HTTP请求,然后将请求分配给指定的Action处理。 动态Action 创建UserAction类继承ActionSupport。 import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { public String add() throws Exception{ return "add"; } public String update() throws Exception{ return "update"; } } 配置struts.xml文件。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 配置Struts支持动态Action, 必须存在 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- strict-method-invocation在2.5版本,为了限制DMI,默认启用了严格的方法访问,不想启用要改为false,如果启用严格访问模式,无法实现动态Action --> <package name="mypackage" extends="struts-default" strict-method-invocation="false"> <action name="user" class="com.wgh.UserAction"> <result name="add">first.jsp</result> <result name="update">update.jsp</result> </action> </package> </struts> 添加页面访问链接 <a href="user!add">添加用户</a> <a href="user!update">修改用户</a> Struts2的配置文件 名称 说明 Struts-default.xml 位于Struts2-core-2.3.4.jar文件的org.apache.Struts2包中 Struts-plugin.xml 位于Struts2提供的各个插件包 Struts.xml Web应用默认的Struts2配置文件 Struts.properties Struts2框架中属性配置文件 Web.xml 此文件是Web应用中的web.xml文件,在其中也可以设置Struts2框架的一些信息。 <package>标签 配置好的Package可以被其他package继承。提高了配置文件的重用性。 包的属性如下: 属性 说明 Name 声明包的名称,以方便在其他地方引用,属性必须 Extends 用于声明继承的包,即其父包 namespace 指定命名空间,即访问此包下的action需要访问的路径 Abstract 将包声明为抽象类型(包中不饱和action) <package name="mypackage" namespace="/abc" extends="struts-default" strict-method-invocation="false"> <action name="user" class="com.wgh.UserAction"> <result name="add">first.jsp</result> <result name="update">update.jsp</result> </action> </package> 访问路径 <a href="abc/user!add">添加用户</a> <a href="abc/user!update">修改用户</a> 注意包设置了命名空间后,必须创建命名空间的文件夹(位于WebContent下),将访问的页面放在与命名空间对应的文件夹中。 <action>相关配置 相关属性 属性 说明 Name 用于配置Action对象被请求的url映射 Class 指定Action对应的类名 Method 设置请求Action对象时调用该对象的哪个方法 Converter 指定Action对象类型转换器类 使用通配符简化配置 *:匹配0个或多个字符。 :转义字符,如需要a者输入“a”。 Class属性获取通配符,使用{1},{2},{3}…等方式获取 <action name="*" class="com.wgh.{1}"> <result name="add">first.jsp</result> <result name="update">update.jsp</result> </action> Action配置访问结果的响应<result> 属性就一个name,默认“success”。根据访问action配置类的方法返回的字符匹配name,跳转到对应的页面。 Struts2的开发模式 Struts2提供了Map类型的request、session、application,可以通过ActionContext对象中获得。该对象位于com.opensymphony.xwork2包中。 1、 实例化ActionContext public static ActionContext getContext(); 2、 获取Map类型的request ActionContext对象提供的get方法 Public Object get(Object obj) 实际应用 Map request=ActionContext.getContext.get(“request”); 3、 获取Map类型的request 直接访问getSession()方法。 Public Map getSession(); 4、 获取Map类型的application 直接使用getApplication()方法获取。 Public Map getApplication(); 域模型DomainModel 通过访问Action类直接方法Action类中的对象信息。 private User user; public String add() throws Exception{ return "add"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String update() throws Exception{ return "update"; } 使用struts标签必须添加引用代码,放置文件的最上方。 <%@taglib prefix="s" uri="/struts-tags" %> <s:form action="abc/UserAction!add" method="post"> <s:textfield name="user.name" label="用户名"></s:textfield> <s:radio name="user.sex" list="#{1:'男',0:'女'}" label="性别"></s:radio> <s:submit value="提交"></s:submit> </s:form> 驱动模型更加简洁但需要继承接口ModelDriven。 package com.wgh; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User> { private User user=new User(); public String add() throws Exception{ return "add"; } public String update() throws Exception{ return "update"; } @Override public User getModel() { // TODO Auto-generated method stub return this.user; } } 这样jsp页面就可以写成一下形势 <s:form action="abc/UserAction!add" method="post"> <s:textfield name="name" label="用户名"></s:textfield> <s:radio name="sex" list="#{1:'男',0:'女'}" label="性别"></s:radio> <s:submit value="提交"></s:submit> </s:form>