struts_配置文件初识_1
对三层架构中表现层进行优化
struts1和struts2的区别是添加了过滤器
struts2执行过程:
前提条件:服务器:启动服务器》加载web.xml(过滤器中配置了加载struts)》加载struts.xml
执行:服务器请求》过滤对应的请求》查找是否有这个动作名称》示例化动作名称》调用动作方法》由执行结果为依据返回对应的结果视图
配置文件加载顺序(6个),web.xml首先加载
配置属性加载顺序,见下面的2.2
struts.devMode的意思:开发者模式
package四个属性的含义
带名称空间的动作的查找方法
action属性意思
result
1.搭建struts环境
2.使用struts配置文件
2.1配置文件属性介绍
-
package:指定struts包,把配置文件以包的形式进行管理(使用面向对象的思想)
-
name:指定包的名称(在配置文件中唯一)
-
extends:指定当前包的父包
-
abstract:包声明为抽象包,只用于继承,只有没有action元素的包,才能被定义为抽象包
-
namespace:名称空间
指定名称空间后访问路径为:空间名+动作名
不指定名称空间,则为默认名称空间(默认值为:"",不是"\"根目录)
名称空间查找顺序
1.查找名称空间,路径为多级则逐级向上找
例如:\a\b\c,则先找\a\b\c,然后a\b,最后\a
2.查找动作名称
指定名称空间下找,找到则执行要执行的方法,未找到则在_默认_名称空间中找,且只查找动作名称
-
-
action:用于定义动作名称,动作类,动作方法的映射,也定义了出现不同情况需要前往的结果视图
属性
- name:动作名称
- class:指定动作类
- method:指定要执行的动作方法
2.2配置文件加载顺序
-
加载时机:服务器启动
-
以下文件从上到下加载,存在属性重名,则后一个覆盖前一个
1.default.properties
2.struts-default.xml
3.struts-plugin.xml
4.struts.xml(web应用默认的struts配置文件)
5.struts.properties(struts默认配置文件)
6.web.xml(web应用默认配置文件)
2.3配置文件的作用
-
自定义结果类型
- 自定义结果的类型
- 自定义结果配置
-
自定义拦截识别后缀
-
自定义动作类
-
不同命名空间的转发,重定向
-
同命名空间的转发,重定向
3.有关视图
3.1属性
-
result
-
name:不写默认success
-
type:前往结果视图的方法,默认dispatcher
<!-- resulst元素:配置逻辑结果视图 name属性:结果视图名称。与动作方法的返回值对应,当一致前往指定的jsp type属性:结果视图类型。不写的时候,有默认值,默认值是dispatcher 转发。 常用取值: dispatcher:请求转发 默认值 redirect:重定向 chain:转发到另一个动作 转发到同包(同名称空间)下的另一个动作 <result name="success"type="chain">action2</result> 转发到不同包(不同名称空间)下的另一个动作 <result name="success" type="chain">使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值 调用的就是setNamespace("/n2") setActionName("action3") <param name="namespace">/n2</param> <param name="actionName">action3</param> </result> redirectAction:重定向到另一个动作 重定向到同包(同名称空间)下的另一个动作 <result name="success" type="redirectAction">action2</result> 重定向不同包(不同名称空间)下的另一个动作 <result name="success" type="redirectAction"> 使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值调用的就是setNamespace("/n2")和setActionName("action3") <param name="namespace">/n2</param> <param name="actionName">action3</param> </result>
-
3.2创建
-
自定义结果视图方法
1.创建类,继承StrutsResultSupport,重写doExcute方法
2.struts.xml中配置
3.3有效范围
- 全局结果视图
- 在包中定义结果视图,则在当前包和其子包中有效
- 在ACTION内部的配置视图,只能在当前动作类中使用
3.4结果视图查找顺序
- 结果视图的查找顺序
- 现在动作类中找—>全局结果视图中找
4.获取servletAPI
- 使用servletActionContext对象(推荐)
- 使用依赖注入,注入我们想要的类 (拦截器实现)
5.配置文件
5.1配置尝试
-
文件名:struts.xml
-
文件约束:
来源:struts-core的struts-default
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
-
文件内容
- 导入其它文件(struts.xml)
<include file="子文件文件路径"></include>
- 配置公共UI(struts.xml)
分析过程
<package name="common" namespace="/" extends="struts-default"> <!--公共jsp--> <!--版本1,使用action实现--> <action name="UIAction"> <result></result> </action> <!--版本2,使用ActionSupport,可省略class,class默认值ActionSupport--> <action name="uiAction" class="com.opensymphony.xwork2.ActionSupport"> <result>top.jsp</result> </action> <!--版本三,直接使用,通配符--> <action name="uiAction_*_*"> <!--<result>/WEB-INF/pages/{1}.jsp</result>--> <!-- 两个“_*”,第一个指代文件夹名称,第二个指代文件jsp名称 --> <result>/WEB-INF/{1}/{2}.jsp</result> </action> </package>
最终结果
两个“_*”, 第一个指代文件夹名称, 第二个指代文件jsp名称 前端界面调用时,访问地址写 其中:frame指代页面文件所在文件夹 top指代文件名 写法1: src="${pageContext.request.contextPath}/uiAction_frame_top.action" 写法2: src="${pageContext.request.contextPath}/uiAction_<kbd>frame</kbd>_<kbd>top</kbd>"
<package> <action name="uiAction_*_*"> <result>/WEB-INF/{1}/{2}.jsp</result> </action> </package>
-
struts前端控制器(web.xml)
<!--struts前端控制器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
6.分文件编写配置文件
- 新建配置文件
- 在struts.xml中引入