com.cy.filter.UrlFilter:
package com.cy.filter; import java.io.IOException; import java.net.URLDecoder; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class UrlFilter implements Filter{ public final static String DEFAULT_URI_ENCODE = "UTF-8"; private FilterConfig config = null; private String encode = null; @Override public void init(FilterConfig config) throws ServletException { this.config = config; this.encode = config.getInitParameter("DEFAULT_URI_ENCODE"); if(this.encode == null){ this.encode = DEFAULT_URI_ENCODE; } } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String uri = request.getRequestURI(); String ch = URLDecoder.decode(uri, encode); if(uri.equals(ch)){ //如果url中没有中文的话 chain.doFilter(req, res); return; } //url中如果含有中文 ch = ch.substring(request.getContextPath().length()); config.getServletContext().getRequestDispatcher(ch).forward(req, res); } @Override public void destroy() { this.config = null; } }
web.xml中的配置:
<!-- 中文路径 --> <filter> <filter-name>urlFilter</filter-name> <filter-class>com.cy.filter.UrlFilter</filter-class> <init-param> <param-name>DEFAULT_URI_ENCODE</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>urlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="resources/js/jquery.min.js"></script> <title>index</title> <style type="text/css"> </style> </head> <body> <p>hello index</p> <div> <img src="resources/images/觅心射手.png" /> </div> </body> <script type="text/javascript"> </script> </html>
访问index首页,可以正确的看到中文的图片。