我正在尝试创建一个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
为什么现在两次添加名称?这非常令人困惑,让我发疯。
答案 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”(无前导斜杠)时,它应该可以正常工作!