三、Struts2的配置文件
1、加载时机:
当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。
2、加载顺序
顺序 | 配置文件名 | 所在位置 | 说明 |
1 | default.properties | struts2-core-2.3.15.3.jar\org\apache\struts2 | 不能修改 |
2 | struts-default.xml | struts2-core-2.3.15.3.jar | 不能修改 |
3 | strtuts-plugin.xml | 在struts2提供的插件jar包中 | 不能修改 |
4 | struts.xml | 我们的应用中 | 我们修改的:推荐 |
5 | struts.properties | 我们的应用中 | 我们修改的 |
6 | web.xml | 我们的应用中 | 我们修改的,可以给过滤器配置参数 |
注意:
1、Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。
2、当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了。
四、Struts2框架提供的常量
1、常用的常量
常量定义在了default.properties配置文件中,体现形式都是key=value。所有的struts2应用都会用到这些常量。
常用的:
常量名 | 常量值 | 说明 |
struts.i18n.encoding | UTF-8 | 应用中使用的编码 |
struts.objectFactory.spring.autoWire | name | 和spring框架整合有关 |
struts.multipart.parser | jakarta | 指定文件上传用的组件 |
struts.multipart.maxSize | 2097152 | 文件上传总文件大小限制:2M |
struts.action.extension | action,, | 能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔 |
struts.devMode | false | 是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true。 |
struts.ui.theme | xhtml | 页面展示用的主题 |
2、在struts.xml中覆盖常量
使用<constant name="" value=""></constant>元素进行覆盖
例如:
1 5 67 8
3、创建struts.properties文件覆盖
在应用的构建路径中创建一个struts.properties的文件。
struts.action.extension=abc
可以覆盖默认访问动作方法后缀
4、在web.xml中配置过滤器参数
12 12struts2 34 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 5 6 78 11struts.action.extension 9html 1013 struts2 14/* 15
五、xml配置文件的主要元素
1、package元素
1.1、作用:
在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
1.2、属性:
name:包的名称。必须写。且必须唯一。
extends:一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。
struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。
abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。
namespace:名称空间。
名称空间 + 动作名称 = 访问路径
12 3 4 7 9/success.jsp 8
1.3、packege中的namespace
namespace的默认值:
a.不写该属性
b.写了该属性,取值是一个"".
注意:默认值不是/
动作类的搜索顺序:
先找名称空间,再找动作名称。
1 1718 19 21/success.jsp 20
2、action元素
2.1、作用:
配置动作用的。
2.2、属性:
name:动作名称
class:动作类全名。默认的动作类是:com.opensymphony.xwork2.ActionSupport
是在struts-default.xml中定义的
method:动作类中的方法名称。默认是public String execute(){}
要求:
1.public的
2.返回值必须是String
3.没有参数
2.3、动作类
a.方式一:动作类就是一个POJO,非常简单的javabean。
b.方式二:动作类实现com.opensymphony.xwork2.Action接口。
常量:给动作方法返回值用的。用常量可以使你的应用规范和统一。
常量变量名 | 对应的值 | 说明 |
SUCCESS | success | 动作方法执行一切OK |
ERROR | error | 动作方法执行时遇到了异常 |
INPUT | input | 回显 |
LOGIN | login | 一般转向登陆页面 |
NONE | none | 不转向任何的视图 |
c.方式三:动作类继承com.opensymphony.xwork2.ActionSupport 推荐使用
2.4、动作的访问
a.使用通配符:
/success.jsp /success.jsp /success.jsp /success.jsp /success.jsp /{1}{2}.jsp /success.jsp
六、结果类型视图(逻辑结果视图)
前奏:该部分内容指的就是struts配置文件中的result元素的使用
1、result元素
作用:
为动作指定结果视图
属性:
name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。
type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。
2、result元素中type的取值
type属性的取值在struts-default.xml中定义着。
常用结果类型介绍:
dispatcher:(默认值)使用请求转发,转向一个页面。
redirect:使用重定向,转向一个页面。
redirectAction:注意:使用的是重定向。
a.重定向到另一个相同名称空间的动作。
b.重定向到不同名称空间的动作
3、result元素中param子元素
在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param。
param元素的作用:依赖注入(Dependence Injection)思想
我们通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。而param元素就是将配置的参数,注入到该类中。
调用的是对应类的setter方法进行注入的。
例如:redirectAction结果视图
该类中肯定会有对actionName和namespace属性的注入方法(setter方法)。
4、全局视图和局部视图
4.1、局部视图
只能当前动作使用
4.2、全局视图
所有动作都可以使用
注意:优先级问题,先局部后全局。
七、在动作类中访问Servlet的API
使用ServletActionContext类
1 public class HelloAction extends ActionSupport{ 2 3 4 public String sayHello(){ 5 HttpServletRequest request = ServletActionContext.getRequest(); 6 HttpServletResponse response = ServletActionContext.getResponse(); 7 HttpSession session = request.getSession(); 8 ServletContext application = ServletActionContext.getServletContext(); 9 System.out.println(request);10 System.out.println(response);11 System.out.println(session);12 System.out.println(application);13 return "success";14 }15 }
八、分文件编写框架配置文件
1、不分文件开发可能产生的问题
就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里。
当3个人都checkout了struts.xml文件时,第一个人提交了,后面的人在没有更新就提交时,第一个人写的可能就白写了。
2、分文件编写Struts2的配置文件
12 3 4 5 6 7 11 12 138 10/success.jsp 914 15
12 3 4 65
12 3 4 65