尝试制作一个简单的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的文件夹结构,还是不可能?
这是由您在中指定的前导斜线引起的<form action>。它使指定的URL是域相对的。也就是说,它是相对于浏览器地址栏中显示的URL中的域根目录解析的,而不是相对于浏览器地址栏中显示的URL中当前请求的路径(文件夹)的解析关系。
<form action>
想象一下,您的JSP是通过以下方式打开的:
http:// localhost:8080 / contextname / some.jsp
因此,URL中就有文件夹/contextname。您将要提交的表单操作
/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">