SpringMVC_7-① 视图解析

forword

forword前缀指定一个转发操作

@RequestMapping("/hello")
	public String helloHander() {
		//现要求index.jsp发起请求后,经此方法转发至WebContet下的hello.jsp;
		//若return "hello";会经过springmvc的配置文件springmvc2-servlet.xml里配置的前缀和后缀进行拼串:WebContent/WEB-INF/page/hello.jsp,找不到该页面
		//方法一:使用相对路径
		System.out.println("这是hello页面");
		return "../../hello";
	}
	
	//方法二:使用:forward:+路径
	/* forward: 转发到一个页面 
	 * /hello.jsp 转发到当前项目下的hello页面
	 * 注意:/一般必须加上,若不加上/就是相对路径,容易出错
	 * */
	@RequestMapping("/handle01")
	public String handle01() {
		System.out.println("handle01");
		return "forward:/hello.jsp";
	}
	
	/* 
	 * 	通过index页面的handle02请求转发至handle01
	 */
	@RequestMapping("/handle02")
	public String handle02() {
		System.out.println("handle02");
		return "forward:/handle01";
	}

redirect

redirect前缀指定重定向到页面

	/* 重定向到hello.jsp 
	 * 有前缀的转发和重定向操作,配置的视图解析器不会进行拼串
	 * 
	 * 转发:	forward:转发的路径
	 * 重定向	redirect:重定向路径
	 * 		/hello.jsp代表的是从当前项目下,springmvc会自动为该路径自动拼串上项目名
	 * 
	 * 		原生的Servlet重定向操作需要加上项目名(/项目名)
	 * 		response.sendRedirect("/hello.jsp")
	 * */
	
	@RequestMapping("/handle03")
	public String handle03() {
		System.out.println("重定向至hello");
		return "redirect:/hello.jsp";
	}

	/* 多次重定向
	 * handle04重定向--->handle03重定向--->hello.jsp
	 *  */
	@RequestMapping("/handle04")
	public String handle04() {
		System.out.println("这是多次重定向");
		return "redirect:/handle03";
	}

视图解析流程

在这里插入图片描述
1、视图解析源码分析:重要的两个接口:View、ViewReslover
2、视图和视图解析器

1)请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String, View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象,它包含了逻辑名和模型对象的视图
2)Spring MVC  借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是 Excel、JFreeChart 等各种表现形式的视图
3)对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重  点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦

3、视图

1)视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。
2)为了实现视图模型和具体实现技术的解耦,Spring 在 org.springframework.web.servlet包中定义了一个高度抽象的 View 接口:
3)视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全  的问题

在这里插入图片描述
4、常用的视图实现类
在这里插入图片描述
5、视图解析器
1)SpringMVC 为逻辑视图名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的 视图解析器实现类。
2)视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象。
3)所有的视图解析器都必须实现 ViewResolver 接口:
在这里插入图片描述
6、常用的视图解析器实现类
在这里插入图片描述
1)可以选择一种视图解析器或混用多种视图解析器
2)每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order越小优先级越高。
3)SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常
4)InternalResourceViewResolver
①JSP 是最常见的视图技术,可以使用 InternalResourceViewResolve 作为视图解析器:
在这里插入图片描述

JstlView(国际化)

1、导包导入了jstl的时候会自动创建为一个jstlView;可以快速方便的支持国际化功能;

taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar

2、可以支持快速国际化;
1)、javaWeb国际化步骤;

           1)、得得到一个Locale对象;
           2)、使用ResourceBundle绑定国际化资源文件;
           3)、使用ResourceBundle.getString("key");获取到国际化配置文件中的值;
           4)、web页面的国际化,fmt标签库来做;
                     <fmt:setLocale>
                     <fmt:setBundle >   
                     <fmt:message>                    

2)、有了JstlView以后;

①让Spring管理国际化资源就行

    <!--SpringMVC管理国际化资源文件;配置一个资源文件管理器  -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <!--  basename指定基础名-->
        <property name="basename" value="i18n"></property>
    </bean>

②直接去页面使用fmt:message;

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- <a>欢迎来到登录界面</a>
<form action="">
	用户名:<input/><br/>
	密码:<input/><br/>
	<input type="submit" value="登录"/> -->
<a>
<fmt:message key="welcomeinfo"></fmt:message>
</a>
<form action="">
	<fmt:message key="username"/><input/><br/>
	<fmt:message key="password"/><input/><br/>
	<input type="submit" value='<fmt:message key="loginbtn"/>'/>
</form>
</body>
</html>

i18n_en_US.properties

welcomeinfo=welcome to login page
username=USERNAME
password=PASSWORD
loginbtn=LOGIN

i18n_zh_CN.properties

welcomeinfo=w\u6B22\u8FCE\u6765\u5230\u767B\u5F55\u9875\u9762
username=\u7528\u6237\u540D
password=\u5BC6\u7801
loginbtn=\u767B\u5F55

在这里插入图片描述
在这里插入图片描述

一定要过SpringMVC的视图解析流程,springmvc会创建一个jstlView帮你快速国际化;
若是不经过视图解析流程,fmt:message/标签会出现异常
在这里插入图片描述

也不能写forward

forward:if (viewName.startsWith(FORWARD_URL_PREFIX)) {
            String forwardUrl = viewName.substring(FORWARD_URL_PREFIX.length());
            return new InternalResourceView(forwardUrl);
        }

这是因为创建视图对象的方法时,若前缀是forward,创建的视图对象是InternalResourceView,不带local(国际化)
在这里插入图片描述
若只是单纯的写一个方法,页面发起请求到另一个页面,且该方法内没有其他内容

<!-- 发送一个请求("toLoginPage"):直接来到web-inf下的login页面
	mvc名称空间下有一个请求映射标签mvc:view-controller
 -->
 <!-- path:指定哪个请求
 	  view-name:指定映射给那个视图
 	  通过mvc映射标签,使得该过程经过了springmvc的整个过程(视图解析过程)
 	  但是使用了该标签就会导致其他的请求不能正常使用
  -->
 <mvc:view-controller path="/toLoginPage" view-name="login"></mvc:view-controller>

<!-- 为了解决mvc:view-controller出现的问题,开启mvc注解驱动模式 -->
<mvc:annotation-driven></mvc:annotation-driven>

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

mango_bobo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值