笔记32 SpringMVC中使用静态资源、处理中文乱码

一、静态资源的使用

在WebConfig.java中有如下代码段

1 @Override // 配置静态资源处理
2     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
3         // TODO Auto-generated method stub
4         configurer.enable();
5     }

此时会注册一个默认的Handler:DefaultServletHttpRequestHandler,这个Handler也是用来处理静态文件的,它会尝试映射/*。当DispatcherServelt映射/时(/ 和/* 是有区别的),并且没有找到合适的Handler来处理请求时,就会交给DefaultServletHttpRequestHandler 来处理。注意:这里的静态资源是放置在web根目录下,而非WEB-INF 下。 
  可能这里的描述有点不好懂(我自己也这么觉得),所以简单举个例子,例如:在webroot目录下有一个图片:1.png 我们知道Servelt规范中web根目录(webroot)下的文件可以直接访问的,但是由于DispatcherServlet配置了映射路径是:/ ,它几乎把所有的请求都拦截了,从而导致1.png 访问不到,这时注册一个DefaultServletHttpRequestHandler就可以解决这个问题。其实可以理解为DispatcherServlet破坏了Servlet的一个特性(根目录下的文件可以直接访问),DefaultServletHttpRequestHandler是帮助回归这个特性的。

问: //* 有什么区别? 
答: /会拦截除了jsp以外的所有url,/* 会拦截所有url,包括jsp。例如:在webroot下面有一个test.jsp,当DispatcherServlet 配置映射/ 时,浏览器输入:http://localhost:8083/test.jsp 这个jsp是可以直接访问的,并且不经过DispatcherServlet ,而当DispatcherServlet 配置映射/* 时,这个请求就会被DispatcherServlet 拦截。

使用JSTL标签:

<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>

<img src="<s:url value="/resources/profile/images/profile_img.png" />" >  使用对应目录下的图片,同理使用其他静态资源类似。

二、处理中文乱码——表单提交controller获得中文参数后乱码解决方案

注意:  jsp页面编码设置为UTF-8

1.form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<form action="${ctx}/user/addUser" name="userForm" method="post">    

2.修改web.xml,增加编码过滤器,如下(注意,需要设置forceEncoding参数值为true) web.xml在WEB-INF目录下

<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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

猜你喜欢

转载自www.cnblogs.com/lyj-gyq/p/9003148.html
今日推荐