日期:2014-05-18  浏览次数:20719 次

100分请教-jsp通过?传递参数的非常奇怪之问题
服务器:虚拟专用网,分配有公网地址。tomcat5.5。
  jsp页面上代码举例
  var url = "/test/abc.do?a="+"测试";
  document.location.href = url;
在这个服务器上使用ie访问本项目时没有问题。

但是,在公网上从远程访问本web项目时,上述代码的url中?后面的参数是字母就没有问题,
如果?后面的参数是中文,远程ie访问就会出错,设置断点跟踪发现,java程序的入口Dispather都没进去,
后来用escape(escape())进行包装也不行。

ie提示错误:此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示。
  有关 HTTP 错误的详细信息,请参阅帮助。

由于某些原因,此处必须要以?方式传递参数。
奇怪的就在于,为什么在服务器本地访问是没有问题的。

请大家帮忙解决啊!

------解决方案--------------------
var url = "/test/abc.do?a=<%=URLEncoder.encode("测试","UTF-8") %>";
试试
------解决方案--------------------
JScript code
var url = "/test/abc.do?a="+escape("测试");
location.href = url;

------解决方案--------------------
http://www.0451h.com
你可以在tomcat/conf/server.xml中配置以下就可以了,配置如下:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
useBodyEncodingForURI="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

就是加上 useBodyEncodingForURI="true"这句就可以了,祝你成功
------解决方案--------------------
顶:编码问题.
可以用form。也可以尝试下:request.setAttribute
request.getSession.setAttribute
放参数放在request或者session中传过去!
------解决方案--------------------
传递参数乱码问题
  
1 一般的页面传中文则要url编码

2 jsp中设置<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
接收参数的servelt 应该设置编码
request.setCharacterEncoding("utf-8") ;

3 可以用监听器filter 不过要配置

package filter ;
import javax.servlet.*;

public class CharsetFilter implements Filter{
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8") ;
response.setCharacterEncoding("utf-8") ;
chain.doFilter(request, response) ;
}
public void init(FilterConfig config) throws ServletException {
}
}
在web.xml中配置
<filter>
<filter-name>Charset</filter-name>
<filter-class>filter.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Charset</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
------解决方案--------------------
1、参数应该encode;
2、编码应该统一,建议统一为utf-8格式(包括tomcat的get方式);

------解决方案--------------------
换中思路也许是好的。
有好多方式可以得到参数。
如:
1.隐藏表单
2.URL重写(不可用,因为你要传的值是中文)
3.会话跟踪(session,cookie等)

在ASP.Net 中有专门解析中文编码的不知道在Java中是否有这样的类,
可以转换编码,并且可以在解析编码。。