我的应用程序中有以下结构
--Controller
|_ServletA
|_ServletB
--Webpages
|_Secure
|_PageA
|_PageB
|_PageC
现在应用程序从PageC开始,该页面发布到ServletB。ServletB转发到PageA。
现在从PageA点击一个指向ServletB的链接。 servletB做了一些工作并转发到PageB。在这个阶段,网址上的地址是http://localhost:8080/MyApp-war/Secure/PageB.jsp.
现在问题是PageB上的链接指向ServletB。链接是
<a href="ServletB">
因此,浏览器指向http://localhost:8080/MyApp-war/Secure/ServletB
这是错误的,因为它应该是http://localhost:8080/MyApp-war/ServletB
。
如何在不更改来自pageB的ServletB链接的情况下解决此问题,因为它在第一次尝试时工作正常,但是当相对地址更改时它会失败?
编辑:
简而言之,我想知道的是我应该在链接中放置什么
<a href="ServletB">
因此,如果相对地址为http://localhost:8080/MyApp-war/Secure/
,则其指向http://localhost:8080/MyApp-war/ServletB
而不是http://localhost:8080/MyApp-war/Secure/ServletB
,如果相对地址为http://localhost:8080/MyApp-war/
则将其带到同一位置{{ 1}}
答案 0 :(得分:1)
您需要在此处执行的操作是将Web应用程序的上下文路径添加到链接中。你可以做这样的事情;
这意味着,如果web.xml
中的servlet定义是这样的
<servlet>
<servlet-name>ServletB</servlet-name>
<servlet-class>com.myfullpackage.MyServletB</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletB</servlet-name>
<url-pattern>/ServletB</url-pattern>
</servlet-mapping>
你会做这样的事情
<a href='<%=request.getContextPath()%>/ServletB'>
或您使用表达式语言表单
<a href='${pageContext.request.contextPath}/ServletB'>
如果这可以解决您的问题,请告诉我。