Como ter URLs sem um sufixo (por exemplo, .action) no Struts 2?

Aqui está a coisa, eu preciso não só servir java, mas também alguns arquivos javascript, com o meu .war. Então e, g. se alguém for para o URL:

example.com/js/foo.jar 

Então eu preciso que seja adequadamente servido como um arquivo javascript. Ao mesmo tempo, se alguém for para:

 example.com/bar 

Eu preciso que seja servido pelo Struts2 como um possível controlador.

Os methods que eu encontrei online de remover o sufixo da url, faria com que ambos os URls fossem atendidos pelos struts 2 (e, portanto, fornecessem um erro para o primeiro arquivo foo.js mesmo que ele existisse). Existe uma maneira (como um interceptor), que irá primeiro verificar se o arquivo .js dado existe, antes de dar um erro?

A resposta de DarkHorse não é totalmente precisa. Existem dois valores que são muito semelhantes mas funcionam de forma muito diferente:

   

Você quase certamente quer a primeira opção, que inclui uma vírgula. Isso informa ao Struts que a extensão de ação está vazia. Isso também significa que o Struts não tentará corresponder a nenhum pedido que tenha uma extensão, como * .css, * .js etc.

A segunda opção diz ao Struts que não deve haver uma extensão de ação, mas também diz que você deseja que o Struts corresponda a todas as solicitações. O único benefício possível que posso pensar nisso é se você deseja include extensões de arquivo em seu mapeamento de ação, como as seguintes:

  ...  

Além disso, para excluir solicitações do filtro Struts, use a propriedade struts.action.excludePattern , conforme descrito aqui . Não confie em um interceptor para isso, já que os interceptadores só são executados quando a estrutura tiver localizado uma ação adequada para mapear.

Para ter URLs sem sufixo … tudo o que você precisa fazer é definir isso no arquivo struts.xml

   

Se você quiser que algum url não seja servido pela ação struts … escreva um interceptor onde você verifica o sufixo do url .. se ele tiver algum redirecionamento, evitando assim as ações do struts completamente.

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(); } }