tomcat6 打开中文资源的问题

chensjmail 2008-12-16 04:43:28
http://localhost:8080/ebook/中文说明.pdf

中文说明.pdf
在tomcat6的ebook的web目录下的,
也就是项目录 下的资源,
现在想直接点击链接打开,
但是因为中文名字的问题
因为文件名是由客户定义的所以这个问题还是会出现的,
...全文
1275 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qweasdcc 2012-03-16
  • 打赏
  • 举报
回复
那个过滤器怎么弄进去 ,不会 菜鸟求帮助
xue364348460 2011-01-27
  • 打赏
  • 举报
回复
我同样的神啊!现在这个问题我也遇到过,总不过把咱大好的中文换成数字或字母吧!汗!....高手哪里去了出来拯救一下吧!
huguoling1122 2010-12-24
  • 打赏
  • 举报
回复
我的神啊!现在这个问题我也遇到过,总不过把咱大好的中文换成数字或字母吧!汗!....高手哪里去了出来拯救一下吧!
  • 打赏
  • 举报
回复
在 2.2 那步,我点刷新按钮,然后地址栏上就没东西,变成 about:blank 了。
  • 打赏
  • 举报
回复
我好像不能重现你刷新的功能啊
chensjmail 2008-12-23
  • 打赏
  • 举报
回复
是这样的,
如果是"中文.jsp"
这样不管是刷新还是首次输入都没问题(或乱码).
如果是"中文.pdf"
首次输入没问题刷新就会有问题(或乱码).

String ch = URLDecoder.decode(uri, this.encode);
System.out.println("中文=" + ch); //A
String ch2 = URLDecoder.decode(uri, "ISO8859_1");
System.out.println("中文2=" + new String(ch2.getBytes("ISO8859_1"),"GBK"));//B

我在过虑器中加了这段代码试了一下乱码的问题就明白了,
但pdf我按刷新按钮后在没有出理乱码的时候还是无法再次正常显示.

说明:
两个中文文件名的资源:
中文.jsp
中文.pdf

1 中文.jsp
1.1在地址栏输入"http://localhost:8080/urlFilter/中文.jsp"
A位置输出正确的中文"中文=/urlFilter/中文.jsp"
B位置输出错误的中文"中文2=/urlFilter/涓枃.jsp"
1.2按刷新按钮得到的结果是相同的,都正确.

2 中文.pdf
2.1在地址栏输入"http://localhost:8080/urlFilter/中文.pdf"
A位置输出正确的中文"中文=/urlFilter/中文.pdf"
B位置输出错误的中文"中文2=/urlFilter/涓枃.pdf"
2.2按刷新按钮,
A位置输出正确的中文"中文=/urlFilter/????.pdf"
B位置输出错误的中文"中文2=/urlFilter/中文.pdf"

从上面的情况看,不是重编码的问题.

而应该是
IE提交编码设置问题,
页面编码设置的问题,

如果将," IE选项->高级->设置->发送 UTF-8 URL "复选框框去除,
以上说到的所有情况,就只有B位置输出正确了.

如果是这样,"发送 UTF-8 URL"保持为默认选中的状态,
那过虑器该怎么做才能确保正确的显示资源呢?

非常感谢.....




  • 打赏
  • 举报
回复
不客气,呵呵
chensjmail 2008-12-23
  • 打赏
  • 举报
回复
哦,我用IE6也和IE7一样,
这样的话那我和一个慢慢调试了,
非常感谢....
  • 打赏
  • 举报
回复
哦,这样啊,我用 Firefox 3, IE 6 也没出现这种情况啊
chensjmail 2008-12-23
  • 打赏
  • 举报
回复
我的不会出现这样的情况,
都是正常的,
我用的是IE7
  • 打赏
  • 举报
回复
我好像没碰到你说的这个问题啊,能说一下你是具体怎么操作的么?
chensjmail 2008-12-22
  • 打赏
  • 举报
回复
对不起,
也许不是过虑器的问题,
谢谢!
chensjmail 2008-12-22
  • 打赏
  • 举报
回复
再请教,
如查我显示后,
再按刷新,
就会乱码了(在过虑器内因为多次编码),
这样的话上面的过虑器要怎么改呢?
  • 打赏
  • 举报
回复
如果仅在 PDF 文件存在汉字的话,把过滤器的 url-pattern 改为 *.pdf 就行了,
这样的话上传上去的文件后缀必须改为小写的 .pdf
  • 打赏
  • 举报
回复
添加一个过滤器试试看:

package com.test;

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>/*</url-pattern>
</filter-mapping>
chensjmail 2008-12-18
  • 打赏
  • 举报
回复
我顶,难道这里面只有鸟么!。。。。。。。
chensjmail 2008-12-16
  • 打赏
  • 举报
回复
同名我们有了解决的办法,
现在就是要求直接打开中文文件名的资源
lanzhengwu 2008-12-16
  • 打赏
  • 举报
回复
客户上传的时候 ..让他定义一个名字,存在数据库中作为别名 .这个名字只供显示 ..
文件上传的时候真正的名字得改掉 .否则除了中文问题.还有同名问题出现 ..
聊天室模块使用说明书 配置源程序 将程序发布到Tomcat下 (1)在Tomcat安装路径下的webapps文件夹中创建一个chatroom文件夹,并将“源程序”文件夹下的全部内容(程序使用说明书.doc文件除外)拷贝到该文件夹中。 (2)本程序使用了JSTL 1.2包(jstl-api-1.2.jar、jstl-impl-1.2.jar),将其拷贝到Tomcat安装路径下的webapps\chatroom\WEB-INF\lib文件夹中。 (3)选择开始菜单中的“所有程序\Apache Tomcat 6.0\Monitor Tomcat”命令,这时在windows的系统托盘中会显示标识Tomcat服务器启动状态的图标,如果显示为,则说明Tomcat服务器没有启动,这时可以在该图标上单击鼠标右键在弹出的快捷菜单中选择“Start Service”菜单项启动Tomcat服务器,启动后将显示为。 (4)打开IE浏览器,在地址栏中输入http://localhost:8080/,进入“Tomcat软件管理”页面。 注意:8080为安装Tomcat时设置的端口号 。 (5)单击Tomcat Manager超链接,弹出“连接到 localhost”对话框。 (6)在用户名及密码处输入登录Tomcat的用户名和密码,单击【确定】按钮。 (7)进入“Tomcat应用程序管理”页面,在此页面中单击“chatroom”,进入本程序主页面,完成Tomcat配置。 将程序导入到Eclipse for Java EE中 (1)在Eclipse for Java EE中,创建一个“动态Web项目”,名称为chatroom,并且将Content directory文本框的值设置为WebRoot。 说明:在Eclipse for Java EE中创建项目的具体方法将参见本书第2章的2.5.5节。 (2)复制“源程序”文件夹中的src文件夹,然后在Eclipse for Java EE的“项目资源管理器”视图中,选中刚刚创建的项目chatroom的节点,并在该节点上单击鼠标右键,在弹出的快捷菜单中选择“粘贴”菜单项,将弹出如图1.1所示的对话框。 图1.1 弹出的“问题”对话框 (3)单击“全部为是”按钮,即可将光盘中的源文件导入到该项目中。 (4)由于本程序使用的是UTF-8编码,所以还需要将工作空间的编码设置为UTF-8编码,否则在包括中文的文件中,将产生乱码。 选择主菜单中的“窗口”/“首选项”,在打开的“首选框”窗口中,展开“常规”节点,并选中“工作空间”子节点,将显示如图1.2所示的页面。 图1.2 “工作空间”子节点 在右侧的“文本文件编码”区域中,选中“其他”单选按钮,这时,其右侧的下拉列表将转变为可用,在该下拉列表框中,选择“UTF-8”选项,如图1.3所示。 图1.3 选择“UTF-8”编码 单击“应用”按钮,然后再单击“确定”按钮即可。 (5)在“项目资源管理器”中选择项目名称节点,在工具栏上单击“”按钮中的黑三角,在弹出的快捷菜单中选择“运行方式”/“在服务器上运行”菜单项,将打开“在服务器上运行”对话框,在该对话框中,选中“将服务器设置为缺省值(请不要再询问)”复选框,其他采用默认,如图1.4所示。 图1.4 “在服务器上运行”对话框 (6)单击“完成”按钮,即可通过Tomcat运行该项目。

81,094

社区成员

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

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