采用struts2 小伙伴非常希望更改或删除action扩展,本文将帮助你实现

struts2-core-2.3.16.jar , 下载链接: http://repo1.maven.org/maven2/org/apache/struts/struts2-core/2.3.16/

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter , 这个struts2处理请求的函数doFilter 。 在这里使用了 prepare.isUrlExcluded来推断是否排除的请求。假设是就直接运行chain.doFilter(request, response);交给其它的Filter处理,否则自己处理此action

  1. //... // protected PrepareOperations prepare;
  2. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  3.  
  4. HttpServletRequest request = (HttpServletRequest) req;
  5. HttpServletResponse response = (HttpServletResponse) res;
  6.  
  7. try {
  8. if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) { //看这里
  9. chain.doFilter(request, response);
  10. } else {
  11. prepare.setEncodingAndLocale(request, response);
  12. prepare.createActionContext(request, response);
  13. prepare.assignDispatcherToThread();
  14. request = prepare.wrapRequest(request);
  15. ActionMapping mapping = prepare.findActionMapping(request, response, true);
  16. if (mapping == null) {
  17. boolean handled = execute.executeStaticResourceRequest(request, response);
  18. if (!handled) {
  19. chain.doFilter(request, response);
  20. }
  21. } else {
  22. execute.executeAction(request, response, mapping);
  23. }
  24. }
  25. } finally {
  26. prepare.cleanupRequest(request);
  27. }
  28. }
  29. //...

org.apache.struts2.dispatcher.ng.PrepareOperations

  1. /**
  2. * Check whether the request matches a list of exclude patterns.
  3. *
  4. * @param request The request to check patterns against
  5. * @param excludedPatterns list of patterns for exclusion
  6. *
  7. * @return <tt>true</tt> if the request URI matches one of the given patterns
  8. */
  9. public boolean isUrlExcluded( HttpServletRequest request, List<Pattern> excludedPatterns ) {
  10. if (excludedPatterns != null) {
  11. String uri = RequestUtils.getUri(request);
  12. for ( Pattern pattern : excludedPatterns ) {
  13. if (pattern.matcher(uri).matches()) {
  14. return true;
  15. }
  16. }
  17. }
  18. return false;
  19. }

经过以上的分析。如今在看看struts2的默认配置文件default.properties,在struts2-core-2.3.16.jar,  org.apache.truts2以下

  1. ### Used by the DefaultActionMapper
  2. ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
  3. ### The blank extension allows you to match directory listings as well as pure action names
  4. ### without interfering with static resources, which can be specified as an empty string
  5. ### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,
  6. struts.action.extension=action,,

依据描写叙述。能够设置struts.action.extension的value为一个逗号就能够支持无扩展名的action了。假设想兼容之前的,能够加入上之间的,如:  

  1. <pre name="code" class="plain">struts.action.extension=<span style="font-family: Arial, Helvetica, sans-serif;">do,action,jspt,, </span>
  1.  

另外。假设你使用的struts2的版本号低于2.3.16(至于详细那个版本号是过度的。我没有測试),静态资源js,css可能会被吃掉了,能够加入例如以下的一个属性

  1. struts.action.excludePattern=/css,/javascript

有的项目中处理js和css的方式是对js、css进行压缩的servlet,如:

  1. <link type="text/css" rel="stylesheet" href="/compressor?
  2.  
  3. v=${globalVersion}&type=css&munge=true&files=/cssStyle/index.css,/cssStyle/dialog.css,/cssStyle/jbox/Gray/jbox.css,/cssStyle/home.css">
  4. <script src="/compressor?v=${globalVersion}&type=js&munge=true&files=
  5. /javascript/lib/json2/json2.js,
  6. /javascript/lib/jquery/1.7.2/jquery.js,
  7. /javascript/lib/jquery/jquery.ext.js,
  8. /javascript/lib/juicer/0.6.1/juicer-min.js,
  9. /javascript/lib/underscore/1.3.3/underscore-min.js,
  10. /javascript/lib/cookie/cookie.min.js,
  11. /javascript/core/core.js,
  12. /javascript/core/toptips.js,
  13. /javascript/core/selectBankCard.js,
  14. /javascript/core/dialog.js,
  15. /javascript/core/page.js,
  16. /javascript/core/regex.js,
  17. /javascript/core/topLogRegister.js"
  18. type="text/javascript"></script>

即使用servlet  compressor 输出js和css文件,此时配置应例如以下

  1. struts.action.excludePattern=/compressor

如要过滤 以 “/druid”和“/compressor”开头的请求,模式例如以下(注意加入的是".*"。而不仅仅是“*”)

  1. struts.action.excludePattern=/compressor.*,/druid.*

注意:在设置struts2的配置时。最好使用struts.properties,由于我在struts.xml中使用同样的配置,就不兼容曾经的".do"了。假设struts.properties和struts.xml同一时候存在,struts.properties的优先级会高于struts.xml

版权声明:本文博主原创文章,博客,未经同意不得转载。

struts2 no extension(excludePattern)的更多相关文章

  1. Struts2 - 常用的constant总结

    见注释 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC &quo ...

  2. struts2中constant参数设置

    序号 方法 说明 1 <constant name="struts.i18n.encoding" value="UTF-8"/> 指定web应用默认 ...

  3. Struts2 教程

    一.Struts2是什么 Struts2是在WebWork2基础发展而来的.和Struts1一样, Struts2也是基于MVC的web层框架. 那么既然有了Struts1,为何还要Struts2? ...

  4. Struts2 - 常用的constant标签[转]

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

  5. Struts2.x教程(一) Struts2介绍

    一.Struts2是什么 Struts2是在WebWork2基础发展而来的.和Struts1一样, Struts2也是基于MVC的web层框架. 那么既然有了Struts1,为何还要Struts2? ...

  6. struts2.xml中所有constant详解--大全

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

  7. 分享知识-快乐自己:Struts2 (常用的 constant 总结)

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

  8. Struts2 配置项

    基础Constants struts.devMode  可选值true,false (默认false),在开发模式下,struts2的动态重新加载配置和资源文件的功能会默认生效.同时开发模式下也会提供 ...

  9. 如何解决Struts2和Servlet共存问题

    我之前用Servlet写过二维码扫描登录,结果把它整合到ssh框架中,发现Servlet和Struts存在共存问题,这是因为当我们在页面在请求应用时,struts2将会截获所有请求,对于servlet ...

随机推荐

  1. bootstrap课程6 bootstrap的表单注意事项有哪些

    bootstrap课程6 bootstrap的表单注意事项有哪些 一.总结 一句话总结: 1.bootstrap中的表单中的每一项是什么样的形式? div.form-group>label +i ...

  2. windows 开机总动运行bat文件

    抄自 https://blog.csdn.net/csdnliuxin123524/article/details/78949803 就是把bat文件放到   开始->启动  的那个文件夹里就可 ...

  3. 三个Bootstrap免费字体和图标库

    前言:Bootstrap 简洁.直观.强悍.移动设备优先的前端开发框架,让web开发更迅速.简单 ,深入了解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快, 组件无数 ...

  4. 【例题 6-1 UVA - 210】Concurrency Simulator

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 队列模拟题. 注意初始化.. 然后题目中是让读入一个数据组数然后再输入数据的. 但样例..但样例没有!? [代码] #include ...

  5. [WASM] Write to WebAssembly Memory from JavaScript

    We write a function that converts a string to lowercase in WebAssembly, demonstrating how to set the ...

  6. 用Java将字符串的首字母转换大小写

    在项目开发的时候会需要统一字符串的格式,比如首字母要求统一大写或小写,那用Java如何实现这一功能?下面一起来学习学习. 话不多说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 ...

  7. mjpg-streamer摄像头远程传输UVC

    mjpg-streamer摄像头远程传输UVC 1 下载源代码 mjpg-streamer的源代码地址  https://github.com/codewithpassion/mjpg-streame ...

  8. 前端js实现打印excel表格

    产品原型: 图片.png 功能需求:点击导出考勤表格按钮,会自动下载成Excel格式 图片.png 图片.png jsp页面代码: <div class="tools"> ...

  9. ijkplayer阅读笔记02-创建音视频读取,解码,播放线程

    本节主要介绍音视频读取和解码线程的创建及启动,代码流程例如以下: IjkMediaPlayer_prepareAsync{ ijkmp_prepare_async_l{ ijkmp_change_st ...

  10. Wow6432Node(32位程序的注册表内容都在这个节点下,也可直接使用%systemroot%\syswow64\regedit进行编辑)

    64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...