SpringMVC入门第二天
一、SpringMVC中响应数据的返回值
1.响应返回字符串:
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp
@RequestMapping("/testReturnString")
public String testReturnString() {
System.out.println("AccountController 的 testReturnString 方法执行了。。。。");
return "success"; }
2.返回值是void:
/**
* @Description: 返回值是void
*/
@RequestMapping("/testVoid")
public void testVoid(Model model){
System.out.println("testVoid方法执行了");
}
如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。(使用请求转发或者重定向就能解决这个问题)
使用请求转发或者重定向跳转到指定的页面:
/**
* @Description: 返回值是void
* 请求转发是一次请求,不用编写项目的名称
* 重定向的两次请求,需要写项目的名称。不能访问WEB-INF目录下的文件。
*/
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid方法执行了");
//编写请求转发的程序
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
//重定向(等于重新发了一个请求)
//response.sendRedirect(request.getContextPath()+"/index.jsp");
//设置中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//直接进行响应
response.getWriter().print("你好");
return;
}
注意事项:
1)手动调用请求转发,不会执行spring配置好的视图解析器,所以就需要自己编写完整的目录。
2)当转发完成后,会自动执行后面的代码,如果不想继续执行后面的代码,可以写一个return。
3.返回值是ModelAndView对象
ModelAndView对象是SpringMVC提供的一个对象,和返回字符串是类似的,基本上都是通过视图解析器帮我们跳转到我们想要跳转的页面,返回字符串的底层其实就是返回ModelAndView对象的方式。
/**
* @Description: 返回值是ModelAndView
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(Model model){
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView方法执行了");
//模拟从数据库中查询出User对象
User user = new User();
user.setUsername("安逸");
user.setPassword("123");
user.setAge(30);
//把user对象存储到mv对象中,也会把user对象存入到request域对象中。
mv.addObject("user", user);
//跳转到哪个页面
mv.setViewName("success");
return mv;
}
二、SpringMVC框架提供的转发和重定向
1.forward请求转发:
controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。
/**
* @Description: 使用关键字的形式进行转发或者重定向
*/
@RequestMapping("/testForward")
public String testForward(){
System.out.println("testForward方法执行了");
return "forward:/WEB-INF/pages/success.jsp";
}
}
2.redirect重定向:
contrller 方法提供了一个 String 类型返回值之后,它需要在返回值里使用:redirect:
/**
* @Description: 使用关键字Redirect进行重定向
*/
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect方法执行了");
return "redirect:index.jsp";
}
三、ResponseBody注解响应json数据
1.作用:
该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端
2.先要导入进行异步请求的资源文件jquery.min.js
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截
<!--告诉前端控制器,哪些静态资源不拦截-->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->