0

我正在尝试创建一个 servlet,并且正在使用 Tomcat 7 。我在 webapps 文件夹中为我的应用程序添加了一个文件夹,它看起来像这样:

--[webapps]
    --[agtel]
        --[web-inf]
           --[classes]
              --add.class
           --web.xml
        --index.html

web.xml 包含:

  <servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>add</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
  </servlet-mapping>

index.html 包含:

<FORM METHOD=GET ACTION="/add">

当我按下提交按钮时,它会尝试访问:

http://localhost:8080/add

这会导致 404 错误。但如果我把它改成

http://localhost:8080/agtel/add

然后它当然会执行小程序

所以我尝试将 html 文件中的 URL 更改为

<FORM METHOD=GET ACTION="agtel/add">

但随后它尝试访问:

http://localhost:8080/agtel/agtel/add

为什么它现在两次添加名称?这非常令人困惑,让我发疯。

4

2 回答 2

2

当您在 HTML 中使用 URL 时,没有前导 / 它们是相对于当前 URL 的。与领先 / 他们是绝对的:

<FORM METHOD=GET ACTION="/agtel/add">

或者

<FORM METHOD=GET ACTION="add">

会做你想做的。

我建议您在动作路径中添加上下文动态示例(在 JSP 中):

<FORM METHOD=GET ACTION="${pageContext.request.contextPath}/add">

有了这个,您将永远不必更改路径,例如,如果您移动文件或复制代码。当然,您需要一个 index.jsp。

于 2013-05-20T19:58:28.843 回答
0

这就是所谓的“上下文”路径。如果您在同一个 Tomcat(或任何应用程序服务器)上运行多个应用程序,它会区分对它们的访问。当您将路径从“/add”更改为“add”(没有前导斜杠)时,它应该可以正常工作!

于 2013-05-20T19:58:22.733 回答