如何在Struts 2中使用没有后缀的URL(例如.action)?

Cli*_*ote 3 java struts2 url-routing struts2-interceptors

这就是我需要的东西,我不仅需要使用我的.war来提供java,还需要一些javascript文件.所以,例如.如果有人去了网址:

example.com/js/foo.jar
Run Code Online (Sandbox Code Playgroud)

然后我需要将其正确地作为javascript文件提供.同时,如果有人去:

example.com/bar
Run Code Online (Sandbox Code Playgroud)

我需要将Struts2作为可能的控制器来提供服务.

我在网上发现的从url中删除后缀的方法会导致两个URl都被struts 2服务(因此foo.js即使它存在,也会给第一个文件带来错误).是否有一种方法(例如拦截器)在发出错误之前首先检查给定的.js文件是否存在?

Ste*_*tez 11

DarkHorse的答案并不完全准确.有两个值非常相似但工作方式不同:

<constant name="struts.action.extension" value=","/>
<constant name="struts.action.extension" value=""/>
Run Code Online (Sandbox Code Playgroud)

你几乎肯定想要第一个选项,其中包括一个逗号.这告诉Struts动作扩展名为空.这也意味着,Struts的不会尝试匹配的任何请求有一个扩展名,如*的.css,*.js文件,等等.

第二个选项告诉Struts不应该有一个动作扩展,但它也说你希望Struts匹配每个请求.我能想到的唯一可能的好处是,如果您想在动作映射中包含文件扩展名,例如:

<action name="robots.txt" class="...">
    ...
</action>
Run Code Online (Sandbox Code Playgroud)

此外,为了排除请求从Struts的过滤器是使用struts.action.excludePattern属性,描述在这里.不要依赖拦截器,因为拦截器只在框架找到合适的映射动作后运行.