struts2配置文件的加载顺序以及 struts.xml package 的配置说明
查看StrutsPrepareAndExecuteFilter:(核心过滤器)两个功能 :预处理 和 执行
在预处理功能中 init 方法中会有加载配置文件的代码:
dispatcher.init();
init_DefaultProperties(); // [1] ---- 加载org.apache.struts.default.properties.配置的是struts2的所有常量.
init_TraditionalXmlConfigurations(); // [2] ---- 加载struts-default.xml、struts-plugin.xml、struts.xml
init_LegacyStrutsProperties(); // [3] ---- 加载用户自定义struts.properties
init_CustomConfigurationProviders(); // [5] ---- 加载Struts2定义Bean.
init_FilterInitParameters() ; // [6] ---- 加载web.xml
init_AliasStandardObjects() ; // [7] ---- 用户自定义Bean
结论:
* default.properties
* struts-default.xml
* struts-plugin.xml
* struts.xml ---- 配置Action以及常量.(******)
* struts.properties ---- 配置常量
* web.xml ---- 配置核心过滤器及常量.
***** 后配置的常量 会 覆盖先配置的常量.
<package>的配置:
* package:包. 不是java中说那个包. Struts2中的包 管理<action>.
* 属性:
* name :包名.包名是唯一的不能重复的.
* extends :继承.继承struts-default.(struts-default包中定义结果类型和拦截器.)
* namespace :名称空间.与<action>标签中的name属性共同决定Action的访问路径.
* 写法:
* namespace有名称: namespace=”/aa”
* namespace只是一个/: namespance=”/”
* namespace默认的: namespace没写.
* 有如下配置:
<package name="demo1" extends="struts-default" namespace="/aa/bb/cc">
<action name="demo1" class="cn.itcast.struts2.demo1.StrutsDemo1"/>
</package>
<package name="demo2" extends="struts-default" namespace="/aa/bb">
<action name="cc/demo1" class="cn.itcast.struts2.demo1.StrutsDemo2"/>
</package>
<package name="demo2" extends="struts-default" namespace="/aa">
<action name="bb/cc/demo1" class="cn.itcast.struts2.demo1.StrutsDemo3"/>
</package>
<package name="demo2" extends="struts-default" namespace="/">
<action name="aa/bb/cc/demo1" class="cn.itcast.struts2.demo1.StrutsDemo3"/>
</package>
在页面中<a href=”/aa/bb/cc/demo1.action”>访问</a>
***** 名称空间最大化:访问路径中:/aa/bb/cc/demo1.action 首先将/aa/bb/cc都作为名称空间.demo1作为action的name去查询.
* abstract :抽象的.用于使其他的包可以继承的.
* <package name="struts-default" abstract="true"> . 所以可以继承struts-default.
<action>的配置:
* action:配置Action类的访问路径.
* 属性:
* name :名称.与<package>中的namespace属性共同决定访问路径.
* class :类的全路径.要执行的Action类的全路径.
* method :方法.用来指定Action中执行那个方法的方法名.(默认的值execute)
<result>的配置:
* result:配置Action执行后的页面跳转.
* 属性:
* name :逻辑视图名称.(不是真实的视图,为真实的视图起了一个别名,在Action中返回这个字符串的别名,从而找到具体页面.)
* type :跳转的类型.
Action中的默认值:
<package>的namespace的默认值: 什么都没写.
<action>的class的默认值:
* 在struts-default.xml中:
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
<result>的name的默认值:
* name默认就是success.
默认的Action的配置和Action的默认处理类:
默认的Action :访问一个Action.但是这个Action路径写错了.(404的错误.配置一个默认的Action,当找不到Action的时候,让默认的Action来执行.)
* <default-action-ref name=""/>
Action默认处理类 :访问一个Action的时候,路径没有错误.但是class中类的路径写错了或者没写.
* <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
常量的配置:
修改常量:
* struts.xml :
* 格式:<constant name="常量名称" value="常量的值"/>
* struts.properties :
* 格式:常量的名称=常量的值.
* web.xml :
* <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>常量名称</param-name>
<param-value>常量值</param-value>
</init-param>
</filter>
Struts2常用的常量:
* struts.i18n.encoding=UTF-8 :解决Struts2中的所有的POST请求的中文乱码.
* struts.action.extension=action,, :action的访问的后缀名.默认值不是.action或者空(不写后缀名也可以访问.).
* <constant name="struts.action.extension" value="action"/>
* struts.devMode=false :解决修改了配置文件之后不需要重启服务器.
* <constant name="struts.devMode" value="true"></constant>
分模块开发的时候
<include file="cn/itcast/struts2/demo1/struts_demo1.xml"/> 整合其他的struts的配置文件.
struts xml 模版
<?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>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="package1" extends="struts-default" namespace="">
<default-action-ref name="demo2"></default-action-ref>
<default-class-ref class="cn.jiemoxiaodi.demo3.Struts2Demo3"></default-class-ref>
<action name="demo1" class="cn.jiemoxiaodi.demo1.Struts2Demo1"
method="">
<result name="success">/demo1/success.jsp</result>
</action>
<action name="demo2" class="cn.jiemoxiaodi.demo2.Struts2Demo2"
method="">
</action> <action name="demo3">
</action>
</package> <include file="cn/jiemoxiaodi/demo4/struts4.xml"></include>
<include file="cn/jiemoxiaodi/pojodemo/struts_pojo.xml"></include>
<include file="cn/jiemoxiaodi/demo5/struts_book.xml"></include>
<include file="cn/jiemoxiaodi/servletapi/struts_servletapi.xml"></include>
</struts>
struts2配置文件的加载顺序以及 struts.xml package 的配置说明的更多相关文章
- 2 Struts2的执行流程&配置文件的加载顺序
执行流程: 访问前段页面,通过url访问action 访问xml中Struts2核心过滤器,并执行一组拦截器(这组拦截器在struts-default.xml中,实现了部分功能) 通过action配置 ...
- dubbo配置文件的加载顺序详解(图示)
Dubbo配置文件的加载顺序 在使用apache dubbo.version2.7.3 时,配置文件的加载情况.以provider提供服务者为例. 配置文件 ,以下四个配置文件. 其优先级 app ...
- Spring Boot配置文件的加载顺序
配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容
- springboot 配置文件的加载顺序
springboot 配置文件的加载顺序1.在命令行中传入的参数.2. SPRING APPLICATION JSON中的属性. SPRING_APPLICATION—JSON是以JSON格式配置在系 ...
- 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置
前言 有的时候,配置信息是我们无法在开发过程中就能确定的.比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等.这时候,就需要把配置文件放在外面,让用户自定义配置部 ...
- linux下/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile这四个配置文件的加载顺序
目录 一.关于linux配置文件 二.验证四个配置文件的加载顺序 三.结论 一.关于linux配置文件 1.linux下主要有四个配置文件:/etc/profile ./etc/bashrc ./ro ...
- web项目中配置文件的加载顺序
当一个项目启动时,首先是web.xml: 这里面的配置: 为什么要在web.xml中配置struts的过滤器? 因为一个web项目运行的时需要加载的,或者默认的部分配置都会在web.xml中配置,中间 ...
- SpringBoot配置文件优先级加载顺序
- struts2配置文件加载顺序
struts2配置文件加载顺序: struts-default.xml/ struts-plugin.xml/ struts.xml/ struts.properties/ web.xml
随机推荐
- Effective Objective-C 2.0 — 第8条:理解“对象等同性”这一概念
第8条:理解“对象等同性”这一概念 若想检测对象的等同性,请提供“isEqual”与 hash 方法 相同的对象必须具有相同哈希码,但是两个哈希码相同的对象却未必相同. 不要盲目地逐个检测每条属性,而 ...
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
解决方案: 关掉VS2012... "Microsoft Visual Studio 2012"->"Visual Studio Tools"->& ...
- php 数组排序以及按照某个字段排序
经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用.PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序. ...
- strtol,strtoll,strtoul, strtoull字符串转化成数字
今天看kafka,有一个参数选项中有: 'S' seq=strtoull(optarg,NULL,10); do_seq=1; 之后查找了下 strtoull 函数的功能,了解如下: ---- ...
- css使 同一行内的 文字和图片 垂直居中对齐?
设置父容器, 使 父容器 div 下的所有元素 都 垂直对齐: father-container *{ vertical-align:middle 找回密码
- PostgreSQL建立分区表示例
pgsql 分区表: --主表 create table test(id integer, name varchar(32)); create index idx_test_id on test us ...
- 解决pydev无法增加jython271 interpreter的问题
============================解决pydev无法增加jython271 interpreter的问题============================ 从jython. ...
- SQLServer安装错误之--->无法打开项 UNKNOWN\Components\DA42BC89BF25F5BD0AF18C3B9B1A1EE8\c1c4f01781cc94c4c8fb1542c0981a2a
– 错误 1402.无法打开项 UNKNOWN\Components\7ABFE44842C12B390AF18C3B9B1A1EE8\54D21D49F3A8C1C49AC11A1B6445A83E ...
- 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。
********************************* 思路壹(也是网络上铺天盖地的通俗解决方案) 原因: 这是因为先安装了 .NET Framework , 随后启用了 .NET Fra ...
- Sturts2的action不执行任何方法的原因
今天用<s:url action="xxx">调用action的时候出现了一个“异常”, action里的任何方法都没有执行,直接返回success,而且没有任何报错. ...