视图解析器(ViewResolver)
视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。
SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring WEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。程序员可以选择一种视图解析器或混用多种视图解析器。可以通过order属性指定解析器的优先顺序,order越小优先级越高,SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出ServletException异常。
界面跳转
- 经过视图解析器。根据return的值到springmvc-servlet.xml配置,经过视图解析器的拼接,组成一个新的URI地址,默认方法为转发。
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
-
不经过视图解析器直接跳转,转发:
return"forward:/***.jsp";
-
不经过视图解析器直接跳转,重定向:
return"redirect:/***.jsp";
转发和重定向的区别
区别 | 转发 | 重定向 |
---|---|---|
根目录 | 包含项目访问地址 | 没有项目访问地址 |
地址栏 | 不会发生变化 | 会发生变化 |
哪里跳转 | 服务器端进行的跳转 | 浏览器端进行的跳转 |
请区域中的数据 | 不会丢失 | 会丢失 |
request传递参数
- Servlet传统API
public String test(HttpServletRequest request) {
request.setAttribute("tag", "HttpServletRequest request");
return null;
}
- Map/ Model/ModelMap
public String test(Map map) {
map.put("tag", "Map map");
return null;
}
public String test(Model model) {
model.addAttribute("tag", "Model model");
return null;
}
public String test(ModelMap modelMap) {
modelMap.addAttribute("ModelMap modelMap");
return null;
}
**Session参数传递 **
- 传统方法HttpServletSession
public String test(HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("tag", "HttpServletRequest request");
return null;
}
- HttpSession 直接放置在参数上
public String test(HttpSession session) {
session.setAttribute("tag", "HttpServletRequest request");
return null;
}
session和cookie的区别
-
cookie数据存放在客户的浏览器上,session数据放在服务器上。
-
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
-
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
-
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
-
可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。