【SpringMVC】:静态资源

1、访问静态资源

在项目中我们可以需要用到 js 、css 和图片等静态资源,而在 SpringMVC 中我们请求静态资源时通常会报 404 错误。

在这里插入图片描述

这是为什么呢?因为在 SpringMVC 中的入口是 前端控制器DispatcherServlet,在 web.xml 中配置前端控制器时,我们通常的给url-pattern属性配置的是/,代表对所有的资源都进行过滤操作。所以在访问静态资源时,SpringMVC 进行了过滤操作,从而访问不到我们需要的静态资源。

在这里插入图片描述

当然对于这种情况,SpringMVC 也给出了两种解决办法:

  1. 指定放行的资源:告诉 SpringMVC 那些资源不需要你进行处理,通过在配置文件中添加配置项完成。
    <mvc:resources mapping="/js/**" location="/js/" />
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/image/**" location="/image/" />
    <mvc:resources mapping="/font/**" location="/font/" />
    <mvc:resources mapping="/fonts/**" location="/fonts/" />
    
  2. 当访问静态资源时,SpringMVC 在 Controller 的方法中寻找匹配项,如果没有就将这个请求丢给 web容器配置的默认servlet(defaultServlet)进行处理。这种方式只需要写一条配置语句。
    <mvc:default-servlet-handler/>
    

2、中文乱码

想要避免中文乱码文件,肯定需要统一编码方式,从页面到后端再到数据库都需要统一编码方式,这样才能避免乱码。

  1. 页面编码:
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    
  2. URL中的乱码:修改 Tomcat 中 server.xml 文件中Connector,加上一个 URIEncoding="utf-8"在这里插入图片描述
  3. 配置过滤器,指定所有请求的编码:配置 Spring 的编码过滤器,为了防止Spring 中 post 方式提交的时候中文乱码通过在web.xml文件配置。
    <filter>
       <filter-name>CharacterEncodingFilter</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
       </init-param>
       <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
       </init-param>
    </filter>
    <filter-mapping>
       <filter-name>CharacterEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  4. 在连接数据库时指定编码格式: jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=UTF-8

3、类型转换器

3.1、内置的类型转换器

在 SpringMVC 框架中,对于常用的数据类型 SpringMVC 框架有许多内置的类型转换器用于完成常用的类型转换。SpringMVC 框架的类型转换是通过 Converter<S,T> 实现的,这里 S 表示源类型,T 表示目标类型。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换。

3.2、自定义类型转换器

虽然 SpringMVC 提供了很多内置的类型转换器,但是在开发过程中难免遇到不能满足需求的时候,所以我们还可以根据具体需求去自定义一个类型转换器。我们可以通过实现 Converter<S,T> 接口来完成类型转换器的定义:

public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = format.parse(source);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

在定义完成之后,我们还需要在配置文件种配置转换器:

<!-- 配置转换器,这是一个转换器的服务工厂,将所有的转换器全部放在工厂内 -->
<bean id="converterService"  class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
         <list>
             <!-- 自定义转换器 -->
             <bean class="com.itheima.converter.DateConverter"/>
             <!-- 还可以添加更多的自定义转换器 -->
         </list>
    </property>
</bean>

<!-- 在配置完转换器的服务工厂之后,我们还要告诉 SpringMVC 我们使用服务工厂 -->
<mvc:annotation-driven conversion-service="converterService"/>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值