对于ssh的学习而已,对我来说,配置文件们真的是很难理解的一部分内容,貌似理解,实则说不出来什么。为了更好的学习相关内容,因此写下本篇博文,本篇博文的内容是struts.xml的相关知识。
一.struts核心文件
文件 | 主要作用 | 关键元素 |
---|---|---|
web.xml | 1.初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等 2.在服务器启动时将配置的文件加载到内存 3.它不是一个Web的必要文件,没有它,网站也可以正常工作的 | 1.欢迎页面:welcome-file-list ; welcome-file 2.过滤器:filter ; filter-mapping 3.错误处理:error-page 4.监听器:listener 5.会话过期时间:session-config 6.定义参数:init-param |
struts.xml | 1.核心配置文件,主要负责管理应用中的Action映射,以及该Action包含的result定义等。 2.主要内容:(1)全局属性 (2)用户请求和相应Action之间的对应关系,可能用到的参数和返回结果 (3)导入其他配置文件 (4)拦截器配置 | 1.配置包:package 2.全局结果:global-results 3.拦截器:interceptors 4.include 5.action 6.result |
struts.properties | 1.struts2框架的全局属性文件,自动加载,可用来管理struts的大量常量 2.包含很多key-value对,该文件可以使用constant完全配置在struts.xml中 | 1.默认编码集:struts.il8n.encoding 2.是否使用开发模式:struts.devMode 3.指定配置管理器:struts.configuration 4…. |
二.struts.xml
1.基本配置
<!-- 设置编码格式为utf-8,解决乱码问题 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 根元素 -->
<struts>
<!-- 配置包,包名为default,该包继承了struts2框架的默认包struts-default,命名空间为“/” -->
<package name="default" extends="struts-default" namespace="/">
<!--配置名为的x的Action,实现类为yAction,视图为z.jsp-->
<action name="x" class="yAction">
<result name="index">/z.jsp</result>
</action>
</package>
</struts>
注:
1.struts是根标签,其他所有的标签都放在它的中间。
2.package元素定义了一个包,在struts2框架中,用包来组织Action和拦截器,每个包由零到多个拦截器及Action组成。
3.action元素定义了一个Action和其对应的类。
4.result元素定义了Action返回结果对应的视图。
2.关键元素详解
(1)package
实例:
<!--配置包,包名为default,该包继承了struts2框架的默认包struts-default,命名空间为“/” -->
<package name="shop" extends="struts-default" namespace="/">
<!--配置首页访问的Action-->
<action name="index" class="indexAction">
<result name="index">/WEB-INF/jsp/index.jsp</result>
</action>
</package>
package元素属性:
属性 | 说明 |
---|---|
name | 必选属性,标识包的名字,方便在其他包中被引用 |
extends | 可选属性,指定该包继承其他包 |
namespace | 可选属性,指定命名空间,标识此包下的action的访问路径 |
abstract | 可选属性,指定该包为抽象包 |
package元素用来配置包,name属性用来唯一标识包,还可以通过指定extends属性让一个包继承另一个包,继承包可以从被继承包那里继承到拦截器、action等。
namespace可以指定包对应的命名空间,当指定后,该包所包含的action处理的url是:命名空间+action。以如上代码举例:url是http://localhost:8080/indexaction。
(2)global-results
实例:
<struts>
<package name="shop" extends="struts-default" namespace="/">
<global-results>
<result name="msg">/WEB-INF/jsp/msg.jsp</result>
</global-results>
</package>
</struts>
该元素配置包中的全局结果,当一个action处理用户请求后返回时,会首先在该action本身的局部结果中进行搜索,如果局部结果中没有对应的结果,则会查找全局结果。
(3)interceptors
实例:
<struts>
<package name="shop" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="privilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/>
</interceptors>
</package>
</struts>
拦截器可以在用户请求Struts的Action时的前或后,进行一些业务处理。例如,在进行网上购物时,将商品加入购物车的前提是,用户必须登陆成功。
(4)include
实例:
<struts>
<include file="a.xml"/>
</struts>
该元素用来在一个struts.xml配置文件中包含其他的配置文件。这样做的目的是解耦合,将action以模块的方式来加以管理,即将存在相关性的action放在同一个xml文件中,然后通过在struts.xml文件中配置标签include进行实现(模块化的xml文件也必须是标准的struts2配置文件)。
(5)action
实例:
<action name="user_*" class="userAction" method="{1}">
<result name="registPage">/WEB-INF/jsp/regist.jsp</result>
</action>
action元素属性:
属性 | 说明 |
---|---|
name | 必选属性,标识action,指定该action所处理的请求的url |
class | 可选属性,指定action对象对应的实现类 |
method | 可选属性,指定请求action时调用的方法 |
converter | 可选属性,指定类型转换器的类 |
在配置action元素时,如果没有指定class属性值,则其默认值为类com.opensymphony.xwork2.ActionSupport,该默认类会使用默认的处理方法execute()来处理请求;如果指定method属性值,则该action可以调用method属性中指定的方法,而不是默认的execute()。
实例代码中method={1}中的{1}代表user_*中的,即如果加入你访问路径是/user_regist .action,则此刻访问的是该Action中的regist方法。
(6)result
实例:
<action name="order_*" class="orderAction" method="{1}">
<result name="saveSuccess">/WEB-INF/jsp/order.jsp</result>
<result name="updateStateSuccess" type="redirectAction">order_findByUid.action?page=1</result>
</action>
struts2支持的结果类型:
结果类型 | 说明 |
---|---|
dispatcher | 将请求转发到指定的jsp页面 |
redirect | 将请求重定向到指定的视图 |
redirectaction | 直接跳转到其他action |
chain | 处理action链 |
freemarker | 指定使用Freemarker模板作为视图 |
httpheader | 控制特殊的http行为 |
stream | 向浏览器返回一个inputstream(一般用于文件下载) |
velocity | 指定使用velocity模板作为视图 |
xslt | 用于xml/xslt整合 |
plainText | 显示某个页面的原始代码 |
当调用action方法处理结束返回后,下一步就是使用result元素来设置返回给浏览器的视图。配置result元素是常需指定name和type两个属性。name属性对应从action方法返回的值,success为其默认值。type属性指定结果类型,默认的类型是dispatcher。
(7)constant
constant用于设置一些struts2的常量,这些常量用于控制struts2的某些特性。通过对它的属性的配置,可以改变Struts 2 框架的一些默认行为,struts.properties不是必须的文件,它的内容可以在struts.xml中完成同样的功能配置。
常用设置:
<struts>
<!-- 所有匹配*.action的请求都由struts2处理 -->
<constant name="struts.action.extension" value="action" />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="false" />
<package name="shop" extends="struts-default">
</package>
</struts>
小结
一分耕耘一分收获~~~