一、静态资源的使用
在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>