springmvc配置视图解析器和重定向
为什么需要配置视图解析器
看图
配置步骤
第一步:需要在springmvc.xml配置
<!-- 配置SpringMVC的视图解析器: 配置前缀和后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置视图跳转的前缀 --> <property name="prefix" value="/WEB-INF/view/"/> <!-- 配置视图跳转的后缀 --> <property name="suffix" value=".jsp"/> </bean>
第二步:配置视图解析器后的controller代码 Controller方法返回字符串表示逻辑视图名,通过视图解析器解析为物理视图地址。 此时默认的物理视图地址为:视图前缀+返回值+视图后缀
/* * 方法返回ModelAndView 方式 * ModelAndView * Model : 模型,数据 * View :视图 * 将需要共享的数据也跳转的视图封装到ModelAndView对象中,方法直接返回即可 * * 默认只能使用请求转发 */ @RequestMapping("/method2") public ModelAndView method2() { ModelAndView mv = new ModelAndView(); //共享数据 mv.addObject("username", "莉莉"); //设置视图地址 //配置视图解析器前后缀之前 //mv.setViewName("/WEB-INF/view/hello.jsp"); //配置视图解析器前后缀之后 mv.setViewName("hello"); return mv; } /* * 方法返回String 字符串方式 * * 方法返回的字符就是要跳转的地址 * * 在方法中注入一个Model 对象,在Model中共享数据 * * 默认使用请求转发 */ @RequestMapping("/method3") public String method3(Model m) { System.out.println(m.getClass().getName()); //共享数据 m.addAttribute("username", "吉姆"); //配置视图解析器前后缀之前 //return "/WEB-INF/view/response.jsp"; //配置视图解析器前后缀之后 return "response"; }
解决配置视图解析器带来的问题
如果直接使用视图解析器的配置开发,那么必须保证视图解析器前缀目录下面有对应的页面文件才能跳转,否则报错
默认页面跳转也只能使用请求转发跳转,不能使用重定向
需要解决问题: 除了使用视图解析器对应规则的开发,用户还得自定义跳转方式,和自定义跳转页面 方案: 使用视图解析器的 请求转发和重定向配置,可以打破默认的规则
public static final String REDIRECT_URL_PREFIX = "redirect:"; public static final String FORWARD_URL_PREFIX = "forward:";
/* * * 问题1:上述两种方法默认只能进行请求转发跳转,如何进行重定向跳转? * 问题2: 跳转的页面永远只能按照视图解析的前后缀路径放,如何页面放在其他目录下面也能跳转 * * 解决方案:使用视图解析器中自定义的页面跳转功能(使用这种,只适用返回String字符串的方式) * 在返回的字符串前面加上前缀 * 重定向 * redired:跳转的页面 * 请求转发 * forward:要跳转的页面 * * */ //自定义请求转发页面(打破默认的视图解析器前后缀规则跳转的页面) @RequestMapping("/method4") public String method4(Model m) { m.addAttribute("username", "韩梅梅"); return "forward:/WEB-INF/user_list.jsp"; }
重定向
//自定义重定向 @RequestMapping("/method5") public String method5() { return "redirect:http://www.jd.com"; }
配置多个视图解析器
springmvc
<!-- jsp --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="viewNames" value="*"/> <!-- 模板优先级别 --> <property name="order" value="1"></property> </bean> <!-- html --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/html/" /> <property name="suffix" value=".html" /> <property name="viewNames" value="html*"/> <!-- 模板优先级别 --> <property name="order" value="0"></property> </bean>
controller
@Controller @Scope("prototype") @RequestMapping("/viewResolver") public class ViewResolverController { @RequestMapping("/t1") public String t1() { return "index";// webinfo/jsp/index } @RequestMapping("/t2") public String t2() { return "htmlindex";// webinfo/html/index } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_43472934/article/details/108565490