默认情况下,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. windows下安装git

    1.从Git官网下载windows版本的git:http://git-scm.com/downloads 2.一般使用默认设置即可:一路next,git安装完毕! 3.但是如果这时你打开windows ...

  2. [技巧篇]12.从Spring的编码过滤器说起

    有一枚学生问问了我一个问题,突然灵感爆发,他使用的Spring的过滤器,前台利用GET方式向后端发出一个请求,由于里面含有中文数据,结果在后端显示的是乱码,他问我为什么?明明在Spring里面也配了字 ...

  3. echarts 使用demo

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  4. poj 2541 Binary Witch

    Binary Witch http://poj.org/problem?id=2541 Time Limit: 1000MS   Memory Limit: 65536K       Descript ...

  5. POJ 1014 / HDU 1059 Dividing 多重背包+二进制分解

    Problem Description Marsha and Bill own a collection of marbles. They want to split the collection a ...

  6. struts2之OGNL用法

    浅析OGNL OGNL是Object-GraphNavigation Language的缩写,是一种功能强大的表达式语言 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对 ...

  7. 「6月雅礼集训 2017 Day10」quote

    [题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. ...

  8. UIScrollView---iOS-Apple苹果官方文档翻译

      本系列所有文章,链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版) //转载请注明出处--本文永久链接:http://www ...

  9. 【洛谷 P3809】 【模板】后缀排序

    题目链接 先占个坑,以后再补. \(SA\)的总结肯定是要写的. 等理解地深入一点再补. #include <cstdio> #include <cstring> const ...

  10. 洛谷 P3375 【模板】KMP字符串匹配

    我这段时间因为字符串太差而被关了起来了(昨晚打cf不会处理字符串现场找大佬模板瞎搞,差点就凉了),所以决定好好补一下字符串的知识QAQ,暂时先学习kmp算法吧~ 题目链接:https://www.lu ...