突发奇想的想知道Struts2的配置文件名是否可以修改,自己最早使用Struts2的时候,只是单纯的将配置文件命名为“struts.xml”,这是Strut2默认的配置文件名,我一直也没有去修改它的命名。

先来回顾一下Spring,SpringMVC,Hibernate,MyBatis的配置文件名是在哪里进行配置的:

1.记得最初我学习Spring的时候,经常将配置文件命名为 applicationContext.xml ,这个名字挺符合Spring的作用的,即使现在,如果没有特殊的要求,我一般也会将它如此命名。Spring是在web.xml中配置一个ContextLoaderListener来启动的,同样Spring也是在web.xml中配置context-param这个全局参数来进行配置文件命名的,它指定了一个contextConfigLocation的参数,并通过它的值来指定Spring配置文件的命名及位置。

    <!--指定spring文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>

2.SpringMVC作为前端控制器,访问的url都会被它拦截处理,我们使用是在web.xml中配置了DispatcherServlet,在配置这个家伙的同时通过<init-param>标签给Servlet搞一个同样名为contextConfigLocation初始化参数,这是参数的value指明了SpringMVC配置文件的命名及位置。

  <!--配置前端控制器  -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定springmvc配置文件位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

当然可以不用配这个初始化的参数,那么就是使用默认名了,SpringMVC默认配置文件名为"servlet-name"-servlet.xml(servlet-name就是配置DispatcherServlet时取的名字),并放在WEB-INF下。

3.Hibernate作为一款持久层框架,自然需要与数据库打交道,使用Hibernate访问数据库是需要拿到Session的,在纯Java项目中,我们需要先通过Configuration对象得到SessionFactory,再通过工厂去得到Session,Hibernate配置文件的配置正是在Configuration对象初始化的时候指定:

  @Before
public void initSession() {
Configuration cfg=new Configuration().configure("hibernate-config.xml");
SessionFactory sf = cfg.buildSessionFactory();
session=sf.openSession();
tx=session.beginTransaction();
}

当然,调用 configure() 方法时可以不指定配置文件名,默认配置文件名为hibernate.cfg.xml

但Hibernate与Spring进行整合之后,Hibernate的SessionFactory就由Spring去管理了,所以会在Spring配置文件配置SessionFactory时指定:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>

通过 configLocations 来指定配置文件名

4.MyBatis也作为持久层框架,它在没有使用Spring的时候,也是需要先通过SqlSessionFactoryBuilder的build方法指定配置文件,build方法需要通过InputStream来得到配置文件的输入流,我们正是在获得这个InputStream的时候指明了配置文件:

/**
* 构建SQLSessionFactory
*/
public static SqlSessionFactory initSqlSessionFactory() {
//MyBatis配置文件
String resource="mybatis/mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}

通过 SqlSessionFactory  得到SqlSession去操作数据库就好了。MyBatis和Spring整合之后,SqlSessionFactory也是由Spring管理:

       <!--1. 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="dataSource" ref="dataSource"></property>
<!-- 指定mybatis,mapper文件的位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>

同样是通过 configLocation 来指明配置文件。

OK,既然Spring,SpringMVC,Hibernate,MyBatis的配置文件名都可以修改,那么Struts2的配置文件是不是也可以修改呢?

类似于SpringMVC,我们点开Struts2的前端控制器StrutsPrepareAndExecuteFilter(在Struts2的某些早期的版本使用的是DispatcherFilter,我这里使用的是2.3版本),这是一个Filter,所以它一定是实现Filter接口,果然:

1.熟悉的三个Filter方法。我们先从init方法开始看吧:

2. 继续进入InitOperations类的initDispatcher方法:

3.先来看看createDispatcher( HostConfig filterConfig ),这个方法需要HostConfig的参数,而之前已经将FilterConfig包成一个FilterHostConfig,这个FilterHostConfig实现了HostConfig接口

这一处说明所有配置的Filter初始化参数都被放入一个Map中,然后将这个Map作为参数给Dispatcher的构造器,在这个构造器中赋值给Diapather的名为initParams的Map成员变量。

先记住这个名为initParams的Map,接下来会用到。

4.然后回到InitOperations类的initDispatcher方法,再来看Dispatcher类的init方法:

5.进入Dispatcher的init_TraditionalXmlConfigurations()方法:

到此为止,我们知道了需要在Filter中配置一个名为config的初始化参数,如果有多个配置文件使用逗号分隔:

    <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

找这个东西我也是花了一定的时间才理清楚,在之前我使用SpringMVC配合hibernate-validator进行验证出现解析properties文件内容乱码的问题,也是通过源码才搞清楚,遇到一些很刁钻的问题阅读源码就显得就重要了,自己在阅读源码方面的能力也需要加强。

关于Struts2配置文件名修改的问题的更多相关文章

  1. Struts2配置

    1.      设定server a)      window– preferences – myeclipse – servers – tomcat – 6.x b)      选择tomcat h ...

  2. web09 struts2配置 struts2入门

    电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...

  3. STRUTS2配置动态页面

      STRUTS2配置动态页面 CreateTime--2017年5月11日09:00:31Author:Marydon 1.struts配置 <?xml version="1.0&q ...

  4. jeakins+maven+jmeter构建性能测试自动化( 在eclipse里运行如果出现没有找到“*.loadtest.xls”,请将此文件名修改为你对应使用的xsl文件名)

    背景: 首先用jmeter录制或者书写性能测试的脚本,用maven添加相关依赖,把性能测试的代码提交到github,在jenkins配置git下载性能测试的代码,配置运行脚本和测试报告,配置运行失败自 ...

  5. 整理 PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释:

    对你有助请点赞,请顶------送人玫瑰,手留余香! 1:58 2016/3/12 整理PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释: PHPsto ...

  6. [SSH 2] 以网站主页面浅谈Struts2配置

    导读:前面总体的介绍了一下SSH框架,那么作为Struts这一支,具体是怎么配置的呢?本篇博客则主要是以自己做过的实例中的登录一条线,简单介绍一下struts2的配置,如有不妥之处,还请大家多提点提点 ...

  7. 为了让vi命令也可以使用vim的配置,需要修改 vi /etc/bashrc 增加一行 alias vi='vim'此时,经过上面配置已经可以显示语法高亮了

    为了让vi命令也可以使用vim的配置,需要修改 vi /etc/bashrc 增加一行 aliasvi='vim'此时,经过上面配置已经可以显示语法高亮了

  8. Ubuntu配置和修改IP地址

    Ubuntu配置和修改IP地址 1.修改配置文件/etc/network/interfacesroot@ubuntu:~# sudo gedit /etc/network/interfaces 添加以 ...

  9. MyEclipse下Struts2配置使用和Ajax、JSON的配合

    原创文章,转载请注明:MyEclipse下Struts2配置使用和Ajax.JSON的配合  By Lucio.Yang 新手,初学Struts2的配置,同时尝试与Ajax通过JSON交互.首先介绍M ...

随机推荐

  1. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接--解决方法     phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和 ...

  2. 浅谈深度学习中的激活函数 - The Activation Function in Deep Learning

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激活 ...

  3. python中对文件的处理

    1.当文件中存放的用户名的密码,是以字符串的形式存储时,怎么进行读取和操作 eg:MLing,123456 niuniu,234567 luoluo,345678 方法一:将字符串转为字典 1)字典查 ...

  4. Leetcode 894. All Possible Full Binary Trees

    递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # ...

  5. Android 4.0 Camera架构分析之Camera初始化

    Android Camera 采用C/S架构,client 与server两个独立的线程之间使用Binder通信,这已经是众所周知的了.这里将介绍Camera从设备开机,到进入相机应用是如何完成初始化 ...

  6. 在tableView中设置cell的图片和文字

    // 设置UITableViewCellEditingStyle的 accessoryType UITableViewCellAccessoryNone,                   // d ...

  7. ubuntu16.04 LTS grafana安装与启动

    1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...

  8. selenium-java,UI自动化截图方法

    截图方法: import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; impor ...

  9. 颜色叠加模式:mix-blend-mode

    文章转自叠加模式 http://www.cgspread.com/3551.html 注释:1.混合模式的数学计算公式,另外还介绍了不透明度.2.这些公式仅适用于RGB图像,对于Lab颜色图像而言,这 ...

  10. 每天一个linux命令(文件操作):【转载】find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...