JSP中的Spring MVC请求URL

Sno*_*irl 20 html spring spring-mvc contextpath

我正在使用Spring MVC编写Web应用程序.我正在使用控制器的注释等.一切都工作正常,除了它涉及应用程序中的实际链接(表单操作,<a>标签等)当前,我有这个(显然缩写):

//In the controller
@RequestMapping(value="/admin/listPeople", method=RequestMethod.GET)

//In the JSP
<a href="/admin/listPeople">Go to People List</a>
Run Code Online (Sandbox Code Playgroud)

当我直接输入"http:// localhost:8080/MyApp/admin/listPeople"这样的URL时,页面会正确加载.但是,上面的链接不起作用.它丢失了应用程序名称"MyApp".

有谁知道是否有办法配置Spring在那里抛出应用程序名称?

如果您需要查看我的任何Spring配置,请告诉我.我正在使用带有视图解析器等的标准调度程序servlet.

cra*_*man 46

您需要在链接之前添加上下文路径.

// somewhere on the top of your JSP
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

...
<a href="${contextPath}/admin/listPeople">Go to People List</a>
Run Code Online (Sandbox Code Playgroud)

  • 没有"Spring"方法这样做:)只有保存你将$ {contextPath}添加到你的链接的选项就是你以root用户身份部署应用程序,这样它的上下文路径就是"/"(正如Kevin所描述的那样) ; 但我不建议这种方法,因为它会使您的应用程序依赖于其部署. (2认同)

Jas*_*man 13

c:url标签将上下文路径追加到您的网址.例如:

<c:url value="/admin/listPeople"/>
Run Code Online (Sandbox Code Playgroud)

或者,我更喜欢在我的Spring MVC应用程序中尽可能多地使用相对URL.因此,如果页面处于/MyApp/index,链接<a href="admin/listPeople">将带我到listPeople页面.

如果您更深入了解URL层次结构,这也适用.您可以使用它..来遍历一个级别.所以在页面上/MyApp/admin/people/aPerson,使用<a href="../listPeople">将返回列表页面


sin*_*pop 6

我更喜欢使用BASE标签:

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />
Run Code Online (Sandbox Code Playgroud)

然后,您的所有链接都可以是:

<a href="admin/listPeople">Go to People List</a>
Run Code Online (Sandbox Code Playgroud)