【SpringMVC】视图和解析器
请求处理方法执行完成后,最终返回一个ModelAndView对象,对于返回String,View或ModelMap等类型的处理
方法,SpringMvc也会在内部将它们装配成一个ModelAndView对象的,它包含了逻辑名和模型对象的视图。
SpringMvc借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可能是JSP,也可能是
Excel等各种表现形式的视图。对于最终采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器的工作重
点聚焦在生产模型数据的工作上,从而实现MVC的充分解耦。
视图(View)的作用是渲染模型数据,将模型数据里的数据以某种形式呈现给客户,视图对象由视图解析器负责
实例化,由于视图是无状态的,所以它们不会有线程安全的问题。
一、JstlView
导入包
|
新建国际化资源文件
|
springmvc.xml中配置
<!-- 配置国际化资源文件 --> <beanid="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"> <propertyname="basename"value="i18n"></property> </bean> |
success.jsp
<fmt:messagekey="i18n.username"></fmt:message> <fmt:messagekey="i18n.password"></fmt:message> 结果:
|
二、访问静态资源
在springmvc.xml中配置标签 <mvc:view-controller path="/success" view-name="success"/> 此时访问http://localhost:8080/springmvc-1/success可以直接转发到success.jsp页面
可是问题上来了,点击其他正常的请求,结果导致404 解决方案: 添加一个注解标签 <mvc:annotation-driven></mvc:annotation-driven>
|
三、自定义视图
在springmvc中配置视图解析器
两个视图解析器,使用时,根据优先级来决定优先使用 在InternalResourceViewResolver中,默认order为最大,所以优先级最低
jsp: <ahref="springmvc/testView">Test View</a> <br> 控制器: @RequestMapping("/testView") public String testView(){ System.out.println("testView"); return"helloView"; } 视图: @Component publicclass HelloView implements View{ @Override public String getContentType() { return"text/html"; } @Override publicvoid render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { // 在这里输出视图内容 response.getWriter().print("hello view,time:"+new Date()); } } |
四、关于重定向
一般,控制器方法返回字符串类型的值会被当成逻辑视图处理
如果返回的字符串中带有forward:或者redirect:前缀时,SpringMVC会对他们进行特殊处理:将forward:和redirect:当成指示符,其后的字符串作为URL来处理
jsp: <a href="springmvc/testRedirect">Test Redirect</a>
控制器: @RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("testRedirect"); return"redirect:/index.jsp"; } 结果:回到index.jsp
|