关于数据乱码问题
这个是个让人头疼的问题,在Java Web已经被折磨得体无完肤了,这里还有;这个使用spring自带的过滤器就可以解决了;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <filter> <filter-name>springFilter</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>springFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
|
与我们自己写的不同,这个我们是要配置一下他的编码;
1 2 3 4
| <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param>
|
说到底,这个过滤器就只有三个属性;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| public class CharacterEncodingFilter extends OncePerRequestFilter { @Nullable private String encoding; private boolean forceRequestEncoding; private boolean forceResponseEncoding;
public CharacterEncodingFilter() { this.forceRequestEncoding = false; this.forceResponseEncoding = false; }
public CharacterEncodingFilter(String encoding) { this(encoding, false); }
public CharacterEncodingFilter(String encoding, boolean forceEncoding) { this(encoding, forceEncoding, forceEncoding); }
public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding) { this.forceRequestEncoding = false; this.forceResponseEncoding = false; Assert.hasLength(encoding, "Encoding must not be empty"); this.encoding = encoding; this.forceRequestEncoding = forceRequestEncoding; this.forceResponseEncoding = forceResponseEncoding; }
public void setEncoding(@Nullable String encoding) { this.encoding = encoding; }
@Nullable public String getEncoding() { return this.encoding; }
public void setForceRequestEncoding(boolean forceRequestEncoding) { this.forceRequestEncoding = forceRequestEncoding; }
public boolean isForceRequestEncoding() { return this.forceRequestEncoding; }
public void setForceResponseEncoding(boolean forceResponseEncoding) { this.forceResponseEncoding = forceResponseEncoding; }
public boolean isForceResponseEncoding() { return this.forceResponseEncoding; }
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String encoding = this.getEncoding(); if (encoding != null) { if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) { request.setCharacterEncoding(encoding); }
if (this.isForceResponseEncoding()) { response.setCharacterEncoding(encoding); } }
filterChain.doFilter(request, response); } }
|
配置ForceEncoding的目的:
1 2 3 4
| public void setForceEncoding(boolean forceEncoding) { this.forceRequestEncoding = forceEncoding; this.forceResponseEncoding = forceEncoding; }
|
看了一下这个就是一般的过滤器;
还有一点,就是url-pattern*里面写的是/**的话它可以连着jsp也一起过滤;