默认情况下,Struts2的配置文件名称为struts.xml,且该文件放在src根目录下。如下图所示:

如果需要修改struts.xml的位置,例如把struts.xml放到struts2文件夹下,结构如下图所示,该怎么办呢?

Struts2在web.xml中的一般配置如下:

  1. <!-- 配置struts2过滤器:StrutsPrepareAndExecuteFilter -->
  2. <filter>
  3. <filter-name>struts2</filter-name>
  4. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>struts2</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

为了弄清Stuts2是如何加载配置文件的,先查看Struts2的StrutsPrepareAndExecuteFilter类:

  1. package org.apache.struts2.dispatcher.ng.filter;
  2. /**
  3. * Handles both the preparation and execution phases of the Struts dispatching process.  This filter is better to use
  4. * when you don't have another filter that needs access to action context information, such as Sitemesh.
  5. */
  6. public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
  7. protected PrepareOperations prepare;
  8. protected ExecuteOperations execute;
  9. protected List<Pattern> excludedPatterns = null;
  10. public void init(FilterConfig filterConfig) throws ServletException {
  11. InitOperations init = new InitOperations();
  12. try {
  13. FilterHostConfig config = new FilterHostConfig(filterConfig);
  14. init.initLogging(config);
  15. Dispatcher dispatcher = init.initDispatcher(config);
  16. init.initStaticContentLoader(config, dispatcher);
  17. prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
  18. execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
  19. this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);
  20. postInit(dispatcher, filterConfig);
  21. } finally {
  22. init.cleanup();
  23. }
  24. }
  25. /**
  26. * Callback for post initialization
  27. */
  28. protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) {
  29. }
  30. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  31. HttpServletRequest request = (HttpServletRequest) req;
  32. HttpServletResponse response = (HttpServletResponse) res;
  33. try {
  34. prepare.setEncodingAndLocale(request, response);
  35. prepare.createActionContext(request, response);
  36. prepare.assignDispatcherToThread();
  37. if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
  38. chain.doFilter(request, response);
  39. } else {
  40. request = prepare.wrapRequest(request);
  41. ActionMapping mapping = prepare.findActionMapping(request, response, true);
  42. if (mapping == null) {
  43. boolean handled = execute.executeStaticResourceRequest(request, response);
  44. if (!handled) {
  45. chain.doFilter(request, response);
  46. }
  47. } else {
  48. execute.executeAction(request, response, mapping);
  49. }
  50. }
  51. } finally {
  52. prepare.cleanupRequest(request);
  53. }
  54. }
  55. public void destroy() {
  56. prepare.cleanupDispatcher();
  57. }
  58. }

可以看到,有个public void init(FilterConfig filterConfig) throws ServletException { ... } 方法,很明显,这个方法在启动时会被调用,然后加载classes目录下的struts.xml配置文件。配置文件参数名称为filterConfig。因此,我们可以指定Struts2 Filter 的参数,这和指定Servlet参数相同,配置<init-param>即可。配置如下:

  1. <filter>
  2. <filter-name>struts2</filter-name>
  3. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  4. <init-param>
  5. <param-name>filterConfig</param-name>
  6. <param-value>classpath:struts2/struts.xml</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>struts2</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

这样配置后,就可以正常加载指定的Struts配置文件了。

修改Struts2的struts.xml配置文件位置的更多相关文章

  1. struts2中struts.xml配置文件详解【未整理】

    1.    深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1.    包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管 ...

  2. struts2中struts.xml配置文件详解

    struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  3. struts2:struts.xml配置文件详解

    1. 几个重要的元素 1.1 package元素 package元素用来配置包.在Struts2框架中,包是一个独立的单位,通过name属性来唯一标识包.还可以通过extends属性让一个包继承另一个 ...

  4. struts2.0 struts.xml配置文件详解

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...

  5. struts2 的struts.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  6. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  7. Struts2笔记——struts.xml配置详解

    访问HelloWorld应用的路径的设置 * 在struts1中,通过<action path=“/primer/helloWorldAction.action”>节点的path属性指定访 ...

  8. Struts2初学 Struts.xml详解二

    A.使用继承实现设置全局视图    package节点中还可以设置全局的视图,如:     <global-results>         <result name="e ...

  9. struts.xml配置文件(package,namespace,action)

    struts2.0 xml配置 struts.xml文件结构 struts.xml文件是整个Struts2框架的核心. struts.xml文件内定义了Struts2的系列Action,定义Actio ...

随机推荐

  1. 《时间序列分析及应用:R语言》读书笔记--第一章 引论

    "春节假期是难得的读书充电的时间."--来自某boss.假期能写多少算多少,一个是题目中的这本书,另一个是<python核心编程>中的高级部分,再一个是拖着的<算 ...

  2. ACE线程管理机制-面向对象的线程类ACE_Task

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/05/583231.html 我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一 ...

  3. AtCoder Grand Contest 031 B - Reversi(DP)

    B - Reversi 题目链接:https://atcoder.jp/contests/agc031/tasks/agc031_b 题意: 给出n个数,然后现在你可以对一段区间修改成相同的值,前提是 ...

  4. Spring实战第一部分总结

                                                         Spring实战第一部分总结 第一章 综述 1. DI依赖注入让相互协作的组件保持松散耦合,而 ...

  5. spring中使用@Async注解进行异步处理

    引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3. ...

  6. Why to Not Not Start a Startup

    我花了周六,周日两天的时间,把这篇长文给阅读完了.很受益,改变了我的很多认知,也给我开拓了视野. 转载: Want to start a startup? Get funded by Y Combin ...

  7. 【HDU】5269 ZYB loves Xor I

    [算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...

  8. .NET中方法的注意事项 明细

    1. 方法中return 会终止整个方法段. 而break只能终止当前循环. 2. 方法就是一对可用代码的复用. a . 对于可重用的代码,在vs中选中,右键  重构  提取方法.即可自动封装成一个方 ...

  9. oracle scott用户不存在

    scott用户拥有一些基础的数据表,可以供我们练习sql.先执行 alter user scott account unlock; 查看scott用户是否存在 当scott用户不存在,我们就需要在$O ...

  10. vue 点击选中改变样式

    data里isActive:-1,method里 checkedItem(index){ this.isActive=index;},页面里 <div v-for="(item,ind ...