1、struts.xml:常见标签
<!-- 开发模式 不需要重新启动 -->
<constantname="struts.devMode" value="true" />
<!-- 解决中文问题-->
<constantname="struts.i18n.encoding" value="GBK" />
<!-- namespace不写,默认为 namespace="",表示在当前工程中任意路径只要存在index就访问该action -->
<package name="front"namespace="/front" extends="struts-default">
<!-- 默认class="com.opensymphony.xwork2.ActionSupport"-->
<actionname="namespace">
<!-- 默认:type="dispatcher" 服务器跳转到结果页面-->
<resultname="success">/Namespace.jsp</result>
</action>
<action name="index"class="com.donglin.struts2.front.action.IndexAction2">
<resultname="success">/ActionIntroduction.jsp</result>
</action>
</package>
<!-- 通配符配置:-->
<package name="actions"extends="struts-default" namespace="/actions">
<action name="Student*"class="com.donglin.struts2.front.action.StudentAction"method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<action name="*_*"class="com.donglin.struts2.front.action.{1}Action"method="{2}">
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
</package>
2、提交方式:
<formname="f" action="" method="post">
用户名:<input type="text" name="name"/>
密码:<input type="text" name="password"/> <br/>
<inputtype="button" value="submit1"οnclick="javascript:document.f.action='login/login1';document.f.submit();"/>
<inputtype="button" value="submit2"οnclick="javascript:document.f.action='login/login2';document.f.submit();"/>
3、常用取得request,session,application 的方式:
importjava.util.Map;
importorg.apache.struts2.interceptor.ApplicationAware;
importorg.apache.struts2.interceptor.RequestAware;
importorg.apache.struts2.interceptor.SessionAware;
importcom.opensymphony.xwork2.ActionSupport;
publicclass LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
privateMap<String, Object> request;
privateMap<String, Object> session;
privateMap<String, Object> application;
//DIdependency injection
//IoCinverse of control
publicString execute() {
request.put("r1","r1");
session.put("s1", "s1");
application.put("a1","a1");
returnSUCCESS;
}
@Override
publicvoid setRequest(Map<String, Object> request) {
this.request= request;
}
@Override
publicvoid setSession(Map<String, Object> session) {
this.session= session;
}
@Override
publicvoid setApplication(Map<String, Object> application) {
this.application= application;
}
}
4、Result
1)常用四种类型:
a)dispatcher(默认相当于forward,客户端发起一次请求在服务器端来回跳转,不需要传递参数即可获取;用的是同一个value stack)
b)redirect(相当于重新发起一次请求,如果想要获取上一次参数,需要重新传递)
c)chain(了解)
d)redirectAction(了解)
2)全集结果集
a)global-results(同一个包中共享结果页面) | extends(如果需要另一个包中的全局页面需要用extends继承,与java继承类似)
<global-results>
<resultname="mainpage">/main.jsp</result>
</global-results>
<packagename="admin" namespace="/admin"extends="user">
3)动态结果(了解)
a)在action保存一个属性(r),存储具体的结果location
@Override
publicString execute() throws Exception {
if(type== 1) r="/user_success.jsp";
elseif (type == 2) r="/user_error.jsp";
return"success";
}
4)传递参数
a)客户端跳转需要传递
b)${}表达式(不是EL),从value stack 取值
5、OGNL
- Object Graph Navigation Language(对象图导航语言)
- 后台获取参数,user.xxx只有传,才会构造;想初始化domain model,可以自己new,也可以传递参数(必须有空(参数为空)的构造方法)。
- 什么时候在stack中有两个action? Chain
6、定义自己的:theme
- css(覆盖struts2原来的css)
- 覆盖单个文件
- 定义自己的theme
- 实战: <constant name="struts.ui.theme" value="simple" />
- 把所有主题定义为theme
- filederror特殊处理
- 自己控制其他标签的展现
6、声明式异常
- 在Action中进行异常映射
- 在package中进行全局异常映射
- 使用继承公用异常映射
- Struts2中异常处理由拦截器实现(观察struts-default.xml),实际上struts2大部分功能由拦截器实现。
7、权限安全框架
- Spring security
8、ValidationClientAjax
9、Struts2-Architecture