我无法弄清楚为什么我的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
我该如何修改映射? 谢谢!
答案 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>
中也考虑到这一点。