1

在尝试制作一个简单的 webservlet 时偶然发现了这个问题:如果我使用包含 /../ 的名称,它将找不到资源。

这就是我所拥有的作品:

控制器.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 的文件夹结构,还是不可能?

4

1 回答 1

1

这是由您在<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">

也可以看看:

于 2013-09-24T17:29:08.483 回答