在线等,各位大侠,包含中文的url 访问tomcat 无法访问

i飞猪 2009-04-02 04:46:43
正在做的项目中一功能,打开tomcat的运行的项目一个文件夹中 中文的名称的word文档 如:http://127.0.0.1:8088/hgjj_xsfx/uploadFile/statisticGazette/2008年国民经济和社会发展统计公报.doc 在IE打开。
问题主要是tomcat对中文路径的解码问题?
有一种非常简洁的方法是在tomcat中server.xml中的connector连接配置中加URIEncoding="UTF-8"、
useBodyEncodingForURI="true"两句就可以了。

但是我们有个‘牛人’愣是怕项目经理说服了‘说系统的配置最好不要改。’
求救了N多人,js的encodeURI、encodeURIComponent等方法和java类用了java.net.URLEncoder.encode(typeName,"utf-8")还有apache的commons的ecodec工具包中的方法也用到了。最终问题没有解决!
tomcat的底层对url路径的编码是iso-8859-1,我请求的路径中包含中文,该‘中文字符串’又是tomcat中 运行的项目 中 一个文件夹中的一个word文档名称。
该中文的word文档要通过IE访问的形式在IE中打开该word文档。
问题就是这样,谢谢各位大侠。


...全文
532 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyiyezi 2011-10-13
  • 打赏
  • 举报
回复
有什么问题可以Email我 fengyiyezi@126.com River
fengyiyezi 2011-10-13
  • 打赏
  • 举报
回复
我出现过这个问题,在网上一直找不到好的答案,后来终于解决了
现在跟大家说说
首先,我的需求是,在IE和Firefox上显示pdf文档,并且显示时pdf还有中文命名的
在网上查了一下,说改tomcat中server.xml中的encoding编码就可以了
其实,是不能完全解决的,比如你改成了utf-8,那么该pdf只能在firefox和谷歌浏览器中显示
改成gb2312,也只能在IE和360浏览器中显示(当然,我这里用的测试的浏览器都是比较高的版本,大家可以参看我的回复时间大概算一下我做测试的浏览器版本)
不能兼容IE和Firefox的原因也很简单,IE的编码格式默认是gb2312,而Firxfox的却是utf-8
所以,你可以在网站的后台将你需要显示的那个pdf的url进行编码,但是编码的时候也要注意
不要将整个url进行编码,因为在编码的时候,url里面如果包含“/”等内容,一样也会被编码掉
所以在编码时,你将中文部分选出来进行编码,(我的做法是,截取url,只将中文名字的pdf文档进行编码),之前的“/”和一些英文都不进行编码,在拼接起来发送到前台,再显示就可以了
(里面具体的代码我就不写了,稍微负责一点点的人,从网上查一下很快就可以解决的,Good luck)
点背 2011-05-02
  • 打赏
  • 举报
回复
你这个问题解决了吗?
ADF培训 2009-04-04
  • 打赏
  • 举报
回复
做改名,改成数字或英文,再做个映射看,然后打开的就是编码后的名称,不再是原名,
  • 打赏
  • 举报
回复
加个过滤器

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;
}
}



  <filter>
<filter-name>urlFilter</filter-name>
<filter-class>com.test.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>*.doc</url-pattern>
</filter-mapping>

i飞猪 2009-04-03
  • 打赏
  • 举报
回复
感觉以上两位,问题没有解决。
julyarrow 2009-04-02
  • 打赏
  • 举报
回复
换GBK试试
quanjinzhang 2009-04-02
  • 打赏
  • 举报
回复
两次encodeURI,在jsp里调用一次java.net.URLDecoder

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧