Struts 2 之配置文件
Struts 1使用ActionServlet作为分发器,而Struts 2使用Filter作为分发器。如果有多个Filter,要把Struts 2的分发器Filter放在最后
web.xml<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>Struts 2的默认后缀为".action",配置<url-pattern>时最好配置为"/*"而不要只配置成"/*.action",因为Struts 2集成了一些Javascript、CSS资源,而这些资源都不以"/*.action"为后缀
struts.properties配置了Struts 2的一些默认参数,每个可配置的参数都有一个默认值,该文件不是必须的,如果无需修改任何参数值,可以不用添加该文件
Struts 2的默认属性位于struts2-core.jar包org/apache/sturts2下面的default.properties里,用户可以在项目的/WEB-INF/classes下添加struts.properties覆盖默认的配置
常用属性如下#上传文件的工作目录与文件的最大尺寸 struts2.multipart.saveDir = struts2.multipart.maxSize = #Struts 2的默认后缀 struts.action.extension = #是否为开发模式 struts.devMode = false or ture #默认的主题、模板、模板文件后缀 struts.ui.theme = xhtml struts.ui.templateDir = struts.ui.templateSuffix = ftl #Struts 2的默认配置文件 struts.configuration.files = struts-default.xml,struts-plugin.xml,struts.xmlstruts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 --> <constant name="struts.action.extension" value="do" /> <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> <constant name="struts.serve.static.browserCache" value="false" /> <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> <constant name="struts.devMode" value="true" /> <!-- 默认的视图主题 --> <constant name="struts.ui.theme" value="simple" /> <!--<constant name="struts.objectFactory" value="spring" />--> <!--解决乱码--> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) --> <constant name="struts.multipart.maxSize" value="10701096"/> <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir --> <constant name="struts.multipart.saveDir " value="d:/tmp" /> <!--将其他配置文件包含进来,其他配置文件必须是完整的--> <include file="struts-user.xml"></include> <include file="struts-login.xml"></include> <!--配置Bean--> <bean class="" name=""></bean> <!-- 自定义的package一般继承自struts-default,struts-default定义了默认的拦截器,比如从request中获取数据并设置到Action上的工作都是Struts 2拦截器完成的,如果配置了namespace ,那么在访问时需要加上namespace --> <package name="struts2" namespace="/mystruts" extends="struts-default"> <!--配置拦截器--> <interceptors> <interceptor name="loginInterceptor" class="com.clf.LoginInterceptor"></<interceptors>> </interceptors> <!--配置全局result--> <global-results> <result name="login">/login.jsp</result> </global-results> <!--配置全局异常--> <global-exception-mappings> < exception-mappings result="/exception.jsp" exception="java.lang.Exception"> </ exception-mappings > </global- exception-mappings > <!--配置action--> <action name="sum" class="action.FirstAction"> <result name="positive">/positive.jsp</result> <result name="negative">/negative.jsp</result> </action> </package> </struts>自定义Action一般直接继承自ActionSupport类,并覆盖execute()方法,Struts 2没有Struts 1中的ActionForm之类的容器,此类容器由Action兼任,变量的值会被Struts 2通过setter方法自动赋值
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String account; private String account; public String execute(){ //主方法 if(……) return LOGIN; } return SUCCESS; } //setter、getter方法略 }ActionSupport实现了Action接口,而Action接口中定义了几个常用的result名称,编程中尽量使用这些预置的result名称
public interface Action{ public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public abstract String execute() throws Exception; }Struts 2的Action不一定非要实现Action接口,任何POJO都可以用作Action,只要这个Action具有public String execute()方法,Struts 2会通过反射调用execute()方法,如
public class LoginAction { private String account; private String account; public String execute(){ if(……) return LOGIN; } return SUCCESS; } //setter、getter方法略 }不实现Action的好处是不与Struts 2发生耦合,代码不依赖Struts 2的类库
execute()是Action的默认方法,Struts 2还可以执行其他方法,只要这些方法没有参数,并返回String类型,throws声明可有可无,如public class LoginAction extends ActionSupport{ private String account; private String account; //setter、getter方法略 public String execute(){ //主方法 if(……) return LOGIN; } return SUCCESS; } public String login() throws Exception{ //自定义方法 return LOGIN; } public String logout() throws Exception{ //自定义方法 return "logout"; } }可以通过/login!login.action访问login()方法,同理,通过/login!logout.action访问logout()方法
此外,也可以把方法配置到Action当中<action name="login" class="com.clf.LoginAction" method="login"> <result name="login">/login.jsp</result> <result name="logout">/logout.jsp</result> </action> <action name="logout" class="com.clf.LoginAction" method="logout"> <result name="login">/login.jsp</result> <result name="logout">/logout.jsp</result> </action>缺点是需要配置多次
Struts 1在使用POJO时,必须显示的new一个对象,而Struts 2不需要,如果没有对象,会在运行时通过反射实例化一个对象
Struts 2 之配置文件的更多相关文章
- struts几个配置文件加载顺序_2015.01.04
struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...
- Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖
Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖
- 2018.12.15 struts.xml 一般配置文件写法 && 配置动态方法
struts.xml 原始配置文件 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE s ...
- Struts 1 之配置文件
web.xml中配置Struts的入口Servlet--ActionServlet,ActionServlet不负责任何的业务处理,它只是查找Action名单,找到path属性与URL属性一致的Act ...
- struts 1.x配置文件说明
<struts-config> <global-exceptions /> <!--全局映射定义--> <global-forwards> <fo ...
- 【JavaEE企业应用实战学习记录】struts配置文件详细解析
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...
- Struts配置文件以Spring的方式实现自定义加载
在使用struts时,我们需要在web.xml中配置过滤器,同时我们需要配置struts的配置文件路径来加载项目中struts的相关配置信息.如果我们不配置路径的话,Struts会有一些默认的加载路径 ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- Struts相关
使用Struts2流程: 1.导入Struts2类包 2.在Web源代码文件夹中,创建名为struts.xml的配置文件.在其中定义Action对象,其关键代码如下: struts.xml: < ...
随机推荐
- Redis常用命令--Keys
Redis是一个key-value型的数据库. 所以在Redis也提供了很多操作key的命令,大概有22个. EXISTS key [key ...]:查询一个key是否存在,时间复杂度为O(1),存 ...
- 矩阵树Matrix-Tree定理与行列式
简单入门一下矩阵树Matrix-Tree定理.(本篇目不涉及矩阵树相关证明) 一些定义与定理 对于一个无向图 G ,它的生成树个数等于其基尔霍夫Kirchhoff矩阵任何一个N-1阶主子式的行列式的绝 ...
- ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)
●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...
- Codeforces Round #430 A. Kirill And The Game
Kirill plays a new computer game. He came to the potion store where he can buy any potion. Each poti ...
- Mybatis迷你版--QueryObjectFactory
今天在看JDBC4.2新规范,然后无意之间就碰到了这个东西QueryObjectFactory, 市面上orm框架有很多,在这里我就不一一列举了.那么今天我来记录一下QueryObjectFactor ...
- Java8的重要新特性
一.Lambda表达式 java8中Lambda表达式的书写方式: (参数) -> 表达式 (参数) -> 单行语句 (参数) -> { 语句 } 1.Lambda遍历List和Ma ...
- Linux学习之CentOS(十)----Linux 的账号与群组
Linux 的账号与群组 管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的, 并且所有一般用户的账号申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个服务 ...
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()
http://www.jb51.net/article/29893.htm http://www.jb51.net/article/87642.htm
- 离线合成联想到的--canvas合成水印
前段时间做了功能模块:用户设置自定义勋章: 实现方式:前端把用户设置的昵称传到后台,后台根据不同用户等级,使用离线合成技术合成不同的勋章返回到前端: 方案算是实现了,但是有点坑就是,后台的离线合成没有 ...
- JavaScript数据结构和算法----栈
前言 栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.可以想象桌上的一叠书,或者厨房里的 ...