【问题标题】:Servlet Url Mapping ErrorServlet URL 映射错误
【发布时间】:2012-05-31 18:36:40
【问题描述】:

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

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

【问题讨论】:

    标签: servlets


    【解决方案1】:

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

    <form action="insert">
    

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

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

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

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

    <form action="/GestiuneSimpozioane/insert">
    

    您也可以使用&lt;base&gt; 标记来实现此目的。另见this related answer

    如果您真的出于某种原因需要 servlet 来监听 /jsp/insert,那么只需相应地更改 &lt;url-pattern&gt;。不要忘记在 HTML &lt;form&gt; 中也考虑到这一点。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-20
        • 2017-09-21
        • 1970-01-01
        • 2017-01-18
        • 2018-11-24
        • 2011-07-09
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多