这里只做个简单的总结吧!
Web.xml配置
<!-- 配置Struts 2框架的核心Filter -->
<!-- FilterDispatcher将会加载应用的Struts 2框架-->
<filter>
<!-- 配置Struts 2核心Filter的名字 -->
<filter-name>struts</filter-name>
<!-- 配置Struts 2核心Filter的实现类 -->
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<!-- 配置Struts 2框架默认加载的Action包结构,以英文逗号(,)隔开 -->
<param-name>actionPackages</param-name>
<param-value>
org.apache.struts2.showcase.person
</param-value>
</init-param>
<!-- 配置Struts 2框架的配置提供者类以英文逗号(,)隔开-->
<init-param>
<param-name>configProviders</param-name>
<param-value>lee.MyConfigurationProvider</param-value>
</init-param>
还可以配置struts2常量
</filter>
Strust.xml配置
Struts运行顺序
1. struts-default.xml
2. struts-plugin.xml
3. struts.xml
4. struts.properties
5. web.xml
<struts>
//页面可以访问静态方法
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
//动态更新页面
<constant name="struts.devMode" value="false" />
//引用外部struts.xml的配置
<include file="example.xml"/>
<!-- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开 -->
<constant name="struts.action.extension" value="do,action"></constant>
<!-- 指定默认编码集,使用于HttpServletRequest的setCharacterEncoding方法,和freemarker ,velocity 的输出 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 设置浏览器是否缓存静态内容,默认值为true(部署阶段开启(true)), 开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!--
当struts.xml 的配置文件修改后,系统是否自动重新加载该文件,
默认为false(部署阶段开启(false)), 开发阶段最好打开.
-->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 在开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 与spring 集成时,指定由spring容器负责action 的创建 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 该属性设置struts2是否支持动态方法调用,该值默认为:true,如果要关闭动态方法调用,则可以设置为:false -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!-- 设置上传文件的大小限制 -->
<constant name="struts.multipart.maxSize" value="10701096" />
<!-- Add packages here -->
<!-- <package>用来分类 namespace必须以/开头
<package name="default" namespace="/" extends="struts-default">
//默认访问的页面
<default-action-ref name="index" /> //name指向action的name
<action name="*-*" class="com.huaxin.bbs2010.action.{1}Action" method="{2}">
<result>/admin/{1}-{2}.jsp</result>
<result name="input">/admin/{1}-{2}.jsp</result>
</action>
</package>
</struts>
Action
1. struts2中的路径是根据Action 类的路径,而不是jsp路径来确定的
2. 实现一个Action的最常用方式:从ActionSupport继承
3. DMI动态方法调用 在URL地址上 xxx !yyyy // 调用xxxAction里的 yyyy方法
4. 通配符配置 * {1} {2} …
a) *_*
5. 接收参数的方法(一般用属性或者DomainModel来接收)
a) 在URL中用 ?user.id = 1 @user.name=”张三” //xxxAction 必须引用User user 可以不实例化
b) 直接传XXXAction 的属性 id , name
6. 简单参数验证addFieldError
a) addFieldError(“key”, value);
b) <s: fielderror fieldName=”key” thema=”simple” />
7. 访问Web元素
a) Context Stack 装的是Map类型
b) 实现RequestAware,SessionAware,ApplicationAware,ParameterAware的接口,通过Map来对request,session,application,request string 和 表单数据的访问
c) ServletRequestAware 对应HttpServletRequest
d) ServletResponseAware对应HttpServletResponse
e) ServletContextAware 对应SevletContext
f) Map类型
i. IoC
LoginAction2 implements RequestAware
private Map<String, Object> request;
@Override
public void setRequest(Map<String, Object> request) {
this.request= request;
ii. }
g) 原始类型
public class LoginAction4extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String execute() {
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}
}
JSP 获取 valuestack<%@ pageimport="com.opensymphony.xwork2.util.*"%>
<%
ValueStack vs =(ValueStack)request.getAttribute("struts.valueStack");
List someThing=(List)vs.findValue("someThing");
%>
Result
1. 常用四种类型:
a) dispatcher(默认) //服务器跳转,在服务器内部转换
b) redirect //重定向跳转,之前的所有请求属性,请求参数都丢失。(即拿不到request容器的东西 )
c) chain //服务器直接访问Action 类
d) redirectAction //重定向Action类
e) stream //图片,文件
2. 全局结果集
a) <global-result> <result name=”mainPage” />exception.jsp</result> </global-result>
3. 传递参数
a) 一次request只有一个valueStack
b) 客户端跳转才需要传递
c) <result type="redirect">/user_success.jsp?t=${type}</result> 从value.stack取值
对于 struts2的action而言,如果该action包含了输入验证功能,只有进入该action时fielderror不为空,几时该fielderror不是该action本身引起的,它也会转入改action的input result