0

我无法弄清楚为什么我的 servlet 没有正确映射。

这是 web.xml 的一部分:

<servlet>
  <servlet-name>InsertServlet</servlet-name>
  <servlet-class>servlets.InsertServlet</servlet-class> 
</servlet> 

<servlet-mapping>
   <servlet-name>InsertServlet</servlet-name>
   <url-pattern>/insert</url-pattern> 
</servlet-mapping>

这将生成:localhost:8080/GestiuneSimpozioane/jsp/insert(因为我发送数据的表单位于 jsp 文件夹中)相反,我需要:localhost:8080/GestiuneSimpozioane/insert

我该如何修改映射?谢谢!

4

2 回答 2

0

你是什​​么意思,“这就是它会产生的”?

在表单中使用绝对路径,而不是相对路径。您也应该使用 JSTL 的<c:url>标签来自动包含上下文等。

于 2012-05-31T18:44:30.427 回答
0

您的问题不在 servlet 映射中。您的问题是您如何在 HTML 表单中指定 servlet URL。鉴于您使用过的症状

<form action="insert">

HTML 中的相对 URL(即不以 scheme 或 a 开头/的 URL)将相对于请求的 HTML 页面的 URL(如浏览器地址栏中显示的那样)进行解析。在您的情况下,这显然在/jsp子文件夹中。然后,浏览器当然会解释/jsp文件夹中的 URL。

您需要指定一个域相对 URL。

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

${pageContext.request.contextPath}动态打印上下文路径,因此在您的情况下,HTML 将按如下方式生成:

<form action="/GestiuneSimpozioane/insert">

您也可以使用<base>标签实现此目的。另请参阅此相关答案

如果您出于某种原因确实需要 servlet 来监听/jsp/insert,那么只需<url-pattern>相应地更改即可。不要忘记在 HTML 中也考虑到这<form>一点。

于 2012-05-31T18:49:57.580 回答