能否在不覆盖JSP处理的情况下将servlet映射到/*路径?

5

进一步解释:

我将一个servlet或过滤器映射到“/*”

现在,如果我访问类似于以下的url:

/test

那么这个请求将会被发送到servlet(这是可以的)

但如果我访问像下面这样的url:

/index.jsp

这也会被传递给servlet,我不想要这种行为,我希望index.jsp被处理为jsp。

怎么做呢?


是的,但最好的方法取决于您使用的服务器和框架。 - OrangeDog
1个回答

3

将控制器servlet映射到更具体的url-pattern,例如/controller/*,并创建一个过滤器Filter,该过滤器映射到/*,并在doFilter()方法中大致执行以下操作。

String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.endsWith(".jsp")) {
    chain.doFilter(request, response); // Just let it go. The container's builtin JspServlet will pickup this.
} else {
    request.getRequestDispatcher("/controller" + uri).forward(request, response); // Goes to controller servlet.
}

最接近的答案。但是前向调用不会破坏过滤器链吗?这该如何处理? - Basil Musa
前向传递也会使用<dispatcher>FORWARD</dispatcher>调用过滤器。 - BalusC
我刚试了一下,它仍然有很多问题。*.css文件被视为非jsp文件,因此会出现错误。我不认为我会使用它,但知道这个信息还是不错的。 - Basil Musa
让他们的URI以/static/resources开头,然后在if语句中添加额外的检查。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接