ric*_*ver 29 model-view-controller spring tiles
我要做的是将请求映射到servlet根目录(正确的术语?).我正处于将URL映射到正确视图的位置,但无法找到作为页面一部分的所有静态内容--css,javascript,images.
所以在我的web.xml中,我的servlet标签看起来像这样
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样:
@RequestMapping("/shop")
public class TheShopController extends MyBaseController {
public static String VIEW = "Tile.Shop";
@Override
@RequestMapping(method = RequestMethod.GET)
protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav = new ModelAndView(VIEW);
return mav;
}
}
Run Code Online (Sandbox Code Playgroud)
MyBaseController非常简单.它看起来像这样:
public abstract class MyBaseController extends AbstractController {
protected Logger log = Logger.getLogger(getClass());
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp)
throws Exception {
ModelAndView mav = processRequest(req, resp);
return mav;
}
protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}
Run Code Online (Sandbox Code Playgroud)
我在视图层中使用Tiles.我的配置如下:
/WEB-INF/tiles-defs.xml
正如我所提到的,找到了视图,但找不到作为页面端口的静态资源.这是一些典型的退出:
2010-01-24 17:25:01,777 DEBUG [http-8080-7] servlet.DispatcherServlet(DispatcherServlet.java:690) - 名为'springapp'的DispatcherServlet处理[/springapp/static/css/account.css的GET请求] 2010-01-24 17:25:01,778 WARN [http-8080-4] servlet.DispatcherServlet(DispatcherServlet.java:962) - 找不到带URI的HTTP请求的映射[/springapp/static/css/shop.css]在名为'springapp'的DispatcherServlet中2010-01-24 17:25:01,778 DEBUG [http-8080-6] servlet.FrameworkServlet(FrameworkServlet.java:677) - 已成功完成请求2010-01-24 17:25:01,778 WARN [http-8080-5] servlet.DispatcherServlet(DispatcherServlet.java:962) - 在DispatcherServlet中找不到带有URI [/springapp/static/css/offers.css]的HTTP请求的映射,名称为"springapp"2010-01-24 17:25:01,778 WARN [http-8080-3] servlet.DispatcherServlet(DispatcherServlet.java:962) - 在DispatcherServlet中找不到带有URI [/springapp/static/css/scrollable-buttons.css]的HTTP请求的映射名称"SPRI ngapp"
转到 http:// localhost:8080/springapp/shop工作正常,但缺少css和图像.
我认为使用Tiles在某种程度上使事情变得复杂但我不愿意摆脱它.我想知道我是否需要调整我的视图分辨率配置需要以某种方式调整?链接视图解析器可能吗?我只是不是那样的这样做经验丰富.
axt*_*avt 61
问题是对静态内容的请求转到dispatcherServlet,因为它被映射为<url-pattern>/</url-pattern>.在具有"RESTful"URL的应用程序中(即DispatcherServlet映射中没有任何前缀),这是一个非常常见的问题.
有几种方法可以解决此问题:
既然Spring 3.x中访问静态资源的首选方法是使用<mvc:resources>:
web.xml:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
Spring配置:
<!-- Handles GET requests for /resources/** by efficiently serving static content
in the ${webappRoot}/resources dir -->
<mvc:resources mapping="/resources/**" location="/resources/" />
Run Code Online (Sandbox Code Playgroud)
另请参见Spring 3中的MVC简化
1.使用URL重写过滤器
请参见此处的mvc-basic示例
2.为defaultservlet 设置前缀:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
也就是说,请求/static/images/image.png将返回名为的文件/images/image.png
但是,这种方式在不同的servlet容器之间是不兼容的(在Jetty中不起作用),请参阅此处的变通方法
3.为defaultservlet 设置静态内容扩展:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
4.不要使用RESTful URL,使用带前缀的URL:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
5.不要使用RESTful URL,使用带扩展名的URL:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
有没有人考虑使用这个:
<!-- Allows for mapping the DispatcherServlet to "/" by forwarding static resource requests to the container's default Servlet -->
<mvc:default-servlet-handler/>
Run Code Online (Sandbox Code Playgroud)
以下是最新的春季文档:http: //static.springsource.org/spring/docs/3.1.2.RELEASE/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-default-servlet -handler
| 归档时间: |
|
| 查看次数: |
58324 次 |
| 最近记录: |