javaweb实训第五天下午——SpringMVC基础(4)

简介: 7.3.向页面传值传递数据就是Controller往前台(页面)传递数据;

javaweb实训第五天下午——SpringMVC基础(3)https://developer.aliyun.com/article/1415109

7.3.向页面传值

传递数据就是Controller往前台(页面)传递数据;

  1. 通过传统的HttpServletRequest传递;
  2. 通过ModelAndView对象传递;
  3. 通过Model对象传递;

7.3.1.通过传统的HttpServletRequest传递

//通过request对象进行数据传递(不建议使用)
@RequestMapping("/data03")
public void data03(HttpServletRequest request,HttpServletResponse response) 
      throws ServletException, IOException{
  request.setAttribute("name", "德克儿!");
  request.getRequestDispatcher("/WEB-INF/jsps/data.jsp").forward(request, response);
}

7.3.2.使用Model方式

//通过model对象进行数据传递
/**
 * SpringMVC会自动创建模型对象传到方法中,我们只需要往这个模型对象中添加数据即可
 * 返回值为字符串,我们可以理解为就是一个视图的名称(写路径即可)
 */
@RequestMapping("/data01")
public String data01(Model model){
  model.addAttribute("name","史密斯!");
  User u = new User();
  u.setName("张三x");
//添加模型数据,key的值为对象的类型首字母小写
  model.addAttribute(u);
  return "/WEB-INF/jsps/data.jsp";
}

7.3.3.通用ModelAndView对象传递

//通用ModelAndView方式
@RequestMapping("/data02")
public ModelAndView data02(){
  ModelAndView mdv = new ModelAndView();
  //设置数据到前台
  mdv.addObject("name", "约什!~");
  User u = new User();
  u.setName("张三");
  //添加模型数据,key的值为对象的类型首字母小写
  mdv.addObject(u);
  //视图名称(路径)
  mdv.setViewName("/WEB-INF/jsps/data.jsp");
  return mdv;
}


7.4.跳转方式

咱们学习的跳转方式有两种:重定向与请求转发

20210602152803704.png

7.4.1.请求转发:forward

  1. SpringMVC默认就是使用的是转发的方式进行跳转的。上面的案例都是转发,转发的值都是放到request请求作用域,下一个页面可以取出;
  1. Url地址栏中地址不会发生变化;
  2. SpringMVC中使用"forward:/uri"实现转发:
/**
 * 使用请求转发
 * @return
 */
@RequestMapping("/data05")
public String data5(Model model,HttpSession session){
  model.addAttribute("test","张三");//可以取出数据
  session.setAttribute("testsession", "张三session");//可以取出数据
  return "forward:/data.jsp";
}

7.4.2.请求重定向:redirect

  1. 重定向就是发出一个全新的请求:
      (1)如果把值放到request请求,下一个页面不能取出
      (2)如果把值放到session会话请求,下一个页面可以取出
  1. Url地址栏中地址会发生改变;
  2. SpringMVC中使用"redirect:/uri"即可实现重定向;
@RequestMapping("/data06")
public String data6(Model model,HttpSession session){
  model.addAttribute("test","张三");//不可以取出数据
  session.setAttribute("testsession", "张三session");//可以取出数据
  return "redirect:/data.jsp";
}

7.4.3.注意事项

1.在使用重定向和forward进行转发的时候,是不会经过视图解析器的(默认的转发会经过视图解析器),例如:

       20210602153001354.png                        

       20210602153004308.png                        


20210602153008750.png

8.课程总结

8.1.重点

  1. Controller的实现方式:普通类加注解;
  2. 请求匹配方式:/
  3. 接收请求参数:方法参数接收和对象接收;
  1. 向页面传值:通过Model对象实现;
  2. SpringMvc中的重定向和转发;
  3. 视图解析器的配置;

8.2.难点

  1. SpringMVC相关配置:静态资源访问,开启SppringMvc的注解,扫描包路径等;
  2. 视图解析器的配置;
  3. 控制器常用操作;

8.3.如何掌握

  1. 课上认真听课;
  2. 完成课后练习;
  3. 抓住课程重点;

8.4.排错技巧

  1. 通过异常和错误找出问题,分析问题,解决问题;
  2. 还原代码;
  3. 代码最小化;
  4. 断点;

9.常见问题

No mapping found for HTTP request with URI [/controller3.do] in DispatcherServlet with name ‘dispatcher’

分析:表示在当前spring的配置中没有找到处理/controller3.do的控制器,springmvc配置不对;

java.lang.ClassNotFoundException: org.springframework.aop.TargetSource

解决:添加aop的jar文件

HTTP Status 500 - Circular view path [param1]: would dispatch back to the current handler URL [/param1] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

  1. 分析:视图解析器配置出错
<!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsps/" />
  <property name="suffix" value=".jsp" />
</bean>

10.课后练习

  1. 课堂代码1-2遍;

11.面试题

Servlet什么时候被实例化?

答案:Servlet是单例,针对一个tomcat在内存里面只有一个实例。默认在第一次访问的时候实例化,也可以配置到tomcat启动的时候,需要配置:1;

SpringMVC前端控制器配置中"/“与”/*"区别?

SpringMVC与Struts2区别?

目前企业中使用SpringMVC的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMVC和Struts2进行各方面的比较:

 (1)SpringMVC使用Servlet作为核心控制器,Struts2使用过滤器作为核心控制器;

 (2)SpringMVC是spring中的一个模块,所以spring对于SpringMVC的控制器管理更加简单方便,而且提供了全注解方式进行管理,各种功能的注解都比较全面,使用简单;

(  3)学习难度:Struts有很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高。SpringMVC比较简单,和容易上手;

 (4)开发效率SpringMVC要比struts2高;

 (5)SpringMVC操作json比较简单,一个注解就可以实现;

 (6)struts2 好处:内置插件比较多;

12.扩展知识或课外阅读推荐(可选)

12.1.扩展知识

12.2.课外阅读

目录
相关文章
|
4天前
|
XML JSON JavaScript
javaweb实训第六天上午——JSON&SpringMVC进阶(1)
1.课程介绍 JSON; (了解) SpringMVC返回JSON; (掌握) SpringMVC文件上传、下载; (掌握) SpringMVC拦截器; (掌握) SpringMVC执行流程; (掌握) 2.JSON 2.1.JSON概述
58 0
|
4天前
|
前端开发 Java 应用服务中间件
|
4天前
|
开发框架 前端开发 Java
javaweb实训第五天下午——SpringMVC基础(1)
1.课程介绍 SpringMVC概述; (了解) SpringMVC入门; (掌握) 前端控制器配置; (掌握) 业务控制器的三种实现; (掌握) 全注解; (掌握) 控制器常用操作(接收数据,向页面传值,重定向转发); (掌握)
40 0
|
4天前
|
JSON 前端开发 Java
javaweb实训第六天上午——JSON&SpringMVC进阶(2)
5.SpringMVC拦截器 5.1.创建拦截器
57 0
|
4天前
|
JSON Java 数据格式
javaweb实训第五天下午——SpringMVC基础(3)
7.控制器常用操作 控制器除了处理请求并返回视图以外,还需要一些事情,比如接收页面请求参数、绑定数据到页面、返回json数据、文件上传、文件下载等;
32 0
|
XML 前端开发 JavaScript
【知识】了解Web、JavaWeb、SpringMVC、SpringBoot
【知识】了解Web、JavaWeb、SpringMVC、SpringBoot
184 0
|
存储 前端开发 Java
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
211 0
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
|
4天前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
4天前
|
Java Apache vr&ar
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
17 0