javaweb实训第五天下午——SpringMVC基础(3)https://developer.aliyun.com/article/1415109
7.3.向页面传值
传递数据就是Controller往前台(页面)传递数据;
- 通过传统的HttpServletRequest传递;
- 通过ModelAndView对象传递;
- 通过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.跳转方式
咱们学习的跳转方式有两种:重定向与请求转发
7.4.1.请求转发:forward
- SpringMVC默认就是使用的是转发的方式进行跳转的。上面的案例都是转发,转发的值都是放到request请求作用域,下一个页面可以取出;
- Url地址栏中地址不会发生变化;
- 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)如果把值放到request请求,下一个页面不能取出
(2)如果把值放到session会话请求,下一个页面可以取出
- Url地址栏中地址会发生改变;
- 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进行转发的时候,是不会经过视图解析器的(默认的转发会经过视图解析器),例如:
8.课程总结
8.1.重点
- Controller的实现方式:普通类加注解;
- 请求匹配方式:/
- 接收请求参数:方法参数接收和对象接收;
- 向页面传值:通过Model对象实现;
- SpringMvc中的重定向和转发;
- 视图解析器的配置;
8.2.难点
- SpringMVC相关配置:静态资源访问,开启SppringMvc的注解,扫描包路径等;
- 视图解析器的配置;
- 控制器常用操作;
8.3.如何掌握
- 课上认真听课;
- 完成课后练习;
- 抓住课程重点;
8.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.)
- 分析:视图解析器配置出错
<!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsps/" /> <property name="suffix" value=".jsp" /> </bean>
10.课后练习
- 课堂代码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 好处:内置插件比较多;