目录
- 前提
- 使用Response对象完成响应
- 使用forward关键字完成响应
- 使用redirect关键字完成响应
- SpringMVC中使用作用域对象完成数据的流转
-
- 作用域对象复习
- SpringMVC中使用作用域对象流转数据
-
- 使用request对象作为请求转发数据流转的载体
- 2.使用session对象作为同一个用户的不同请求的数据流转的载体
- 3.使用application对象作用项目公共数据的载体。
- SpringMVC的Model对象的使用
前提
我们已经知道了如何使用springmvc获取前端的数据
深度学习springMVC(二)SpringMVC中单元方法如何获取请求数据,5种方法(看不懂你打我)
那么获取到数据,处理完成,返回给用户什么呢?返回的数据格式是什么呢?
使用Response对象完成响应
代码语言:javascript复制 /***
* 使用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关键字可以省略不写的。
代码语言:javascript复制 /**
* 使用forward关键字完成请求转发jsp资源
* 使用:
* 通过单元方法的返回值,来告诉DispatcherServlet要请求转发的资源。
* 格式:
* return "forward:/jsp资源路径";
* 注意:
* 第一个/表示项目根目录
*/
@RequestMapping("forwardJsp")
public String demoForwardJsp(String uname,Integer age){
//处理请求
System.out.println("MyControllerResp.demoForwardJsp:forward关键字请求转发jsp:" uname ":" age);
//响应结果
return "forward:/index.jsp";
}
使用redirect关键字完成响应
作用:完成资源的重定向
使用:通过单元方法的返回值来告诉DispatcherServlet重定向指定的资源。
代码语言:javascript复制 /**
* redirect关键字重定向到jsp资源
* 使用:
* 在单元方法的返回值中使用redirect关键字告诉DispatcherServlet要重定向的jsp资源路径
* 注意:
* 第一个/表示项目根目录
*
*/
@RequestMapping("redirectJsp")
public String demoRedirectJsp(String uname,Integer age){
//处理请求
System.out.println("MyControllerResp.demoRedirectJsp:重定向到jsp资源:" uname ":" age);
//响应结果
return "redirect:/redirect.jsp";
}
/**
* redirect关键字重定向到单元方法
* 使用:
* 在单元方法的返回值中使用redirect关键字告诉DispatcherServlet要重定向的jsp资源路径
* 注意:
* 第一个/表示项目根目录
*
*/
@RequestMapping("redirectMethod")
public String demoRedirectMethod(String uname,Integer age){
//处理请求
System.out.println("MyControllerResp.demoRedirectMethod:重定向到单元方法:" uname ":" age);
//响应结果
return "redirect:/testMethod";
}
SpringMVC中使用作用域对象完成数据的流转
作用域对象复习
1.PageContext对象
作用域范围:当前jsp页面内有效
2.request对象
作用域范围:一次请求内。
作用: 解决了一次请求内的资源的数据共享问题
3.session对象
作用域范围:一次会话内有效。
说明:浏览器不关闭,并且后台的session不失效,在任意请求中都可以获取
到同一个session对象。
作用:解决了一个用户不同请求的数据共享问题。
4.application(ServletContext)对象
作用域范围:整个项目内有效。
特点:一个项目只有一个,在服务器启动的时候即完成初始化创建
无论如何获取都是同一个项目。
作用:解决了不同用户的数据共享问题。
SpringMVC中使用作用域对象流转数据
使用request对象作为请求转发数据流转的载体
注意:使用方式和原有Servlet中使用方式完全一致,只不过
现在需要在单元方法中来使用。
代码语言:javascript复制 //声明单元方法:使用request对象作为数据流转的载体
@RequestMapping("dataReq")
public String demoReq(HttpServletRequest request){
//处理请求
System.out.println("MyController.demoReq:使用request对象作为数据流转的载体");
//响应结果
request.setAttribute("str","我是request对象");
return "forward:/req.jsp";
}
2.使用session对象作为同一个用户的不同请求的数据流转的载体
注意:使用方式和原有Servlet中使用方式完全一致,只不过
现在需要在单元方法中来使用,在单元方法的形参上直接声明session即可。
代码语言:javascript复制 //声明单元方法:使用session对象作为数据流转的载体
@RequestMapping("dataSession")
public String demoSession(HttpSession session){
//处理请求
System.out.println("MyController.demoSession:使用session对象作为数据流转的载体");
//响应结果
session.setAttribute("str","我是session对象");
return "redirect:/session.jsp";
}
3.使用application对象作用项目公共数据的载体。
注意:application对象的获取,只能我们自己在单元方法中获取,不能
使用形参的方式,让DispatcherServlet帮我们获取。
代码语言:javascript复制 //声明单元方法:使用application对象作为数据流转的载体
@RequestMapping("dataApplication")
public String demoApplication(HttpServletRequest request){
//处理请求
System.out.println("MyController.demoApplication:使用application对象作为数据流转的载体");
//获取application对象
ServletContext servletContext=request.getServletContext();
//响应结果
servletContext.setAttribute("str","我是application对象");
return "redirect:/application.jsp";
}
SpringMVC的Model对象的使用
作用: 作为数据流转的载体,SpringMVC官方提供的一个对象。
使用在单元方法上声明Model类型的形参即可。
注意:Model对象是由DispatcherServlet创建并作为实参传递给单元方法使用
特点:
请求转发:
model对象中存储的数据,相当于存储到了request对象中
我们在jsp中直接按照request对象作用域取值的方式来获取数据即可。
重定向:
在重定向中,会将第一次请求中model对象的数据作为第二次请求的
请求数据携带,第一次请求的model对象销毁。只能携带基本类型的数据。
代码示例:
请求转发中使用Model对象作为数据流转的载体
代码语言:javascript复制 //声明单元方法:请求转发中使用model作为数据流转的载体
@RequestMapping("dataModel")
public String demoModel(Model model){
//处理请求
System.out.println("MyController.demoModel:请求转发中使用Model对象作为数据流转的载体");
//响应结果
model.addAttribute("str","我是model对象--请求转发");
return "forward:/model.jsp";
}
//声明单元方法:请求转发中使用model作为数据流转的载体
@RequestMapping("dataModel2")
public String demoModel2(Model model){
//处理请求
System.out.println("MyController.demoModel2:重定向中使用Model对象作为数据流转的载体");
//响应结果
model.addAttribute("str","我是model对象--重定向");
return "redirect:/model.jsp";
}