重庆建设岗位培训网站,移动互联网开发应聘,健康生活网站开发系统背景,wordpress微信公众号采集插件五、域对象共享数据0、三个域对象范围request#xff1a;一次请求 第1#xff5e;6都是向request共享session#xff1a;一次会话#xff08;浏览器开启到浏览器关闭#xff0c;与服务器关闭无关#xff0c;session有钝化和活化操作#xff0c;可以持久化数据#xff0…五、域对象共享数据0、三个域对象范围request一次请求 第16都是向request共享session一次会话浏览器开启到浏览器关闭与服务器关闭无关session有钝化和活化操作可以持久化数据servletContext整个应用的范围服务器开启到服务器关闭1、使用ServletAPI向request域对象共享数据RequestMapping(/testServletAPI)
public String testServletAPI(HttpServletRequest request){request.setAttribute(testScope, hello,servletAPI);return success;
}request域内数据获取方式p th:text${testRequestScope}/p2、使用ModelAndView向request域对象共享数据这个很重要因为从源码中看不过你用的1-6哪一种方式最终都是封装到modelAndView里面去RequestMapping(/testModelAndView)
public ModelAndView testModelAndView(){/*** ModelAndView有Model和View的功能* Model主要用于向请求域共享数据* View主要用于设置视图实现页面跳转*/ModelAndView mav new ModelAndView();//向请求域共享数据mav.addObject(testScope, hello,ModelAndView);//设置视图实现页面跳转mav.setViewName(success);return mav;
}3、使用Model向request域对象共享数据RequestMapping(/testModel)
public String testModel(Model model){model.addAttribute(testScope, hello,Model);return success;
}4、使用map向request域对象共享数据RequestMapping(/testMap)
public String testMap(MapString, Object map){map.put(testScope, hello,Map);return success;
}5、使用ModelMap向request域对象共享数据RequestMapping(/testModelMap)
public String testModelMap(ModelMap modelMap){modelMap.addAttribute(testScope, hello,ModelMap);return success;
}6、Model、ModelMap、Map的关系Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的继承关系如下图public interface Model{}
public class ModelMap extends LinkedHashMapString, Object {}
public class ExtendedModelMap extends ModelMap implements Model {}
public class BindingAwareModelMap extends ExtendedModelMap {}7、控制器方法统一返回ModelAndView对象通过打断点的方式运行调试界面会有一个方法栈里面的方法直接或间接的调用了我们打断点的那一行代码在里面找到DispatcherServlet1061行mv ha.handle(processedRequest, response, mappedHandler.getHandler());8、向session域共享数据此处建议使用原生ServletAPI虽然SpringMVC提供了注解SessionAttribute,这个注解可以将共享在请求域的数据再共享一份到session中RequestMapping(/testSession)
public String testSession(HttpSession session){session.setAttribute(testSessionScope, hello,session);return success;
}获取session中数据
p th:text${session.testSessionScope}/p9、向application域共享数据RequestMapping(/testApplication)
public String testApplication(HttpSession session){ServletContext application session.getServletContext();application.setAttribute(testApplicationScope, hello,application);return success;
}获取servletContext中数据信息
p th:text${application.testApplicationScope}/p六、SpringMVC的视图SpringMVC中的视图是View接口视图的作用渲染数据将模型Model中的数据展示给用户SpringMVC视图的种类很多默认有转发视图和重定向视图当工程引入jstl的依赖转发视图会自动转换为JstlView若使用的视图技术为Thymeleaf在SpringMVC的配置文件中配置了Thymeleaf的视图解析器由此视图解析器解析之后所得到的是ThymeleafView1、ThymeleafView当控制器方法中所设置的视图名称没有任何前缀时此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析视图名称拼接视图前缀和视图后缀所得到的最终路径会通过转发的方式实现跳转RequestMapping(/testHello)
public String testHello(){return hello;
}2、转发视图SpringMVC中默认的转发视图是InternalResourceViewSpringMVC中创建转发视图的情况当控制器方法中所设置的视图名称以forward:为前缀时创建InternalResourceView视图此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析而是会将前缀forward:去掉剩余部分作为最终路径通过转发的方式实现跳转例如forward:/forward:/employeeRequestMapping(/testForward)
public String testForward(){return forward:/testHello;
}3、重定向视图SpringMVC中默认的重定向视图是RedirectView转发和重定向区别转发可以获取请求域的数据但是重定向不可以因为不是一次请求转发可以访问WEB-INF下面的资源但是重定向不可以获取因为安全性问题转发不能跨域但是重定向可以跨域当控制器方法中所设置的视图名称以redirect:为前缀时创建RedirectView视图此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析而是会将前缀redirect:去掉剩余部分作为最终路径通过重定向的方式实现跳转例如redirect:/redirect:/employeeRequestMapping(/testRedirect)
public String testRedirect(){return redirect:/testHello;
}注重定向视图在解析时会先将redirect:前缀去掉然后会判断剩余部分是否以/开头若是则会自动拼接上下文路径4、视图控制器view-controller当控制器方法中仅仅用来实现页面跳转即只需要设置视图名称时可以将处理器方法使用view-controller标签进行表示!--path设置处理的请求地址view-name设置请求地址所对应的视图名称
--
mvc:view-controller path/ view-nameindex/mvc:view-controllermvc:annotation-driven/注当SpringMVC中设置任何一个view-controller时其他控制器中的请求映射将全部失效此时需要在SpringMVC的核心配置文件中设置开启mvc注解驱动的标签mvc:annotation-driven /