Servlet地址不正确

时间:2013-05-20 19:56:01

标签: java tomcat servlets

我正在尝试创建一个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

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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