0%

spring mvc控制器映射

spring映射

简单的页面跳转

1
<a href="blog">blogs页面</a>
1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
@RequestMapping("/blog")
public class BlogController {
@RequestMapping(method=RequestMethod.GET)
public ModelAndView getBlogs(){
ModelAndView mav = new ModelAndView("blog/blogs");
//从数据库取得数据
List<Blog> blogs = blogDao.selectBlogs();
//将数据存在model里
mav.addObject("blogs",blogs);
return mav;
}
}
  • 超链接地址href要对应控制器的映射地址@RequestMapping("/blog"),这样才会调用映射的方法。
  • ModelAndView mav = new ModelAndView("blog/blogs")或者mav.setViewName("blog/blogs")都能用来设置显示 blog文件夹 下的blogs.jsp页面。

image

因为在dispatcher-servlet.xml中配置过视图解析器如下

1
2
3
4
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
  • InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象,
  • InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中
  • InternalResourceViewResolver会给它加上定义好的前缀和后缀,组成/WEB-INF/views/xxx.jsp的形式。如之前的例子,则是显示/WEB-INF/views/blog/blogs.jsp

重定向redirect

redirect 可以重定向到某个controller映射。

如下图,如果我要点击删除一条记录,然后再跳回这个页面。就需要用到请求重定向。

image

1
2
3
4
5
6
7
8
9
10
11
@RequestMapping(value = "delete/{id}",method = RequestMethod.GET)
public ModelAndView deleteBlog(@PathVariable int id){
ModelAndView mav = new ModelAndView();
//根据id从数据库删除对应数据
blogDao.deleteBlog(id);
//从数据库重新取数据
List<Blog> blogs = blogDao.selectBlogs();
//设置视图名称
mav.setViewName("redirect:/blog");
return mav.addObject("blogs",blogs);
}

因为我们需要返回到原来的页面,但是需要重新获取、显示数据,我们就不能只是简单的通过mav.setViewName("blog/blogs")显示这个视图,而是要调用映射到这个页面的方法,在通过这个方法获取数据,再显示到blogs.jsp页面上,也就是如下的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
@RequestMapping("/blog")
public class BlogController {
@RequestMapping(method=RequestMethod.GET)
public ModelAndView getBlogs(){
ModelAndView mav = new ModelAndView("blog/blogs");
//从数据库取得数据
List<Blog> blogs = blogDao.selectBlogs();
//将数据存在model里
mav.addObject("blogs",blogs);
return mav;
}
}

现在页面的URL是http://localhost:8080/myspring/blog,如果不使用redirect (即mav.setViewName("blog/blogs")) ,点击超链接,则URL变成http://localhost:8080/myspring/blog/delete/36,会显示没有映射的警告且不会有页面显示。

-------------本文结束 感谢您的阅读-------------