为什么点击连接后不能打开服务器上含有中文的文件? 为什么点击连接后不能打开服务器上含有中文的文件? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我采用的开发环境是:Apache 6.0, URIencoding是gb2312MYSQL4.1, default-character-set=gb2312,default-character-set=gb2312在显示的页面的部分代码是:<%@ page contentType="text/html; charset=GB2312" %><%@ page import="com.citic.javabean.SearchFileResult"%><%@ page language="java" import="com.citic.constant.*" %><%@ page import="java.net.URLEncoder"%>......<tr> <td><a href="#" onmouseover="javascript:showFileInformation('<%=i%>');" onmouseout="javascript:hideFileInformation('<%=i%>');" onclick="window.open('<%=searchFileResult.getFilepath()%>')"><em><u><%=searchFileResult.getFilename()%></u></em></a></td> </tr>这样点击连接后,浏览器的URL位置出现的是:http://localhost:8080/filesearch/doc/监管制度/2011/假币上缴清单.doc但页面却提示:type Status reportmessage /filesearch/doc/%E7%9B%91%E7%AE%A1%E5%88%B6%E5%BA%A6/2011/%E5%81%87%E5%B8%81%E4%B8%8A%E7%BC%B4%E6%B8%85%E5%8D%95.docdescription The requested resource (/filesearch/doc/%E7%9B%91%E7%AE%A1%E5%88%B6%E5%BA%A6/2011/%E5%81%87%E5%B8%81%E4%B8%8A%E7%BC%B4%E6%B8%85%E5%8D%95.doc) is not available.请问这是为什么呢? 我应该如何解决??谢谢. 乱码问题吧.以下为复制过来的.让Tomcat支持中文路径名和中文文件名 Tomcat是Java开发者使用得较多的一个Web服务器,因为它占用资源小,运行速度快等特点,深受Java Web程序员的喜爱。不过,在使用中,由于Java中的中文问题的存在,如果不经过配置,在WEB程序中,不能直接支持具有中文文件名的文件的下载,这为Java Web程序的开发带来一定的不便。本文拟介绍一种手段,解决这个问题。 解决问题的核心在于修改Tomcat的配置,在Server.xml文件中添加一个名为URIEncoding的属性,它用于对HTTP请求中的get方法传过来的URL进行编码。如果直接从Apache站点中下载Tomcat,无论是安装版的exe文件,还是解压缩的ZIP文件,内置的对于get协议中的URL编码都是ISO-8859-1,这个字符集不能直接支持中文等双字节的信息,而中文文件的下载链接恰恰是通过get协议进行的。以下说明修改Tomcat安装目录中的config文件夹中的server.xml文件的方法。 打开config/server.xml文件,如果没有修改过这个文件,应该可以在其中找到如下代码: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 这段代码规定了Tomcat监听HTTP请求的端口号等信息,可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat不再以ISO-8859-1的编码处理get请求。更改后的代码如下所示(红色部分为新添加的代码): <Connector port="8080" URIEncoding="utf-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 下面,我们准备测试一下更改后的效果。 最为简单的测试方法就是让Tomcat自己列出WEB程序中的目录和文件,默认情况下,Tomcat不会直接列出WEB程序目录中的文件和文件夹,但是,我们可以修改位于安装目录中的config文件夹中的web.xml,使其能够支持自动列出WEB程序中的目录和文件。 在config/web.xml文件中找到如下代码: <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 将上面的代码中标为红色的部分改为如下内容: <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> 即将参数listings的属性改为true,就可让Tomcat自动列出某个WEB程序目录中的文件和文件夹。 现在,我们的设置已经完成,将修改的文件保存后,就可以启动Tomcat进行测验了,当然,如果Tomcat正在运行,则需要重新启动,以便配置生效。 现在,可以在Tomcat安装目录中的webapps目录中建立一个名为cntest的文件夹,作为测试的web程序的上下文路径(注意:对于WEB程序的上下文路径,请不要使用中文)。请在cntest中添加一些中文目录和文件,然后在浏览器中打开该WEB程序,如,http://localhost:8080/cntest,测验一下效果吧。当然,也可以在JSP或HTML文件中使用那些包含中文的文件夹或文件名的超级链接。 说明:以上修改均使用Tomcat5.5做的测试,在5.5以上都应该可以,至于5.0和4.x,我没有实验过,不过对于5.0应该也是可以的,但4.x不能保证(4.x在处理HTTP的get和post方法和5.x不大一样)。 我修改了server.xml的URIEncoding属性, 可惜新的问题又出现了:<a href="#" onclick="javascript:window.location='/<%=WebAppConstants.PROJECT_NAME %>/FrontControllerServlet?action=SearchFile&page=<%=currentPage-1%>&keyword=<%=URLEncoder.encode(searchKeyword)%>&searchMethod=<%=searchMethod%>&filecategory=<%=URLEncoder.encode(searchCategory)%>&fileid=<%=URLEncoder.encode(searchId)%>&filevest=<%=URLEncoder.encode(searchVest)%>&fileyear=<%=searchYear%>'"><font color="black">上一页</font></a>我在连接中使用URLEncoder.encode(String),它默认以Apache的URIEncoding(修改后为UTF-8)来encode中文字符,但在我的FrontController中,我是使用了request.setCharacterEncoding为GB2312,这样就得到了???的乱码 request.setCharacterEncoding为GB2312,全部用UTF-8规范编码吧 你的页面设置成<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>使用UTF-8如果是Tomcat的话: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="utf-8" redirectPort="8443" />已经测试通过 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><jsp:directive.page import="java.net.URLEncoder"/><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <a href="中文路径/中文.doc">aaaaaaaaaaaaaa</a> </body></html> 我把目前的开发环境改为:1. MySQL的配置文件my.ini:default-character-set=gb2312 [[mysql]]default-character-set=gb2312 [mysqld]2. MySQL数据表(fileinfo,username)的编码:GB2312 (CHARACTER SET gb2312 COLLATE gb2312_chinese_ci)3. Apache的server.xml:URIEncoding="utf-8"<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/><Connector URIEncoding="utf-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>4. WebAppConstants.javaENCODING:GB2312JSP页面还是使用<%@ page contentType="text/html; charset=GB2312" %>,不使用URLEncoder,而是使用javascript来提交表单(之前使用URLEncoder也是为了提交表单),这样的话我的应用就可以在地址栏访问到含有中文的服务器文件.另外如果把Apache的server.xml的URIEncoding改为gb2312的话,就不能在地址栏访问含有中文的服务器文件了,这个大家有什么建议呢? 是不是说把所有的编码设置都改为utf-8,包括JSP页面,APACHE的server.xml的URIEncoding,MYSQL的my.ini都改为utf-8,这样就可以在地址栏上访问APACHE服务器上含有中文的文件?? 还有一个问题,就是为什么在Apache中,它不支持URLEncoder.encode(String,"GB2312")这个方法的呢?它只能支持URLEncoder.encode(Str)?? 新手求教关于c:if标签 JSP 用 jar文件 求验证规则!!! 请问有谁会JSF的,请帮一下忙,谢谢! 各位大哥,请帮帮小弟,一个JSP开发的问题 用javabean封装mysql数据库连接的问题!!请教!!!! 如何使用JSP设计页面接收/发送邮件的系统?邮件系统是exchange2003 tomcat已经成功配置,请问自己编的jsp放到哪里怎么访问 关于连接池的配置 如何在提交的url中指定编码? jsp中对数据库的操作 spring注入
Apache 6.0, URIencoding是gb2312
MYSQL4.1, default-character-set=gb2312,default-character-set=gb2312在显示的页面的部分代码是:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="com.citic.javabean.SearchFileResult"%>
<%@ page language="java" import="com.citic.constant.*" %>
<%@ page import="java.net.URLEncoder"%>
......
<tr>
<td><a href="#" onmouseover="javascript:showFileInformation('<%=i%>');" onmouseout="javascript:hideFileInformation('<%=i%>');" onclick="window.open('<%=searchFileResult.getFilepath()%>')"><em><u><%=searchFileResult.getFilename()%></u></em></a></td>
</tr>这样点击连接后,浏览器的URL位置出现的是:http://localhost:8080/filesearch/doc/监管制度/2011/假币上缴清单.doc
但页面却提示:
type Status reportmessage /filesearch/doc/%E7%9B%91%E7%AE%A1%E5%88%B6%E5%BA%A6/2011/%E5%81%87%E5%B8%81%E4%B8%8A%E7%BC%B4%E6%B8%85%E5%8D%95.docdescription The requested resource (/filesearch/doc/%E7%9B%91%E7%AE%A1%E5%88%B6%E5%BA%A6/2011/%E5%81%87%E5%B8%81%E4%B8%8A%E7%BC%B4%E6%B8%85%E5%8D%95.doc) is not available.
请问这是为什么呢? 我应该如何解决??谢谢.
Tomcat是Java开发者使用得较多的一个Web服务器,因为它占用资源小,运行速度快等特点,深受Java Web程序员的喜爱。不过,在使用中,由于Java中的中文问题的存在,如果不经过配置,在WEB程序中,不能直接支持具有中文文件名的文件的下载,这为Java Web程序的开发带来一定的不便。本文拟介绍一种手段,解决这个问题。 解决问题的核心在于修改Tomcat的配置,在Server.xml文件中添加一个名为URIEncoding的属性,它用于对HTTP请求中的get方法传过来的URL进行编码。如果直接从Apache站点中下载Tomcat,无论是安装版的exe文件,还是解压缩的ZIP文件,内置的对于get协议中的URL编码都是ISO-8859-1,这个字符集不能直接支持中文等双字节的信息,而中文文件的下载链接恰恰是通过get协议进行的。以下说明修改Tomcat安装目录中的config文件夹中的server.xml文件的方法。 打开config/server.xml文件,如果没有修改过这个文件,应该可以在其中找到如下代码:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这段代码规定了Tomcat监听HTTP请求的端口号等信息,可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat不再以ISO-8859-1的编码处理get请求。更改后的代码如下所示(红色部分为新添加的代码):
<Connector port="8080"
URIEncoding="utf-8"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
下面,我们准备测试一下更改后的效果。 最为简单的测试方法就是让Tomcat自己列出WEB程序中的目录和文件,默认情况下,Tomcat不会直接列出WEB程序目录中的文件和文件夹,但是,我们可以修改位于安装目录中的config文件夹中的web.xml,使其能够支持自动列出WEB程序中的目录和文件。
在config/web.xml文件中找到如下代码:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
将上面的代码中标为红色的部分改为如下内容:
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
即将参数listings的属性改为true,就可让Tomcat自动列出某个WEB程序目录中的文件和文件夹。 现在,我们的设置已经完成,将修改的文件保存后,就可以启动Tomcat进行测验了,当然,如果Tomcat正在运行,则需要重新启动,以便配置生效。 现在,可以在Tomcat安装目录中的webapps目录中建立一个名为cntest的文件夹,作为测试的web程序的上下文路径(注意:对于WEB程序的上下文路径,请不要使用中文)。请在cntest中添加一些中文目录和文件,然后在浏览器中打开该WEB程序,如,http://localhost:8080/cntest,测验一下效果吧。当然,也可以在JSP或HTML文件中使用那些包含中文的文件夹或文件名的超级链接。 说明:以上修改均使用Tomcat5.5做的测试,在5.5以上都应该可以,至于5.0和4.x,我没有实验过,不过对于5.0应该也是可以的,但4.x不能保证(4.x在处理HTTP的get和post方法和5.x不大一样)。
<a href="#" onclick="javascript:window.location='/<%=WebAppConstants.PROJECT_NAME %>/FrontControllerServlet?action=SearchFile&page=<%=currentPage-1%>&keyword=<%=URLEncoder.encode(searchKeyword)%>&searchMethod=<%=searchMethod%>&filecategory=<%=URLEncoder.encode(searchCategory)%>&fileid=<%=URLEncoder.encode(searchId)%>&filevest=<%=URLEncoder.encode(searchVest)%>&fileyear=<%=searchYear%>'"><font color="black">上一页</font></a>我在连接中使用URLEncoder.encode(String),它默认以Apache的URIEncoding(修改后为UTF-8)来encode中文字符,但在我的FrontController中,我是使用了request.setCharacterEncoding为GB2312,这样就得到了???的乱码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
使用UTF-8如果是Tomcat的话:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" URIEncoding="utf-8" redirectPort="8443" />
已经测试通过
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:directive.page import="java.net.URLEncoder"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="中文路径/中文.doc">aaaaaaaaaaaaaa</a>
</body>
</html>
1. MySQL的配置文件my.ini:
default-character-set=gb2312 [[mysql]]
default-character-set=gb2312 [mysqld]2. MySQL数据表(fileinfo,username)的编码:GB2312 (CHARACTER SET gb2312 COLLATE gb2312_chinese_ci)3. Apache的server.xml:URIEncoding="utf-8"
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector URIEncoding="utf-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>4. WebAppConstants.java
ENCODING:GB2312JSP页面还是使用<%@ page contentType="text/html; charset=GB2312" %>,不使用URLEncoder,而是使用javascript来提交表单(之前使用URLEncoder也是为了提交表单),这样的话我的应用就可以在地址栏访问到含有中文的服务器文件.另外如果把Apache的server.xml的URIEncoding改为gb2312的话,就不能在地址栏访问含有中文的服务器文件了,这个大家有什么建议呢?