解密Struts2核心文件
Posted 高校原创网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解密Struts2核心文件相关的知识,希望对你有一定的参考价值。
前言
Hello ,艾薇博迪,( ̄O ̄)ノ,晚上好,今天我们来聊聊Struts2框架的配置文件。
Struts配置文件web.xml
web.xml
的主要作用
配置过滤器,让struts截获Web程序的HTTP请求
配置
会话时间、欢迎页、错误页、监听器、控制器等
web.xml
关键元素分析
welcome-file-list和welcome-file元素,按顺序查找指定欢迎页面,若这个标签不存在,Tomcat默认查找index.html和index.jsp页面
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>filter和filter-mapping元素用来声明一个过滤器
<filter>
<!--指定过滤器的名字,不能为空-->
<filter-name>sturts2<filter-name>
<!--指定filter的实现类(过滤器类),版本2.5.14-->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter<filter-class>
</filter>
<!--定义filter所拦截的URL地址-->
<filter-mapping>
<filter-name>sturts2<filter-name>
<url-parttern>/*</url-parttern>
</filter-mapping>error-page元素,指定错误处理页面
<error-page>
<!--指定错误代码-->
<error-code>404</error-code>
<!--发生错误跳转到指定页面-->
<location>/error.jsp</location>
</error-page>
<!--用户捕获java异常-->
<error-page>
<!--指定java异常类-->
<exception-type>java.lang.Exception<exception-type>
<location>/error.jsp</location>
</error-page>listerner元素,用来注册监听器类
<!--监听器-->
<listerner>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listerner>session-config元素,用来指定会话过期时间
<!--会话时间配置-->
<session-config>
<session-timeout>30(分钟)</session-timeout>
</session-config>init-param元素,用来定义参数
<!--配置常量-->
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
Struts配置文件之default.properties
default.properties
的主要作用
是一个key-value文件,可用来管理Struts2框架中定义的大量常量,必须放在类加载路径下才能使用
default.properties
的关键元素分析
struts.i18n.encoding=UTF-8 指定了web应用中默认编码集
struts.devMode = false 是否使用开发模式,默认为false,当指定为true时,可以在应用程序出错时显示更详细的出错提示,建议使用开发模式
Struts配置文件之struts.xml
struts.xml
的主要作用
主要用来配置Action和HTTP请求的对应关系
配置逻辑视图和物理视图资源的对应关系
配置常量、导入其他配置文件等
struts.xml
关键元素分析
package元素,用来配置包
元素属性 | 说明 |
---|---|
name | 这是一个必须的属性,指定包的唯一名字,以便在其他包中被引用 |
extends | 可选,指定该包继承自其他包 |
namespace | 可选,指定命名空间,标识此包下的Action访问路径 |
abstract | 可选,指定该包为抽象包,不能有Action的定义 |
<package name="A" extends="struts-default">
</package>
<package name="B" extends="struts-default" namespace="/">
</package>
<package name="C" extends="struts-default" namespace="/info">
</package>
由于在一个Web应用中可能出现同名的Action并存的情况,为了避免命名冲突,只要使同名的Action位于不同的namespace下就可以了
元素属性 | 说明 |
---|---|
name | 这是一个必须的属性,标识Action,指定了该Action所处理的请求的URL |
class | 可选,指定Action对象对应的实现类 |
method | 可选,指定请求Action时调用的方法 |
converter | 可选,指定类型转换器的类 |
result元素,设置返回给浏览器的视图
元素属性 | 说明 |
---|---|
name | 可选,对应从Action方法返回的值,success为其默认值 |
type | 可选,指定结果类型,默认的类型的dispatcher(redirect/chain/freemarker/httpheader/redirect-action) |
include元素
<struts>
<include file="a.xml">
<include file="b.xml">
<include file="c.xml">
</struts>
global-results元素
<global-results>
<result></result>
</global-results>
default-action-ref元素,如果Struts2找不到对应的Action时,就会使用默认的Action来处理用户的请求
<!--name属性指向一个Action-->
<default-action-ref name="defaultaction" />
Action的动态调用(DMI)
通过请求Action对象中的一个具体的方法来实现动态的操作,并非一定要通过excute()方法来处理,使用DMI方式更加方便灵活。在显示的项目开发中可以将同模块的一些请求封装在同一Action中,使用DMI方式来处理不同的请求<a href="user">hello</a>
<a href="user!update.action">update</a>通配符
为解决Action定义冗余,使用通配符的配置方式可以通过一定的命名约束来配置Action对象通配符 说明 * 匹配0个或多个字符除了"/" ** 匹配0个或多个字符包含"/" \characher 转义字符,"\"匹配"\","*"匹配"*" 常量配置
除了能在default.properties配置常量,struts.xml\web.xml文件中也能配置常量<struts>
<constant name="struts.i18n.encoding" value="UTF-8">
</struts>Struts2框架加载常量的顺序:
1.struts-default.xml
2.struts-plugin.xml
3.struts.xml
4.default.properties
5.web.xml
struts之Action类文件
如果说,struts.xml、default.properties、web.xml文件搭建起了struts项目的结构,那么Action类文件就实现了具体的业务逻辑处理
Action接口和ActionSupport基类
ActionSupport类实现了Action接口,他是一个默认的Action实现类,提供了很多默认的方法,包括数据校验方法、获取国际信息方法等,实际应用中,定义的Action类都会继承ActionSupport类而不是实现接口,大大简化了程序员的编码过程
Action与Servlet API
在struts2框架中访问Servlet API有如下几种方法
通过ActionContext类访问Servlet API
方法 说明 void put(String key,Object value) 模拟Servlet API中的HTTPServletRequest的setAttribute()方法 Object get(Object key) 通过参数key来查找当前ActionContext中的值 Map getApplication() 返回一个Application级的Map对象 Static ActionContext getContext() 获得当前线程的ActionContext对象 Map getParameters() 返回一个包含所有HttPServletRequest参数信息的Map对象 Map getSession() 返回一个Map类型的HttpSession对象 void put(Object key,Object value) 向当前ActionContext对象中存入键值对信息 void setApplication(Map session) 设置一个Map类型的Session值 下面通过ActionContext类中的方法调用,分别在request、application、session中放入了("name","tom")对
ActionContext context=ActionContext.getContext();
context.put("name","tom")
context.getApplication().put("name","tom");
context.getSession().put("name","tom");通过特定接口访问ServletAPI
虽然ActionContext类可以访问Servlet API,但是无法直接访问到其实例。为了在Action中直接访问Servlet API,可以通过下面的几个接口来实现
接口 说明 ServletRequestAware 实现该接口后,可以直接访问HttpServletRequest实例 ServletResponseAware 实现该接口后,可以直接访问HttpServletResponse实例 ServletContextAware 实现该接口后,可以直接访问HttpServletContext实例 通过ServletActionContext类访问
getResponse()
getRequest()
getServletContext()
以上是关于解密Struts2核心文件的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段