问题:tomcat下访问http://localhost:8080/PvStore/upload/QQ音乐 3.5.4.14_9.apk 出现404 找不到文件错误
原因: tomcat对URL请求的get方法默认使用的编码是 ISO-8859-1,所有其中的中文无法识别
解决方法1: 在server.xml中类似如下配置(添加红色字体):
<Connector port="8080" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
方法1原理:修改了tomcat对url请求的默认编码为utf-8,能正确识别中文
方法二:添加Filter(选择器)
web.xml中配置:
<filter>
<filter-name>urlFilter</filter-name>
<filter-class>com.yxq.toolsbean.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>*.apk</url-pattern>
</filter-mapping>
然后创建UrlFilter.java
package com.yxq.toolsbean;
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)) {
chain.doFilter(req, res);
return;
}
ch = ch.substring(request.getContextPath().length());
config.getServletContext().getRequestDispatcher(ch).forward(req, res);
}
@Override
public void destroy() {
config = null;
}
}
方法二原理:web.xml对URL中请求的apk的文件进行了编码设置,设置为utf-8。
希望对大家有帮助,谢谢。