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资源

重定向到单元方法

原文地址:https://www.cnblogs.com/vincentmax/p/14313655.html