在JSP中使用@WebServlet url模式注释进行映射

时间:2013-09-24 17:25:24

标签: jsp servlets

当试图使一个简单的webservlet偶然发现这个问题时:如果我使用包含/../的名称,它将无法找到该资源。

这就是我的工作:

Controller.java

@WebServlet(urlPatterns = {"/Controller"})
public class Controller extends HttpServlet{ ... }

JSP页面:

<form action="Controller">
...
</form>

但是,我尝试将名称指定为文件夹,以便更有条理地工作。这是我挣扎的代码,它不起作用:

@WebServlet(urlPatterns = {"/servletController/Controller"})
public class Controller extends HttpServlet{ ... }

JSP页:

<form action="/servletController/Controller">
...
</form>

我尝试了很多变化。所以我的问题是,如何正确使用带有urlPatters-annotation的文件夹结构,还是只是不可能?

1 个答案:

答案 0 :(得分:0)

它是由您在<form action>中指定的前导斜杠引起的。它使指定的URL域相对。即如您在浏览器的地址栏中所看到的那样,它相对于URL中的域根解析,而不是在浏览器的地址栏中看到URL中当前请求的路径(文件夹)。

想象一下,您的JSP是由

打开的
http://localhost:8080/contextname/some.jsp

,因此URL中包含文件夹/contextname。您提交的表单操作将提交到

http://localhost:8080/servletController/Controller

虽然servlet与您的映射实际位于以下URL:

http://localhost:8080/contextname/servletController/Controller

相应地修复表单操作以使其成为路径相对而不是域相对:

<form action="servletController/Controller">

或者,通过指定有效的域相对URL:

<form action="/contextpath/servletController/Controller">

或者,如果您担心上下文路径的动态性,而不是硬编码:

<form action="${pageContext.request.contextPath}/servletController/Controller">

另见: