采用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

//...  // protected PrepareOperations prepare;
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res; try {
if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) { //看这里
chain.doFilter(request, response);
} else {
prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
request = prepare.wrapRequest(request);
ActionMapping mapping = prepare.findActionMapping(request, response, true);
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(request, response);
if (!handled) {
chain.doFilter(request, response);
}
} else {
execute.executeAction(request, response, mapping);
}
}
} finally {
prepare.cleanupRequest(request);
}
}
//...

org.apache.struts2.dispatcher.ng.PrepareOperations

/**
* Check whether the request matches a list of exclude patterns.
*
* @param request The request to check patterns against
* @param excludedPatterns list of patterns for exclusion
*
* @return <tt>true</tt> if the request URI matches one of the given patterns
*/
public boolean isUrlExcluded( HttpServletRequest request, List<Pattern> excludedPatterns ) {
if (excludedPatterns != null) {
String uri = RequestUtils.getUri(request);
for ( Pattern pattern : excludedPatterns ) {
if (pattern.matcher(uri).matches()) {
return true;
}
}
}
return false;
}

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

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

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

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

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

struts.action.excludePattern=/css,/javascript

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

<link type="text/css" rel="stylesheet" href="/compressor?

v=${globalVersion}&type=css&munge=true&files=/cssStyle/index.css,/cssStyle/dialog.css,/cssStyle/jbox/Gray/jbox.css,/cssStyle/home.css">
<script src="/compressor?v=${globalVersion}&type=js&munge=true&files=
/javascript/lib/json2/json2.js,
/javascript/lib/jquery/1.7.2/jquery.js,
/javascript/lib/jquery/jquery.ext.js,
/javascript/lib/juicer/0.6.1/juicer-min.js,
/javascript/lib/underscore/1.3.3/underscore-min.js,
/javascript/lib/cookie/cookie.min.js,
/javascript/core/core.js,
/javascript/core/toptips.js,
/javascript/core/selectBankCard.js,
/javascript/core/dialog.js,
/javascript/core/page.js,
/javascript/core/regex.js,
/javascript/core/topLogRegister.js"
type="text/javascript"></script>

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

struts.action.excludePattern=/compressor

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

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

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

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

最新文章

  1. urlencode
  2. 初学git:用git bash往github push代码
  3. selenium grid中的多个线程同步执行
  4. 套接字I/O模型-select
  5. 抓取dump
  6. php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?
  7. (转) Special members
  8. 【Android进阶】ZXing android 错误(Could not find class &#39;com.google.zxing.ResultPoint)
  9. web前端上传图片的几种方法
  10. Audio Unit 基础
  11. Windows上安装MySQL的完整教程
  12. [NOI2017]游戏
  13. 【JVM虚拟机】(3)---垃圾回收器
  14. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
  15. Spring手册
  16. CodeIgniter2.0中sqlserver驱动返回受影响行数问题解决
  17. Android开发6——布局中的wrap_content和fill_parent以及match_parent
  18. Bluetooth&#174; Low Energy Beacons
  19. vscode如何用浏览器预览运行html文件
  20. mysql 5.1.71升级到5.6.30

热门文章

  1. js闭包中的this(匿名函数中的this指向的是windows)
  2. lettuce--Advanced Redis client
  3. ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题
  4. shrio 权限管理filterChainDefinitions过滤器配置(转)
  5. &lt;转&gt; Intel VTune分析结果中的名词释译
  6. Android 自己定义ViewGroup 实战篇 -&amp;gt; 实现FlowLayout
  7. eclipse插件安装验证及问题处理
  8. 【LeetCode-面试算法经典-Java实现】【104-Maximum Depth of Binary Tree(二叉树的最大深度)】
  9. 解决gvim 8.1中zip插件打开zip文件内容时,而文件路径带有空格的问题。
  10. javascript合并数组并且删除第二项