我正在尝试创建一个Spring MVC应用程序,我的web.xml中有多个调度程序servlet,如下所示:
<servlet>
<servlet-name>one-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:appServlet/one-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>one-servlet</servlet-name>
<url-pattern>/one/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>two-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:appServlet/two-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webapp-servlet</servlet-name>
<url-pattern>/two/*</url-pattern>
</servlet-mapping>
除了一件事,一切正常 我在我的jsp文件中使用的URL如下:
<c:url value="/user" />
不返回调度程序servlet的映射,我的意思是我需要一个像这个myapp/one/user
这样的url来使用来自one-servlet的控制器,但我得到的url是myapp/user
是否有可能将调度程序servlet映射附加到我的URL而不在jsp文件中对其进行硬编码?
答案 0 :(得分:0)
你必须重新思考你在做什么。当您明确地将web.xml中的多个 DispatcherServlet
映射到特定URL时,该映射是本地部分或URL的一部分。 <c:url>
或<spring:url>
都可以添加servlet上下文部分,但servlet前缀是webapplication的一部分,没有人会猜到它。毕竟,你应该有一个从servlet 1服务的页面到servlet 2服务的页面的链接,所有这些仍然在同一个servlet上下文中。
恕我直言,您应该知道为什么在一个Spring MVC应用程序中需要多个DispatcherServlet
,这是相当不常见的。你会发现很多教程和例子(只是google ...),我所知道的只使用一个DispatcherServlet
编辑:
如果你真的想这样做(但实际问题确实需要吗?),你可以使用一个拦截器,它会在所有请求中放入一个包含servlet路径的属性。您在每个servlet应用程序上下文中声明一个拦截器bean,并为其设置servlet路径。拦截器看起来像:
public class PathInterceptor implements WebRequestInterceptor {
private String servletPath = "";
private String fullPath;
@Override
public void preHandle(WebRequest request) throws Exception {
}
@Override
public void postHandle(WebRequest request, ModelMap model) throws Exception {
if (fullPath == null) {
fullPath = request.getContextPath() + servletPath;
}
model.addAttribute("servletPath", fullPath);
}
@Override
public void afterCompletion(WebRequest request, Exception ex) throws Exception {
}
public void setServletPath(String servletPath) {
if (servletPath.startsWith("/")) {
this.servletPath = servletPath;
}
else {
this.servletPath = "/" + servletPath;
}
fullPath = null;
}
}
在JSP中,您使用:${servletPath}/user