被调用的servlet的URL(新手)?

时间:2013-01-09 19:01:19

标签: jsp tomcat servlets

  

可能重复:
  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文件的表单操作中指定应用程序的名称似乎有些不对。有没有办法避免这种情况,或者有人可以向我解释为什么你应该这样做有意义?感谢。

2 个答案:

答案 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