SpringMVC的响应介绍
问题:
在学习了SpringMVC的配置流程以及单元方法请求数据的获取后,我们可以
使用SpringMVC搭建一个项目,并声明单元方法来处理请求,在单元方法中
使用SpringMVC提供的方式来获取请求信息,然后根据功能需求,声明请求
处理的逻辑代码,进行请求的处理。当请求处理完成后,我们需要将此次请求的
处理结果响应给浏览器,以前我们是自己在Servlet中使用response对象来完成
响应的,那么在SpringMVC中如何响应请求的处理结果呢?
解决:
因为在使用了SpringMVC后,Servlet只有一个了,也就是DispatcherServlet
而DispatcherServlet又不是我们自己声明的,所以我们在外部声明单元方法,让
DispatcherServlet来根据请求调用,处理请求。也就说我们需要将请求处理的
相关代码声明在对应的单元方法中。既然这样,单元方法是由DispatcherServlet
来调用,需要在单元方法执行完毕后,告诉DispatcherServlet如何响应此次请求
的处理结果。也就说单元方法需要通过返回值来告诉DispatcherServlet,如何进 行请求的响应。
实现:
紧耦方式使用原生的response对象完成
使用SpringMVC的方式
使用Response对象完成响应
/*** * 使用response对象完成响应 * 1.单元方法的返回值类型设置void * 因为使用response对象在单元方法中直接对此次请求进行了响应,不再通过 * DispatcherServlet了,既然已经响应了,就不需要再给DispatcherServlet返回值了。 * 2. 在单元方法上声明HttpServletResponse形参,来接收 * 此次请求的response对象。 * 3.在单元方法中直接使用response对象完成响应 * 直接响应 * 请求转发 * 重定向 */ @RequestMapping("resp") public void demoResp(String uname,Integer age,HttpServletRequest req,HttpServletResponse response) throws IOException, ServletException { //处理请求 System.out.println("MyControllerResp.demoResp:使用原生的response对象完成响应:"+uname+":"+age); //响应结果 response.setContentType("text/html;charset=utf-8"); //直接响应 //response.getWriter().write("直接响应"); //请求转发 //req.getRequestDispatcher("/index.jsp").forward(req,response); //重定向 response.sendRedirect(req.getContextPath()+"/redirect.jsp"); }
使用forward关键字完成响应
作用:实现请求转发
使用:通过单元方法的返回值来告诉DispatcherServlet请求转发指定的资源。
注意:如果是请求转发,forward关键字可以省略不写的。
代码示例:
请求转发jsp资源
请求转发其他的单元方法
使用redirect关键字完成响应
作用:完成资源的重定向
使用:通过单元方法的返回值来告诉DispatcherServlet重定向指定的资源。
代码示例:
重定向到jsp资源
重定向到单元方法