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

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

example.com/js/foo.jar 

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

 example.com/bar 

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

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

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

   

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

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

  ...  

另外,要从Strutsfilter中排除请求,请使用struts.action.excludePattern属性,如此处所述。 不要依赖拦截器,因为拦截器只在框架找到合适的映射动作后运行。

要有没有后缀的URL …你需要做的就是在struts.xml文件中设置它

   

如果你想要一些url不被struts动作服务…写一个拦截器,你检查url的后缀..如果它有任何重定向他们在哪里因此完全避免你的struts动作..

EX:

 public class RestrictUrl extends AbstractInterceptor implements SessionAware { Map session; @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE); String url = request.getHeader("referer"); // Your url if(check something in url) { response.sendRedirect(where you want to go); } return invocation.invoke(); } }