在用 Spring mvc 写程序,配置 DispatcherServlet 拦截规则为拦截所有( <url-pattern>/</url-pattern> )时,应用程序首页的定义很有可能出问题,在项目中一般来说有如下几种解决办法.
- 在 webcontent 下定义一个首页. index.jsp 或者 index.html ,然后跳转到controller 处理.
这种情况下,通常会像如下这样处理
index.jsp mvc-dispatcher /
而在index.jsp 里面通常会这么写:
这样,就推跳转到 mycontroller/test 去处理。
方法 2:交给 spring mvc controller 去处理,不要配置默认首页
首先,不要配置首页, 必须设置成如下:
这样,web 服务器就知道,不需要他来处理,而是由应用程序自己来处理。这个时候,spring mvc 的 servlet 配置就起作用了,可以如下配置:
以上就是我参考的资料,我使用的是第二种方法,不过我不是写在配置文件中,而是直接写一个controller,然后mvc:view-controller不配置,这样也是可以的。
IndexController
package com.laolang.gongda.bookshop.web;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * 首页处理器,在访问首页时,做初始化工作,如初始化显示的类别 * * @author 小代码 * @version 1.0 * */@Controllerpublic class IndexController { Logger log = LoggerFactory.getLogger(IndexController.class); @RequestMapping(value = { "/" }, method = RequestMethod.HEAD, produces = "text/html") public String head() { return "index"; } /** * * @param model * @return */ @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET, produces = "text/html") public String index(Model model) { log.info("打开首页"); model.addAttribute("msg", "hello Maven!"); return "index"; }}
本地运行:
服务器运行: