Servlet URL映射错误

时间:2012-05-31 18:36:41

标签: servlets

我无法弄清楚为什么我的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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

<form action="insert">

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

您需要指定域相对URL。

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

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

<form action="/GestiuneSimpozioane/insert">

您也可以使用<base>标记来实现此目的。另请参阅this related answer

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