SpringMVC - 视图解析器 - 国际化 - 转发方式 - 处理静态资源

视图和视图解析器

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

视图

视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客 户。
• 为了实现视图模型和具体实现技术的解耦,Spring 在org.springframework.web.servlet 包中定义了一个高度抽象的 View

视图的顶级接口:View
视图解析器:ViewResolver

常见的视图和解析器
Internal Resource View,Internal Resource View Resolve
接口:
在这里插入图片描述
视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题
在这里插入图片描述
在这里插入图片描述

	<!-- 配置视图解析器 为 controller 中返回中的字段 添加前缀 和 后缀-->
	<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value = "/view/"></property>
		<property name="suffix" value= ".jsp"></property>
	</bean>

国际化

springMVC解析jsp时 会默认使用internalResourceView,如果发现jsp中包含jstl语言,则自动转成子类
JstlView 可以解析jstl实现国际化操作

国际化:针对不同地区,不同国家,进行不同显示
具体实现国际化的步骤:

1.创建资源文件

常见资源文件命名

在这里插入图片描述

基名_语言_地区.properties
一般会有一个基名.properties,当在指定资源文件中没有找到键值对,就会去这个文件中找

i18n_zh_CH.properties
resource.welcome = 你好
resource.exit = 退出

i18n_en_US.properties

resource.welcome = WELCOME
resource.exit = EXIT
2.配置springMVC.xml,加载资源文件
    <!-- 加载国际化资源文件 \
    1.将ResourceBundleMessageSource在程序加载时 加入springMVC:会自动查找id = “MessageSource”的bean 如果有则自动加载
    2.如果配置了ResourceBundleMessageSource,则该类会在程序响应时介入
    -->
    <bean id = "messageSource" class = "org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value = "i18n"></property>
    </bean>

3.通过jstl使用国际化

引入标签库

<%@ taglib uri ="http://java.sun.com/jsp/jstl/fmt" prefix = "fmt" %>
。。。
<body>
<c:message key = "resource.welcome"></c:message>
<c:message key = "resource.exit"></c:message>
</body>

使用时不能直接访问国际化页面
ResourceBundleMessageSource会在springMVC响应程序时 介入(解析国际化资源文件)

跳转:

默认:index.jsp ->Controller -> success,jsp

如果要用springMVC实现index.jsp -> successs.jsp
<mvc:view-controller path = "view/welcome" view-name = "success"/>
<mvc:view-controller path="fmt" view-name = "fmt"/>

如果只有mvc标签:会让所有的请求 转入mvc:...中匹配映射地址,而忽略所有的@RequestMapping();
要想标签与控制器共存则需要加入一个注解

    <mvc:view-controller path="fmt" view-name = "fmt"/>
    
    <!-- 此配置时SpringMVC的基础配置,很多功能都需要通过该注解来协调 -->
    <mvc:annotation-driven></mvc:annotation-driven>
控制器转发方式:

一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理

• 如果返回的字符串中带 forward: 或 redirect: 前缀 时,SpringMVC 会对他们进行特殊处理:将 forward: 和
redirect: 当成指示符,其后的字符串作为 URL 来处理 – redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作
– forward:success.jsp:会完成一个到 success.jsp 的转发操作

默认时请求转发(地址栏不变)

可以通过加前缀指定转发方式(forward: redirect:)

        return "forward:/view/ModelAndView.jsp";
        return "redirect:/view/ModelAndView.jsp";

需要注意 此种方式,不会被视图解析器加上前缀(/view),后缀(.jsp)

处理静态资源:

若将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕获WEB 容器的所有请求,包括静态资源的请求, SpringMVC 会将他们当成一个普通请求处理,因找不到对应处理器将导致错误。

在springMVC中如果直接访问静态资源:404
原因:之前将所有的请求通过 通配符“/”拦截,进而交给分发器处理,去匹配所有的@RequestMapping
解决:需要springMVC处理的;交给@RequestMapping处理;如果不需要springMVC处理的,则使用tomcat默认的servlet处理
sevlet:如果有对应的对应的请求拦截,则交给对应的Servlet处理,如果没有对用的请求拦截,则直接访问

tomcat默认的Servlet在哪里?tomcat配置文件\conf\web.xml中(org.apache.catalina.servlets.DefaultServlet)

实现:只需要增加一个配置即可

    <!-- 使用默认Servlet去访问静态资源 -->
    <mvc:default-servlet-handler/>

需要有 <mvc:annotation-driven></mvc:annotation-driven>配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的springmvc-config.xml配置文件的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.example.controller"/> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 配置静态资源处理 --> <mvc:resources mapping="/static/**" location="/static/"/> <!-- 配置RequestMappingHandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <!-- 配置RequestMappingHandlerMapping --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> </beans> ```

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值