Chr*_*son 5 spring-mvc url-rewriting
首先,如果这是重复的,我深表歉意。我做了很多搜索,但找不到太多,我怀疑我没有使用正确的术语......
我正在使用 Spring MVC 构建一个站点并使用注释驱动的配置。我想要做的是最后没有任何扩展名的网址(.html、.do 等)。所以它们看起来就像http://www.mysite.com/account/create我所知道的传统mod_rewrite上是在 Apache 上使用或使用没有扩展名的文件来完成的。似乎可以在不使用重写引擎的情况下完成(我知道 urlrewritefilter 项目),因为 Spring 支持从请求字符串中提取参数(请参阅文档的第 15.3.2.1 节),而宠物商店示例则没有t 似乎在其 url 末尾有扩展名。
但是,似乎每当我尝试将所有请求转发到调度程序 servlet 时(我的想法是如何否定类似的需求*.htm),我遇到了麻烦......我能够让它工作(使用 XML 配置,我最近切换到注释配置)只对所有页面使用标准的“*.htm”。
我的控制器代码看起来像
@Controller
@RequestMapping("/home")
public class HomeController {
...
@RequestMapping(method = RequestMethod.GET)
public ModelAndView get() {
...
}
Run Code Online (Sandbox Code Playgroud)
我的 web.xml 看起来像
<servlet>
<servlet-name>dispatch</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?这可能不使用重写引擎吗?
我应该注意,上述配置不起作用。它总是返回一个404错误...
使用诸如此类的 URL 模式/*通常是一个坏主意,因为容器会将所有内容转发到DispatcherServlet,包括对 JSP 的内部请求。所以,当你的控制器在返回JSP名称ModelAndView,它将被反馈到DispatcherServlet再次,给你404。
您要么需要在路径中保留文件扩展名,要么需要某种前缀来区分DispstcherServlet对 JSP 的请求和请求。
| 归档时间: |
|
| 查看次数: |
4302 次 |
| 最近记录: |