可能重复:
How to use relative paths without including the context root name?
在我的Tomcat webapps目录中,我有一个上下文app,它在WEB-INFO / classes目录中包含一个名为test的树,下面有一堆类文件。 app还包含一个html文件,其目的是收集用户输入,然后调用classes / test目录中的一个servlet来生成HTML输出。描述servlet的web.xml如下:
<servlet>
<servlet-name>foo</servlet-name>
<servlet-class>test.DoIt</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>foo</servlet-name>
<url-pattern>/doit</url-pattern>
</servlet-mapping>
html文件的正文是
<FORM ACTION="/app/doit">
First Parameter: <INPUT TYPE="TEXT" NAME="param1">
<CENTER><INPUT TYPE="SUBMIT"></CENTER>
</FORM>
这一切都有效。但是,在html文件的表单操作中指定应用程序的名称似乎有些不对。有没有办法避免这种情况,或者有人可以向我解释为什么你应该这样做有意义?感谢。
答案 0 :(得分:0)
如果你受到纪律处分,你就不必这样做。想象一下拥有/app/form.html
和/app/doit
servlet。从浏览器的角度来看,它们位于同一个文件夹中,您可以简单地说:
<FORM ACTION="doit">
当然,相对路径也有效,例如使用/app/pages/form.html
和/app/servlets/doit
,您可以说:
<FORM ACTION="../servlets/doit">
答案 1 :(得分:0)
如果您正在使用JSP页面,则Core JSTL的<c:url>
标记会自动将部署上下文添加到任何绝对URL。所以你可以安全地写:
<FORM ACTION="<c:url value="/doit"/>">
action
属性中生成的网址将为 / app / doit 。