Struts.xml配置文件的讲解

时间:2021-03-19 20:33:25

这里再次强调:

  • 过滤器在我们的服务器启动的时候就会被加载创建。包括struts过滤器。
  • 在strtus2过滤器被创建加载的时候init就会加载很多配置文件,有我们自己配置的(struts.xml配置文件),和struts本身自带的一些配置文件。

配置文件的介绍:

package标签:

  • 相当于代码包,用于区别不同的action。要配置action,必须首先写package标签,在package里面才能配置action

name属性:

  • 可以随便写,和功能无关,但是package之间的name属性不能够相同。

extends属性:

  • 表示继承的关系,属性值是固定的,struts-default
  • 写了这个属性之后,在package里面配置的类才具有action功能

namespace属性:

  • 这是命名空间,namespace属性值和action标签里面的属性值构成访问路径
  • “”值和”/”值作用是一样的

action标签:

  • action标签配置action访问路径

name属性:

  • namespace属性值和action标签里面的属性值构成访问路径
  • package标签里面可以写多个action标签,但是action的name属性值不能相同
如果有多个package,也就是说namespace有多个,分别为"/user/bbb""/user/bbb/xxxx"。访问路径为"/user/bbb/xxxx/aaaa/sdfggew/aaa.action"。当前访问路径就会找到匹配前缀最长的,也就是会匹配到这个namespace"/user/bbb/xxxx"。并且会在这个namespace里面找aaa.action。它会忽略中间没有匹配到的路径。

class属性:

  • 这里是类的全路径,底层用的反射

method属性:

  • 里面表示class类的xx方法
  • 值就写方法名
  • 默认执行execute方法

result标签:

  • 根据action方法的返回值,配置到不同的路径里面,不仅是页面也可以是不同的action。值:/hello.jsp ,/表示当前项目

name属性:

  • 和方法的返回值一样

type属性:

  • 配置如何到路径中去(转发或者重定向)
  • 默认值为转发操作,转发后地址栏不会变

修改struts2默认常量值

  • 在struts.xml中进行配置
<constant name="struts.i18n.encoding" value="UTF-8"/>//一般通过这种方法进行配置

还有两种方式:

  • 在src下面创建struts.properties,进行修改
  • web.xml中进行配置

设置以上值只后起到的作用就是:

  • 表单提交数据到action里面,在action可以获取表单提交数据。
  • 表单提交数据有中文,有乱码问题。

以前我们在servlet中解决乱码的方式是:

  • Post提交数据直接设置编码
  • get提交做编码转换

如果在action获取表单通过post方式提交中文,中文乱码问题这样就能够解决,不需要自己处理问题。

分模块开发:

  • 用xml中的include实现多人开发互不影响。
  • <include file="">
  • file路径是src下的路径

Action的编写方式:

action共有三种编写方式

  • 第一种 创建普通类,这个不继承任何类,不实现任何接口。
  • 第二种 创建类,实现接口Action(导入xwork里面的包)
  • 第三种 创建类,继承类 ActionSupport

第二种:实现接口Action:

  • 里面有很多常量,可以直接作返回值。
  • 这种方式一般很少去用。

第三种:继承类 ActionSupport(ActionSupport已经实现了Action接口)

  • 这种方法比较常用

访问action的方法:

有三种方式实现:

  • 第一种,使用action标签的method属性,在这个属性里面写执行的action方法。
  • 第二种,使用通配符方式实现,这个是最常使用的方法 。在struts2.5时,用以前的通配符访问方式已经不行了。要在package标签里面加上这样一个属性。strict-method-invocation="false"
  • 动态访问实现(不用)

第一种方法:使用method进行配置

  • method的值就直接写方法名称
  • 缺陷:action每个方法都需要配置,如果action里面有多个方法,就会配置很多的action。

第二种方法:使用通配符的方式实现(常用)

  • 在action标签里面有个name属性,name属性值里面,我们要写一个符号,叫*号,这个*号怎么理解呢??
  • *代表所有的意思,它能够匹配所有的字符串。注意,是所有。
  • *也可以和其它字符串组合,形成其它的模式匹配。
  • 当用*作匹配的时候,如果匹配成功,在method中,可以用{1}、{2}、{3}来把匹配成功的字符串取出来,和正则表达式差不多。
  • 也就是说我们可以这么写struts2配置
<package name="FireLang" namespace="" extends="struts-default" strict-method-invocation="false">
<action name="book_*" class="cn.domarvel.Book" method="{1}">

</action>
</package>

理解:

  • 这样来写时,当访问的值为book_add时,method获取到的值就是add,也就是能够调用Book类的add方法
  • 当访问的值为book_update时,method获取到的值就是update,也就是能够调用Book类的update方法
  • 这里的{1}的意思就是获取匹配到的第几个*号的值。

  • 注意:在struts2.5时,必须加上这句话strict-method-invocation="false"才能够访问成功!看上面!

注意事项:

  • 在action里面的方法返回值,返回值可以是有也可以是没有,如果有返回值时,类型必须是String类型。

有返回值时:

  • action有返回值时,如果在result标签中没有匹配到的时候,就会报result没有定义的错误。

没有返回值时:

  • action没有返回值时,在result标签中不需要配置。没有返回值时,用户访问后,用户将看到空白页面的效果。result标签中不写name默认为success

如何才能没有返回值:

  • 把方法写成void
  • 让返回值为”none”,也可以直接调用常量。

第三种方法:

Struts.xml配置文件的讲解

Struts.xml配置文件的讲解

结果页面配置:

全局结果页面

  • result标签配置action方法的返回值到不同的路径里面
  • 创建两个action,执行默认的方法execute方法,让两个action的方法都返回success,返回success之后,配置到同一个

全局页面配置:

  • 如果多个action,方法里面返回值相同,到页面也是相同的。这个时候可以使用全局结果页面配置。

问题出现

<package name="FireLang" extends="struts-default" namespace="">
<action name="book" class="cn.domarvel.Book" >
<result name="success">/list.jsp</result>
</action>

<action name="order" class="cn.domarvel.Order">
<result name="success">/list.jsp</result>
</action>
</package>

通过全局配置解决配置过多的问题

<package name="FireLang" extends="struts-default" namespace="">
<global-results>
<result name="success">/list.jsp</result>
</global-results>
<action name="book" class="cn.domarvel.Book"></action>
</package>

局部结果页面

<package name="FireLang" namespace="" extends="struts-default">
<action name="book" class="cn.domarvel.Book">
<result name="success">/list.jsp</result>
</action>
</package>

如果既配置了局部页面,也配置了全局页面,最终以局部配置为准。

result标签type属性

  • result标签里面除了name属性之外,还有一个属性type属性。

type属性值

  • 如何到路径里面(转发还是重定向),配置type不仅可以配置到jsp页面,还可以配置到不同的action
  • 默认是转发,转发的值是 dispatcher ,转发浏览器地址栏不会变化。
    /list.jsp
  • 作重定向操作,值是 redirect ,重定向浏览器地址栏会变化。
    /list.jsp

配置type属性跳转到其它action

  • 上面两个值dispatcher 、redirect ,这两个值一般针对到页面中配置。
  • 配置到其它action里面
  • chain:转发到其它action,但是我们一般不会用,因为有缓存问题
<result name="success" type="chain">orders</result>
  • redirectAction :重定向到action
<result name="success" type="redirectAction">orders</result>