Struts2笔记
来源:互联网 发布:oracle数据库oblob操作 编辑:程序博客网 时间:2024/06/03 12:28
Struts2笔记
第一节:概述
1. 简介:
l Struts2是自webwork框架发展而来,与Struts1无关,只为借助Struts1的名气;
l Sturts2所用到的基本技术:动态代理 + 反射 + 过滤器;
l Struts2主要是针对jsp/servlet的技术,Hibernate是针对DAO的技术。
2. 注意点:
l 使用Struts2标签时,eclipse需要配插件,所以建议用MyEclipse开发;
l 前端表单提交的数据统一为小写字母,大写后端不识别,原因未知;
l 每个action类中不要忘记 get() 和 set() 方法,不然Struts2访问不到属性;
l 对action类而言:进入时总动获取表单值,离开时自动加入作用域;
l 用多少jar包,导多少jar包,全部导入可能存在问题;
l 注意配置web.xml文档时的权限管理。
3. 使用流程:
l 下载:在apache官网下载;
l 新建项目,导入相应的jar包,可参见example项目struts-blank.war;
l 配置web.xml文档。
l 在src下新建struts.xml配置文件,并配置相应参数,action为对应类,name值与请求一致,返回值为result。
l 可以新建action类,进行开发了。
第二节:Action详解
1. Action的使用方法(三种):普通类+ 实现Action接口 + 继承ActionSupport类
l 普通类:简单,但是不能用某些Struts的其他功能;
l 实现Action接口:直接使用其中的常量,如:SUCCESSFUL,NONE,INPUT等。
l 继承ActionSupport类:最常用。
2. 调用Action内部的方法(除了execute()方法之外):
l 访问时,主要访问的url是:Action名 + ” ! ” + 其他方法名;即可调用改Action内其他方法。
l 原理:类似与之前表单隐藏域,Struts2框架截去” ! ”前后的字符串,前为Action,后为该Action内的方法。
第三节:封装表单的方式: (Model-Driven和 Property-Driven)
1. 比较:Property-Driven适合7个一下的表单,简单;而Model-Driven适合于大量表单提交的时候。
注意:要使用” ! ”来进行动态方法调用,必须在struts.xml配置文件中设置一条contant标签:<constant name="struts.enable.DynamicMethodInvocation" value="true" />, 这样之后才可以用,不然不可以用。详见我的csdn博客。
2. Property-Driven:Action内定义属性,表单域名称和属性名相同,(类型不用管,Struts2会帮我们自动转),提交时如下提交:” Action名!method名” 即可完成。
3. Model-Driven:用一个javabean接收前端传来的参数,实现model效果。实现步骤:
<1>. 建一个javabean,比如User类,其中属性名和表单域名称一致;
<2>. 负责处理的Action实现ModelDriven<User>接口,填入javabean的泛型;
<3>. 实现ModelDriven接口中的getModel()方法,返回一个接收到的的javabean。即可。注意:不要忘了在Action中new 该javabean,例如 User user = new User();还要有getUser()和setUser()方法。
第四讲、配置文件详解(struts.xml):
1. <package>包:作用是划分代码,便于管理。此包不同于java类中的包,此包可以被继承,继承之后自动拥有父包的内容。所有包均继承自” struts-default ”包。
l namespace命名空间:是package的一个属性,作用是指定页面的url,”/”表示根目录。
l extends: 指定继承自哪个包,默认为” struts-default ”。
2. <action>:把前端访问页面和后端处理类对应起来,属性有name,class
3. <result>结果页面: 有一下属性
l name:对应action返回值,默认为”success”;
l type:dispatcherà转发;chainà跳到另一个action;freemarkerà显示页面为freemaker;redirectà重定向;streamà向浏览器发送InputStream对象,通常用来处理下载或返回Ajax;默认为dispatcher;
l path:路径,等同于<result>标签中间的路径
4. <global-results>: 全局的result,即整个包中的所有action都共享配在其中的所有result页面。
5. <contant>配置信息:详见另一篇文档或查看我的csdn。
6. 多配置文件:
多人开发项目时,需要协作,不能用同一个struts.xml文件。我们通过<include>来指定多个配置文件。通常按人或模块来划分,通常按模块来划分,在模块下面继续划分。
注意:SSH三大框架都可以实现Annotation机制,从而不需要配置xml文件(例如:struts2.xml),但是为了便于管理,建议:struts配xml文件,Hibernate和spring配置注解@。
第五讲:ActionContext对象:
1. 在Struts2框架里,非常非常重要的对象;
2. 封装了所有Struts2的对象,包括所servlet里的所有对象;
3. 实质:ActionContext对象里包含一个context属性,此属性包含一堆属性,其中一个是table属性,此为一个map,这个名为table的map里封装了很多东西,如request,response,session等等。request里面又包含一个名叫OgnlValueStack的ValueStack(ValueStack是类似于List的一种类型)。这个OgnlValueStack中又包含一个action这个action和ActionContext是同一个对象(引用互指)。所以:我们可以操作ognlValueStack中的action来实现操作ActionContext对象,即通过操作OgnlValueStack中的action来操作Struts框架的所有属性。结构图如下:
4. 原理简介:前端的作用域对象被Struts2框架转化成map,后台返回时将map转化成作用域对象。其中Action和ActionContext对象会被转化为request对象。
5. 获取web容器信息:
l 获取session: ac.getSession().put(“key” , “value”);
l 获取request: ac.get(“ request ”);
l 获取Application: ac.getApplication();
注意:getSession()等此类代码不要放在Action的构造函数里,因为此时ActionContext里的值也许还没设置,这是通过ActionContext取得的值有可能为null。
6. 获取真正的Web容器信息: (ServletActionContext)
HttpServletRequest req = ServletActionContext.getRequest();
ServletActionContext.getRequest().getSession();
ServletActionContext. getServletContext();
第六讲:OGNL语言:(对象图形导航语言)
1. OGNL与EL相似,但比EL强大。
2. List和Map的操作: 注意:map操作时,做到两点,不少引号不少#号。
List:<s:set var=”list” value=”{123 , ’year’ , ‘good’}” scope=”request”></s:set>
Map:<s:set var=”map” value=”#{‘No01’:‘boy’ , ‘No02’:#request.list.get(0)}”></s:set>
*复杂操作如下:
<s:set var=”list” value=”{‘abc’, 123, true}” scope=”session”></s:set>
<s:set var=”m” value=”#{‘first’ : #session.list}”scope=”request” ></s:set>
取出一个map里的list<s:property value=”#session.(#request.m.first).get(0)” />
结果为:字符串‘abc’
3. 集合元素中的查找------in 和 not in:
<s: property value=” ‘a’ in {‘a’, ‘b’, ‘c’} ” />
<s: property value=” ‘a’ in #request.list />
4. 过滤/投影: 即在集合中过滤,得到一个子集,这个叫过滤或投影。
? à 符合选择逻辑的所有元素
^ à 符合选择逻辑的第一个元素
$ à 符合选择逻辑的最后一个元素
#this à表示集合中的当前元素
<s:setvar="ss"value="#request.user.{?#this.pwd.equals('456')}"scope="request">
</s:set>
<s:iteratorvalue="#request.ss"var="temp">
<s:propertyvalue="#temp.uname"/>
</s:iterator>
5. 其他操作: (调对象的方法,调对象静态方法,获取方法返回值等)
l 调用普通方法 à 直接掉
l <1>调用静态方法à 在struts.xml配置文件中配置<constant name=”struts.ognl.allowStaticMethodAccess” value=”true”/>
<2> @class@method(args) //调用类的方法 e.g @java.lang.String@toString();
<3>@@表示调用java.util.Math包中的类,e.g:@@max(3, 5);
<4>返回值:只需要在调用方法的<s: set>里设置var即可得到。
注意:调用时一定要写类的完整报名。
第七讲:Struts标签
1. Struts标签现在不支持EL,只能用OGNL。
2. Struts标签共分四大类:数据标签 + 控制标签 + 表单标签 + 非表单标签。
3. 常用标签:
l Property输出变量的值:
(通过OGNL可以有很多种操作,略过)
l Set设置变量值:
<s:set var=”aa” value=”{‘a’, ‘c’, ‘b’, ‘4’, ‘c’}”scope=”request” ></s:set>
l action用于执行Action:
<s:action name=’’login’></s:action>
有以下常用属性:
name à 只要提交到后台处理的action;
namespace à 命名空间;注意:强烈建议加上
executeResult à true 或 false,是否将执行结果包含在本页面。
action标签还可以包含子标签:<s:param name=””>value</s:param>
l date输出日期:
<s:date name=”#request.d” format=”yyyy-MM-dd” nice=”true” />
其中nice属性为:将时间表示成XX ago,即XX年前,此时format不起作用。
l include包含其他页面:
作用和<jsp: include>一样。<s:include value=”1.jsp”></s:include>
l param用于传参:
用于传参。略过
l if/ifelse/else流程控制语句:
和JSTL一样,而且用法比JSTL更简单,因为更像java代码。示例代码如下:
<h1>--------------</h1>
<%
request.setAttribute("number1", 91);
request.setAttribute("number2", 30);
%>
<span>现在的成绩是:</span>
<s:iftest="#request.number1>=80">
优
</s:if>
<s:elseiftest="#request.number1>=60">
良
</s:elseif>
<s:else>
差
</s:else>
<h1>--------------</h1>
l iterator循环标签(迭代标签):主要用于对集合、数组进行迭代
<s:setvar="number"value="{11,22,33,44,55,66,77,88,99}"scope="request"></s:set>
<s:iteratorvar="temp"value="#request.number">
<s:propertyvalue="#temp"/>
</s:iterator>
第八讲:表单UI标签
原理:UI标签生成HTML标签
效果:样式都加好了,如:自动对其,自动加冒号,表格布局等
l form: form表单的UI标签。
示例代码:<s:form ></s:form>
l textfield:对应html中<input type=”text” />.
示例代码:<s:textfield label=”用户名” name=”uname” />
l textarea: 对应HTML中多行文本域.
示例代码:<s:textarea label=”自我简介” name=”inFo” rows=”5”cols=”50” value=”请输入说明文字” />
l file: 文件域。
示例代码:<s:file label=”上传头像” name=”logo”></s:file>
l checkbox: 复选框
示例代码:<s:checkbox required=”true” label=”阅读协议” name=”checkbox” value=”1” />
l checkboxlist: 复选框列表 (不常用,因为不够灵活)。示例代码略。
l radio: 单选按钮组
示例代码:<s:radio list=”#{ ‘1’:’男’, ’2’:’女’ }” label=”性别”name=”gender” value=”1” ></s:radio>
l select:下拉列表。 代码示例略。
l autocompleter: 自动完成框, 类似google suggest效果。
<1>. 需要引入dojo包:struts2-dojo-plugin-2.3.20.jar
<2>. 需要引入标签:<%@ taglib prefix=”sx”uri=”/struts-dojo-tags” %>
<3>. 在页面中使用:
<sx:autocompleter label=”专业” name=”major” href=”data.jsp” loadOnTextChange=”true” loadMinimumCount=”0” autoComplete=”false” showDownArraow=”true” />
<4>. 详细解释:
Ø href: 为数据源,通常数据为可以查询数据库所得,可以是servlet或jsp,只要返回json数组就可以
Ø loadOnTextChange: 当文本改变是加载,即类似键盘事件触发。
Ø loadMinimumCount: 最小的加载数,通常为0。
l datatimepicker:标签日期选择器。即一个日历弹出框
示例代码:
<sx:datatimepicker name=”timepicker” displayForm=”yyyy-MM-dd” label=”输入出生日期” ></sx:datatimepicker>
l 等等
第九讲:表单验证 (自动验证 + 手动验证 + 修改验证显示模板)
1. 自动验证: 也叫xml文件验证
<1>. 前端表单必须用struts2的表单标签来做,不能用html标签,注意:如果需要前端验证,则在form里加入属性validate=”true”.
<2>. 编写action处理类。
<3>. 建立一个xml校验文件,负责后台校验,放在处理类action类的同一包下,命名为负责处理的action-[method-]validation.xml 如下所示:
<!DOCTYPEvalidators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<fieldname="uname">
<field-validatortype="requiredstring">
<paramname="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
<field-validatortype="stringlength">
<paramname="trim">true</param>
<paramname="minLength">6</param>
<paramname="maxLength">10</param>
<message>用户名必须是6——10个字符之间</message>
</field-validator>
</field>
<fieldname="pwd">
<field-validatortype="requiredstring">
<paramname="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<fieldname="email">
<field-validatortype="requiredstring">
<paramname="trim">true</param>
<message>邮箱不能为空</message>
</field-validator>
<field-validatortype="email">
<paramname="trim">true</param>
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
<4>. 完成!
2. 手动验证: 即不需要xml文件,手动写后台验证规则,注意,是后台验证规则。
<1>. 新建前端jsp页面,用struts2的form标签。
<2>. 新建处理的action类。
<3>. 在action类中重写一个方法,方法名为validateXXX(),意为验证XXX方法,例如:需要验证reg(),则此验证方法为validateReg().
<4>. ValidateReg()方法中如果验证失败,则this.addFieldError(“uname”,“用户名错误”)
3. 修改模板: 验证信息太丑,我们可以通过修改模板改变样式
4. 注意点:
<1>. 前端验证有效,但验证成功后台不跳转。当出现如上错误时,可能是Model-Driven或Property-Driven不对,前端form表单必须与后台模型匹配,无论数量或名称。
<2>. form标签:
l 有一个属性叫theme,其可选的属性值有:xhtml,html,simple,ajax。默认值为xhtml.
l theme如果为simple时,意为全部手动设置,即有三点要注意,(1). 前端验证validate无效(validate=true),(2). 样式全无,(3). label全部无效。
l form的另一个属性为validate,但其为true时,表示进行前端验证。默认为false.
<3>. 标签里面要用ognl表达式时,不能直接使用,例如<s:textfield label=”#request.uname” />, 必须要用 %{ } 包起来,正确的用法是:<s:textfield label=”%{#session.uname } ” />
第十讲:国际化(i18n )
(略过)
第十一讲:拦截器
1. 拦截器概述:
<1>. Struts2核心,AOP的实现之一
<2>.拦截器和过滤器的区别:过滤器可过滤任何多系,而拦截器只过滤action请求;过滤器基于方法回调,拦截器基于动态代理和反射。
<3>. 使用:
l Struts-default包中声明了默认的 拦截器 和 拦截器栈。
l 继承默认包后,便可直接使用,<interceptor-refname="token"></interceptor-ref>
l 也可自定义拦截器
2. 自定义拦截器:
l struts.xml中<interceptor>定义拦截器,<interceprot-ref>使用拦截器。
l 定义拦截器类,实现Interceptor接口 或 继承AbstractInterceptor类.
l 重写public String interceptor(ActionInvocationai) throws Exception ;方法
l 取得Action对象,从而取得对Action的完全控制
//获取了Action对象,可以完全操作当前Action
MyAction myAction = (MyAction) ai.getAction();
l 执行action
ai.invoke();
l 如果要获取更高层次的ActionContext对象,也可以直接获取
ActionContext ac = ai.getInvocationContext();
l 注意:自定义拦截器时,默认拦截器将全部失效,需引入以下代码:
<interceptor-ref name=”default-stack” ></interceptor-ref>
3. 方法拦截:
l 继承MethodFilterInterceptor类(该类是AbstractInterceptor的子类)。
l 重写doInterceptor()方法。
l 和上面一样在struts.xml中配置拦截器,不同点是:在<interceptor>元素中加入参数子元素:
<interceptor name=”” class=””>
<param name=”includeMethods”>test1, test2</param>
<param name=”excludeMethods”>test3, test4</param>
</interceptor>
l 注意,要是还存在没配的方法如test5,或者test6在includeMethods和excludeMethods中都存在,这个方法将拦截处理。
4. 文件上传: (超级方便,但需要注意细节)
l 建立jsp表单
<formaction="upload"enctype="multipart/form-data"method="post">
File:<inputtype="file"name="file"/><br>
<inputtype="submit"name=submit/>
</form>
l 建立Action处理类
package com.test.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import com.opensymphony.xwork2.ActionSupport;
/**
* Struts2上传功能代码
* @authorAlvin Xing(邢嵩林)
*/
public class UpLoad extends ActionSupport{
// 域模型 Property-Driven
private Filefile; //文件对象
private StringfileFileName; //文件名
private StringfileContentType; //文件类型
private StringsavePath; //上传文件存储路径,在struts.xml中配置
//execute()方法
@Override
public String execute()throws Exception {
FileOutputStream fos = new FileOutputStream(getSavePath() + getFileFileName());
FileInputStream fis = new FileInputStream(this.getFile());
byte[] buf =new byte[1024];
int len = 0;
while( (len = fis.read(buf)) >0){
fos.write(buf, 0, len);
}
fos.close();
fis.close();
return this.SUCCESS;
}
//Getter() and Setter(),此处省略
}
l 配置struts.xml配置文件
<packagename="default"namespace="/"extends="struts-default">
<!-- UpLoad -->
<actionname="upload"class="com.test.test.UpLoad">
<paramname="savePath">E:/Upload/</param><!--配置文件中设置param值,为上传文件的存储路径,注意结尾处的/ -->
<result>/success.jsp</result>
<resultname="input">/upload.jsp</result>
</action>
</package>
l 注意点:
<1>.注意导入上传的jar包,comments-fileupload.jar和 comments-io.jar
<2>.action类中定义的域模型中,文件名和文件类型必须是XXXFileName和XXXContentType,XXX表示form表单中input file的name值。这个不能乱定义,不然action拿不到文件名和文件类型。
5. 拦截器栈:
l 先定义,后使用,定义在struts.xml中<interceptor>标签中定义,如下:
<interceptors>
<interceptor-stack name=”stack1” >
<interceptor-ref name=”timer” ></interceptor-ref>
<interceptor-ref name=”my2” ></interceptor-ref>
</interceptor-stack>
</interceptors>
l 使用时,在action中直接使用,如下:
<action name=”upload” class=”com.test.test” >
<interceptor-ref=”stack1” ></interceptor-ref>
<result name=”success” >/success.jsp</result>
<result name=”error” >/error.jsp</result>
</action>
注意点:
1. 默认拦截器对没有自定义拦截器的action有效;
2. 在package中,如果我配了自定义interceptor,则默认拦截器失效。
第十二讲:备注
Struts2中的contant标签常见用法
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE strutsPUBLIC
"-//Apache SoftwareFoundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 把它设置为开发模式,发布时要设置为false -->
<constant name="struts.devMode" value="true"/>
<!-- 设置在class被修改时是否热加载,发布时要设置为false -->
<constant name="struts.convention.classes.reload" value="true"/>
<!-- 自动动态方法的调用,使用这个设置后可以这样调用:action!method-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<!-- 指定jsp文件所在的目录地址-->
<constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
<!-- 使用struts-default默认的转换器,如果是rest的使用:rest-default,rest需要rest的jar插件 -->
<constant name="struts.convention.default.parent.package" value="struts-default"/>
<!-- 用于配置包名后缀。默认为action、actions、struts-->
<constant name="struts.convention.package.locators" value="actions"/>
<!-- 用于配置类名后缀,默认为Action,设置后,Struts2只会去找这种后缀名的类做映射 -->
<constant name="struts.convention.action.suffix" value="Action"/>
<!-- 设置即使没有@Action注释,依然创建Action映射。默认值是false。因为Convention-Plugin是约定优于配置的风格,
可以不通过注解根据预先的定义就能访问相应Action中的方法 -->
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<!-- 自定义jsp文件命名的分隔符-->
<constant name="struts.convention.action.name.separator" value="-"/>
<!-- 国际化资源文件名称 -->
<constant name="struts.custom.i18n.resources" value="i18n"/>
<!-- 是否自动加载国际化资源文件 -->
<constant name="struts.i18n.reload" value="true"/>
<!-- 浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false"/>
<!-- 上传文件大小限制设置 -->
<constant name="struts.multipart.maxSize" value="-1"/>
<!-- 主题,将值设置为simple,即不使用UI模板。这将不会生成额外的html标签-->
<constant name="struts.ui.theme" value="simple"/>
<!-- 编码格式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
</struts>
基础Constants
· struts.devMode 可选值true,false (默认false),在开发模式下,struts2的动态重新加载配置和资源文件的功能会默认生效。同时开发模式下也会提供更完善的日志支持。
· struts.i18n.reload 可选值true,false(默认值依赖于struts.devMode),是否自动重新加载本地的资源文件。
· struts.i18n.encoding 主要用于设置请求编码(默认值(UTF-8)) ,Head和Include标签的解析编码。 资源和配置文件的解析编码。
· struts.configuration.xml.reload 可选值true,false(默认值依赖于struts.devMode)是否自动重新加载XML配置文件
· struts.action.extension 设置struts的Action请求的后缀,支持多个时以逗号隔开。
· struts.action.excludePattern 设置struts所排除的url(通过正则表达式匹配)(支持多个,以逗号隔开)
· struts.tag.altSyntax 可选值true,false(默认true) 是否支持ognl表达式
· struts.url.http.port 设置生成URL所对应的http端口
· struts.url.https.port 设置生成URL所对应的https端口
· struts.url.includeParams 可选值 none, get, all (默认get),设置URL是否包含参数,以及是否只包含GET方式的参数。
· struts.locale 设置struts2默认的locale,决定使用哪个资源文件。
· struts.ui.templateDir 该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件
· struts.ui.theme 该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。
· struts.ui.templateSuffix 该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板
· struts.multipart.saveDir 设置上传临时文件的默认目录
· struts.multipart.maxSize 设置上传的临时文件的最大限制
· struts.objectFactory.spring.autoWire 可选值(name, type, auto, constructor,name)(默认name),设置spring的自动装配方式,只有引入spring插件后才有效。
· struts.objectFactory.spring.autoWire.alwaysRespect (默认false)设置是否总是以自动装配策略创建对象。
· struts.objectFactory.spring.useClassCache (默认false)对象工厂是否使用类缓存,开发模式无效。
· struts.xslt.nocache (默认为false)设置XsltResult是否不是用缓存。
· struts.custom.properties 设置用户的自定义属性文件名列表(用,隔开)
· struts.custom.i18n.resources 设置用户自定义的资源文件路径列表(用,隔开)
· struts.serve.static (默认false) 设置是否支持静态资源请求(要求url在struts或static下)
· struts.serve.static.browserCache (默认false) 是否在静态资源响应中设置缓存。只有在支持静态资源时有效。
· struts.el.throwExceptionOnFailure (默认false)是否在解析el表达式或无法找到属性时抛出RuntimeException
· struts.ognl.logMissingProperties (默认false)是否日志无发找到的属性
· struts.ognl.enableExpressionCache 是否缓存ognl解析的表达式。
· struts.enable.DynamicMethodInvocation (默认false)是否支持动态的方法调用,在URL上通过!method指定方法。
· struts.enable.SlashesInActionNames 在URL中的Action段中是否支持斜线
· struts.mapper.alwaysSelectFullNamespace (默认false) 是否总是用最后一个斜线前的URL段作为namespace
核心对象Constants
· struts.actionProxyFactory 设置ActionProxy的实体工厂,该工厂同时也生成默认的ActionInvoctation
· struts.xworkConverter 设置XWorkConverter对象,该对象用于获取各种类型的转换器。
· struts.unknownHandlerManager 设置UnknownHandlerManager的实现类,用于处理无法找到方法等异常。
· struts.multipart.handler 设置mutipartRequest的handler (默认是jakarta)对应类,org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest
· struts.mapper.class 可选值(struts,composite,restful,restful2)设置URL解析且映射到ACTION的实现,(默认struts).
· struts.mapper.prefixMapping 通过URL前缀映射到对应的Mapper,格式为urlPrefix1:mapperName2,urlPrefix2:mapperName2。必须添加mapperClass为org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper,并指定struts.mapper.class为该mapper。
· struts.mapper.composite 设置是否支持复合(多个)actionMapper,mapperName用逗号隔开。必须配置struts.mapper.class 为composite 才会生效
· struts.mapper.idParameterName 用于Restful2ActionMapper作为URL中id所对应的parameterName
· struts.ognl.allowStaticMethodAccess (默认false)设置ognl表达式是否支持静态方法。
· struts.configuration 设置struts2的Settings类。(2.1.2后不再使用)
· struts.urlRenderer 设置struts2的URL render(用于生成的URL),(默认struts),类名org.apache.struts2.components.ServletUrlRenderer
· struts.objectFactory 设置struts2的对象工厂,默认(struts),类名org.apache.struts2.impl.StrutsObjectFactory,当引入struts2-spring插件之后,则被修改为org.apache.struts2.spring.StrutsSpringObjectFactory
· struts.xworkTextProvider 设置struts2的资源文件内容提供类的实现。默认为com.opensymphony.xwork2.TextProviderSupport
· struts.actionValidatorManager 设置ActionValidatorManager 的实现类。
· struts.valueStackFactory 设置struts2的ValueStack工厂的实现。
· struts.reflectionProvider 设置ReflectionProvider的实现类
· struts.reflectionContextFactory 设置ReflectionContextFactory的实现类
· struts.patternMatcher 设置PatternMatcher的实现类
· struts.staticContentLoader 设置StaticContentLoader的实现类
- struts2 笔记
- struts2笔记:
- Struts2 笔记
- struts2笔记
- struts2笔记
- Struts2笔记
- struts2笔记
- Struts2 笔记
- struts2笔记
- struts2笔记
- struts2笔记
- struts2笔记
- Struts2 笔记
- struts2 笔记
- Struts2笔记
- struts2笔记
- struts2 笔记
- struts2笔记
- OpenWRT UCI API的使用——C语言
- ubuntu14.04 root 登陆
- ksoap2调用webservice
- iOS获取当前时间 NSDate(NSCalendar)获取当前时间
- macbook 终端颜色配置
- Struts2笔记
- Android自定义View的一些不知道的细节
- labview 栈和队列
- Android Editable
- android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI
- 开发者必备工具-加密算法SDK
- 关于JavaScript的那些话
- java面向接口编程
- NandFlash简介