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),但是为了便于管理,建议:strutsxml文件,Hibernatespring配置注解@

 

 

第五讲: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. 常用标签:

Property输出变量的值:

(通过OGNL可以有很多种操作,略过)

Set设置变量值:

<s:set  var=”aa” value=”{‘a’, ‘c’, ‘b’, ‘4’, ‘c’}”scope=”request” ></s:set>

action用于执行Action:

<s:action  name=’’login’></s:action>

有以下常用属性:

name à 只要提交到后台处理的action;

           namespace à 命名空间;注意:强烈建议加上

           executeResult à true 或 false,是否将执行结果包含在本页面。

action标签还可以包含子标签:<s:param name=””>value</s:param>

date输出日期:

<s:date  name=”#request.d”  format=”yyyy-MM-dd”  nice=”true” />

其中nice属性为:将时间表示成XX ago,即XX年前,此时format不起作用。

include包含其他页面:

作用和<jsp: include>一样。<s:include value=”1.jsp”></s:include>

param用于传参:

用于传参。略过

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>

 

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标签

效果:样式都加好了,如:自动对其,自动加冒号,表格布局等

form:  form表单的UI标签。

示例代码:<s:form   ></s:form>

textfield:对应html中<input type=”text” />.

示例代码:<s:textfield  label=”用户名”  name=”uname” />

textarea: 对应HTML中多行文本域.

示例代码:<s:textarea  label=”自我简介” name=”inFo” rows=”5”cols=”50” value=”请输入说明文字” />

file: 文件域。

示例代码:<s:file  label=”上传头像”  name=”logo”></s:file>

checkbox: 复选框

示例代码:<s:checkbox  required=”true” label=”阅读协议” name=”checkbox”  value=”1” />

checkboxlist: 复选框列表 (不常用,因为不够灵活)。示例代码略。

radio: 单选按钮组

示例代码:<s:radio  list=”#{ ‘1’:’男’, ’2’:’女’ }”  label=”性别”name=”gender” value=”1” ></s:radio>

select:下拉列表。 代码示例略。

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();

注意:自定义拦截器时,默认拦截器将全部失效,需引入以下代码:

<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>

注意,要是还存在没配的方法如test5,或者test6includeMethodsexcludeMethods中都存在,这个方法将拦截处理。

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>

 

注意点:

<1>.注意导入上传的jar包,comments-fileupload.jar comments-io.jar

<2>.action类中定义的域模型中,文件名和文件类型必须是XXXFileNameXXXContentTypeXXX表示form表单中input filename值。这个不能乱定义,不然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的实现类

 

 

 

 

0 0
原创粉丝点击