Struts2(二)——配置文件struts2.xml的编写
接上一篇博客,这篇博客讲述一下2——9小标题的内容,这些问题都可以在struts2配置文件中设置(当然有的也可以在Struts.properties属性文件,web.xml中进行设置),而且常规开发中也基本都是在struts2配置文件中设置呢,也提倡大家在这里写,方便统一管理,所以可以说是如何编写struts2.xml的编写。
一,框架的扩展名问题:
1,struts2框架的默认扩展名:.action和空字符串。
在框架的属性文件default.properties中进行默认配置:struts.action.extension=action,,
2,如何覆盖框架的默认扩展名:
a,在struts.xml文件中增加常量标签(推荐使用)
<!--声明常量 -->
<!--覆盖框架默认扩展名 -->
<constantname="struts.action.extension"value="action,,do"></constant>
b,在自定义属性文件中struts.properties中设置(只要在默认的default.properties中设置,都可以通过这种方式覆盖)
struts.action.extension=action,,do
c,在web.xml文件中进行设置:
<!--配置框架的核心调度器,设置了初始化参数 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>action,,do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:如果以上三种情况同时存在,那么过滤器设置起作用。如果过滤器参数设置不存在,那么属性文件(struts.properties)设置起作用。这和我们源码初始化这些文件的先后顺序有关。而我们推荐是在struts.xml文件中进行设计的。所以下边类似的,我只是演示在struts.xml文件中的设计方式。
二,框架的字符编码问题:
1,框架默认的字符编码是:UTF-8,也是在default.properties中设置的:struts.i18n.encoding=UTF-8
2,覆盖框架的默认字符编码:
在struts.xml文件中进行常量配置,当然在struts.properties文件中和过滤器设置初始化参数也可以,这里不再演示。
<!-- 覆盖框架的默认字符编码 -->
<constantname="struts.i18n.encoding"value="GB18030"></constant>
三,框架的开发模式:
在开发中xml文件我们会经常修改,但是我们又不想每次修改就进行服务器的重启部署等,所以我们可以在开发过程中将框架的默认设置为开发模式,有利于我们开发的效率的提高。当然注意在我们完成以后上线的时候还需要改回默认的。防止不必要的麻烦发生。
1,对于struts.xml文件的修改不需要进行服务器重启,可以在其内进行这样设置,覆盖默认的:
<!--设置框架重新加载配置文件的标识 -->
<constantname="struts.configuration.xml.reload"value="true"></constant>
2,当然我们想的还有属性文件等,这需要我们设置为开发模式(更常用):
增加常量标签,进行开发模式设置,这里设置以后就会将上边的设置进行覆盖,所以设置这一个就够了:
<!--设置开发模式 -->
<constantname="struts.devMode" value="true"></constant>
四,框架命名空间的问题:
1,简述:命名空间namespace其实是<package>标签的一个属性,用来对action请求的路径进行管理。所谓的包<package>表示对Action配置的管理。包名是应该具有唯一性的标识,不能存在相同的两个包名。命名空间正常来讲不应该存在相同的名称,如果两个命名空间名称相同,而且存在相同的action名称,那么后面配置的action会起作用。
2,访问action对象时,请求路径的格式为:命名空间 + "/" + Action的name属性值。
但是用户也可以在发送时,添加额外的路径:例如:命名空间 + "/"额外路径 + "/"+ Action的name属性值,这样框架任然可以访问到的,这和框架的解析路径方法有关,算是个缺陷吧,但是框架也进行相关补充,可以弥补。
3,如何限制用户的非法路径:
<!--限制请求的命名空间必须符合规则 -->
<constantname="struts.mapper.alwaysSelectFullNamespace"value="true"></constant>
五,框架的action问题:
1,根据解析请求路径,获取action的名称,到配置文件中查找到action的完整类名,反射创建。
Action类设置要求:必须提供public的无参数的构造方法。Action对象是每次请求都创建一个新的实例,所以action是多例的,它解决的线程安全问题。(但是性能不高)这些都是基于框架的源码的设置。
六,框架中方法的编写:
1,默认方法: 框架调用Action的方法,默认方法名称为execute
默认方法execute的命名规则:
必须是public
必须返回类型是String
必须名称叫做execute
必须是无参数的
2,如果希望不使用默认的execute方法名称,那么也可以自定义方法名称,但是自定义方法名称的声明规则必需与execute方法声明规则一致。请求自定义方法的方法:
a,通过感叹号的方式指定被调用的方法名称。这种调用方法的方式叫做动态方法调用,例如:uri = /user/login!login.action. 对于动态方法调用可以动态的调用到Action中的任意方法,但是并不是一定有效,而且开发方式属于紧耦合开发。所以这种方式不推荐使用。
b,如何禁止动态方法调用,禁止以后如何指定呢?
<!--禁止感叹号的动态方法调用 -->
<constantname="struts.enable.DynamicMethodInvocation"value="false"></constant>
<!--设置method方法即可-->
<action name="login" class="com.bjpowernode.struts2.action.LoginAction" method="login">
<resultname="success">/success.jsp</result>
<resultname="login">/login.jsp</result>
</action>
c,如果一个类有好多方法,我们如何才能简化配置呢?通过通配符的方式进行简化配置:{1}表示匹配第一个*,只要我们传过来的是方法的名字即可。但是通配符的使用要慎重,不要弄出漏洞,防止不法分子的巧弄URI进行破解。
<action name="*" class="com.bjpowernode.struts2.action.LoginAction" method="{1}">
<resultname="success">/success.jsp</result>
<resultname="login">/login.jsp</result>
</action>
当然了,还有很多在struts.xml配置的属性,这里我仅仅是列出了一些常用的,经常需要我们配置的。我们只要抓住这个原理,知道原来框架在那配置的,指定的key是什么,如何解析的,就非常简单了。当然了很多一部分是在default.properties属性文件中进行的配置,我们需要重点掌握。
其实框架都是人设计的,我们只要按照正常人的思维去思考问题,基本上和框架实现的是差不多的。例如,你设计框架肯定会有默认的编码设置,当然你不会写死,会给开发人员覆盖的机会。当然很多配置,我们都在固定的文件中,利用固定的方法进行修改,这是非常符合常规的。所以了解了框架的原理,还是非常简单的。总结中
Struts2(二)——配置文件struts2.xml的编写的更多相关文章
- struts2默认配置文件 struts-default.xml
注:用的struts2的版本是2.1.6 strtus2的默认配置文件 struts-default.xml ,其中的默认的拦截器,包括其中的拦截器栈. 因为struts2的配置文件struts.xm ...
- struts2之配置文件struts.xml详解
struts配置文件 struts.xml配置参数详解 struts.xml中很大一部分配置默认配置就好了 但是有些还是需要做了解 以便于理解 和修改 <?xml version=" ...
- 【学习笔记】Struts2之配置文件struts.xml
在默认情况下,Struts2只自动加载类加载路径下的struts.xml.default-struts.xml和struts-plugin.xml三类文件.但是随着应用规模的增大,系统中Action数 ...
- Struts2的配置文件——web.xml
任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载. 通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于S ...
- Struts2更改配置文件struts.xml默认路径
struts2配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下. 但是为了协作开发与方便管理,我们有时需要把struts.xml放到其他位置 s ...
- Heritrix源码分析(二) 配置文件order.xml介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/613412 本博客已迁移到本人独立博客: http://www.yun5u. ...
- struts2配置文件struts.xml的简介
本文在于总结,深入研究有别人写的很好了,也没必要再去写,将在本文后面附上他们的文章地址: 一.struts2的执行过程: 二.struts2的配置文件struts.xml 下面是其三大部分includ ...
- ssh整合思想初步 struts2与Spring的整合 struts2-spring-plugin-2.3.4.1.jar下载地址 自动加载Spring中的XML配置文件 Struts2下载地址
首先需要JAR包 Spring整合Structs2的JAR包 struts2-spring-plugin-2.3.4.1.jar 下载地址 链接: https://pan.baidu.com/s/1o ...
- Struts2学习笔记——Struts2与Spring整合
Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...
随机推荐
- qt简单界面更新代码(菜鸟级)(部分代码)
qt简单界面更新代码(菜鸟级)(部分代码)self.timers_1=QtCore.QTimer(self)self.timers_1.timeout.connect(self.min_1)self. ...
- 反转int型数字
如 321 反转 123 120 反转21 注意处理最后的零,以及负数情况 ,最后就是溢出情况了 /** * @param {number} x * @return {number} */ var r ...
- Swift之贪婪的UIButton
一.内容概要 按钮是所有UI体系中非常重要的组件,在iOS中按钮UIButton的使用也非常灵活,本文将从以下几点介绍UIButton的使用(基于Swift2.0): 1.UIButton基础 2.U ...
- nodejs之简介及安装(一)
@[nodejs|个人学习笔记] nodejs简介 什么是node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 参考网站 一.nodejs.cn 二 ...
- [转]CSS vertical-align属性详解 作者:黄映焜
CSS vertical-align属性详解 posted @ 2014-08-26 17:44 黄映焜 前言:关于vertical-align属性. 实践出真知. 垂直居中. 第二种用法. ...
- execlp函数使用
原文:http://blog.sina.com.cn/s/blog_6a1837e901011167.html execlp(从PATH 环境变量中查找文件并执行) 相关函数: fork,ex ...
- Android 使用开源xUtils来实现多线程下载(非原创)
1.程序员自己也是可以实现多线程下载的,只是代码量比较大,而且,其中有许多细节需要考虑到,在GitHub上有人写好的代码,我们可以拿过来使用下,节省了我们开发程序的时间 2.导包:xUtils-2.6 ...
- 【转】Visual Studio 2010在数据库生成随机测数据
测试在项目中是很重要的一个环节,在Visual Studio 2010中,在测试方面已经有很好的支持了,比如有单元测试,负载测试等等.在数据测试的方面,Visual Studio 2010,还支持对数 ...
- iOS_ @property参数分析
@propert的相关参数 因为现在Xcode都是默认使用ARC所以现在分析主要是以ARC为主. 1.@property有哪些参数? 第一组: 内存管理特性 retain assign copy ...
- WP8.1 页面导航 缓存问题
最近开始学习wp8.1开发,在页面的导航学习时发现了一点问题,即当使用Frame.Navigate()方法进行页面的跳转时,每次都会重新实例化一个页面.而在新的页面采用Frame.GoBack()或者 ...