【java框架】Struts2(2) -- Struts2配置

1.   Struts2配置项细节

1.1.导入外部xml文件

在struts.xml文件中使用<include>标签,file属性上引入外部的.xml文件。

example.xml配置中又分隔了另外一个action,package一般不同。具体如下:

这样做的目的是为了拆分struts.xml中过多的action及杂乱的package包。

1.2.package包的配置

<?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>
    <!--package:包,包的作用是进行模块化管理;
        name:代表包名(必需写,且唯一),在整个配置中(包含其它的xml)名字是唯一的;
        namespace:代表包层级的路径,
        外部访问路径:http://ip地址<:端口>/<上下文路径>/namespace/action的名称
        extends(继承):它继承自一个父包,这个父包的名字叫做struts-default
        abstract:代表当前包是抽象的包(就是用来让别人继承的,在struts-default.xml中就有这种包-->
  <package name="default" namespace="/extra" extends="struts-default">
        <action name="index" class="cn.yif.action.UserAction" method="execute">
            <result name="success" type="dispatcher">
               /success.jsp
            </result>
        </action>
  </package>
</struts>

具体访问请求如下:

注意:

①    同一个包下面的action名称是不能重复的,不同包下的action可以重复;

②    包的名称不能够重复;

③    包的命名空间不能够重复。

1.3.package包的查找过程

对应到struts.xml配置中,访问路径主要是在packageNameSpace和actionName上,如下以:http://localhost/system/abc/hello的访问为例,这里会把url分为两部分,

packageNameSpace:/system/abc,actionName:/hello。

这里首先会通过packageNameSpace在配置文件中查找对应的<package>标签,如果没有找到那么就让路径退一级,即/system进行查找,如果找到,那么就在该包中查找对应的<action>,不管有没有找到对应的<action>都不会再次进行查找。

最后找到”/”,这里也是一个包,表示根包,会在根包中继续进行查找。

注意:以上流程,如果所有的包中都没有找到对应<action>,那么都会在默认的包中<package namespace="">查找;

查询过程分析,举例说明如下:

现在我在浏览器上的路径是:/path1/path2/path3/hello

我们需要把这个看做两个部分:

Package路径部分: /path1/path2/path3

Action部分:hello                                                            

查询的时候先找路径:

 /path1/path2/path3 没找到会找 /path1/path2

 /path1/path2 没找到会找 /path1

 /path1 没找到会找到根包 /

注意:路径部分找不到时才会到上层路径中找,如果找到了就不会再向上查找了;找到路径后找Action;Action找到直接使用,找不到会尝试找默认default包中的默认Action(在default.xml文件中)

namespace="/":代表一个根包;

namespace="":代表一个默认包;

1.4.Struts2配置文件优先级

Struts2框架按照如下顺序加载struts2配置
default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面
我们配置中很多常量都在这里面
struts-default.xml 该文件保存在 struts2-core-2.3.7.jar
 我们学习的阶段,可以来这里查看很多配置的方式
struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar 这里面是一些插件
上面三个配置文件,是Struts2默认的配置文件,我们不能够对修改它
struts.xml 该文件是web应用默认的struts配置文件
struts.properties 该文件是Struts的默认配置文件(一般不写在这里面)
web.xml 该文件是Web应用的配置文件(一般不用)
如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值

上述内容前面三种jar包,不允许修改,后面三种可以自己进行修改。

配置文件的优先级:都是从上往下优先级依次递增,越往下优先级越高

1.5.Struts2常量配置

在default.properties中可以找到我们的常量配置。

Struts2.xml文件中常用的常量配置:

<!--开发模式;修改配置文件不需要重启服务器-->
<!--指的struts.xml,其它的配置文件修改依然还是需要重启-->
<!--自动重新加载配置文件,不一定会绝对成功。-->
<!--struts.devMode = true;-->
<constant name="struts.devMode" value="true" />
<!--系统使用编码-->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!--上传文件大小(byte)-->
<constant name="struts.multipart.maxSize" value="2097152" />
<!--默认的后缀名-->
<constant name="struts.action.extension" value="action,do,," />

1.6.Struts2默认配置

①    <action>中的class默认class是继承于struts-default包中的<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />,实际中不写默认使用该配置;

②    <action>中的method默认配置是execute

③    <result>标签中的name默认配置是success

④    <result>标签中的type默认配置是dispather

<package name="default" namespace="/" extends="struts-default">
<!-- action中哪些配置是默认配置,可以不写?
   method是可以不写的,默认是execute 
   class是可以不写的,默认的是找的是(这个我们自己是可以改的)
   <default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>在struts-default 中可以找到
    name可以不写嘛?这个是必需的
    result中哪些配置是默认配置,可以不写?
    name:可以不写,默认的是success
    type:可以不写,默认的类型是dispatcher(我们也可以改的)-->
<action name="const">
    <result>/success.jsp</result>
</action>
</package>

猜你喜欢

转载自www.cnblogs.com/yif0118/p/12688905.html