2012-05-31 139 views
0

我不明白爲什麼我的servlet沒有被正確地映射。Servlet Url映射錯誤

這是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> 

這將產生:本地主機:8080/GestiuneSimpozioane/JSP /插入(因爲其中I發送數據的形式位於一個jsp文件夾) 相反,我需要:本地主機:8080/GestiuneSimpozioane /插入

我該如何修改映射? 謝謝!

回答

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>中也考慮到這一點。

0

你是什麼意思,「這就是它會產生」?

在表單中使用絕對路徑而不是相對路徑。您應該使用JSTL的<c:url>標籤自動地包含上下文等。