j2ee 下servlet与jsp之间参数传递时的乱码问题,一直解决不了,烦啊!大哥帮忙!
写了一个很简单的例子,从index.jsp页面打开,点击链接到一个servlet类,在该类中分别进行转发与重定向;只是在url上带有中文的参数;在重定向与转发的目标jsp页面上怎么才能得到正确中文,注:servlet不能改,现在只能在转发与重定向的目标jsp页面中想办法,但是我怎么也不能行啊下面是我的源码,我用myeclipse写的,用tomcat6,希望高手多多关注啊
----------------解决方案--------------------------------------------------------
用javascript 的encodeURI编译下链接
----------------解决方案--------------------------------------------------------
回复 2楼 hhwz
javascript ? js只学了一些啊,还不是杂揉啊,这个java中怎么写js啊?能否简单示例一下啊,谢谢大哥了~ ----------------解决方案--------------------------------------------------------
在提交时后台获取时是乱码吗?
----------------解决方案--------------------------------------------------------
程序代码:
----------------index.jsp------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
function getCheck(text){
location.href="/test/Check?flag="+text;
}
</script>
<body>
<a href="javascript:getCheck('dispatcher转向')">通过 '/testJSP/Check?flag=dispatcher转向 ' 转至 Check.java</a>
<br/>
<a href="javascript:getCheck('redirect重定向')">通过 '/testJSP/Check?flag=dispatcher重定向' 重定向 Check.java</a>
<br/>
<a href="javascript:getCheck('redirect外网')">通过 '/testJSP/Check?flag=redirect外网' 连接 Check.java</a>
</body>
</html>
--------------check-----
public void doGet(HttpServletRequest come,HttpServletResponse go)
throws ServletException,IOException{
String flag=come.getParameter("flag");
come.setAttribute("names","野马abc");
flag=URLDecoder.decode(flag, "utf-8");
if("dispatcher转向".equals(flag)) { //转发
RequestDispatcher rd=come.getRequestDispatcher("/0628/forward1.jsp?redirect="+URLEncoder.encode(flag,"utf-8"));//此处用带中文参数的url地址
System.out.println(flag);
rd.forward(come,go);
}else if("redirect重定向".equals(flag)){
go.sendRedirect("/test/0628/forward2.jsp?redirect="+flag);//此处用带中文参数的url地址
}else if("redirect外网".equals(flag)){
go.sendRedirect("http://www.baidu.com");
}
else {
System.out.println("都不匹配");
}
}
----- forward1----
<%@page import="java.io.UnsupportedEncodingException"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
public String transferCharacter(String s){//这个方法用来转变,对于表单get提交的中文这个方法是管用的,但在这里就不行
try{
return new String(s.getBytes("ISO-8859-1"),"utf-8");
}catch(UnsupportedEncodingException e){
throw new RuntimeException("不支持的字符集");
}
}
%>
<%
out.println("这是一个转发的例子==");
%>
<br/>
<%
String names=(String)request.getAttribute("names");
String para=transferCharacter(request.getParameter("redirect"));
out.println("属性name的值:"+names);
%>
<br/>
<%
out.println("参数para的值:"+para);//此处para的值一直取不到,一直是乱码
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
function getCheck(text){
location.href="/test/Check?flag="+text;
}
</script>
<body>
<a href="javascript:getCheck('dispatcher转向')">通过 '/testJSP/Check?flag=dispatcher转向 ' 转至 Check.java</a>
<br/>
<a href="javascript:getCheck('redirect重定向')">通过 '/testJSP/Check?flag=dispatcher重定向' 重定向 Check.java</a>
<br/>
<a href="javascript:getCheck('redirect外网')">通过 '/testJSP/Check?flag=redirect外网' 连接 Check.java</a>
</body>
</html>
--------------check-----
public void doGet(HttpServletRequest come,HttpServletResponse go)
throws ServletException,IOException{
String flag=come.getParameter("flag");
come.setAttribute("names","野马abc");
flag=URLDecoder.decode(flag, "utf-8");
if("dispatcher转向".equals(flag)) { //转发
RequestDispatcher rd=come.getRequestDispatcher("/0628/forward1.jsp?redirect="+URLEncoder.encode(flag,"utf-8"));//此处用带中文参数的url地址
System.out.println(flag);
rd.forward(come,go);
}else if("redirect重定向".equals(flag)){
go.sendRedirect("/test/0628/forward2.jsp?redirect="+flag);//此处用带中文参数的url地址
}else if("redirect外网".equals(flag)){
go.sendRedirect("http://www.baidu.com");
}
else {
System.out.println("都不匹配");
}
}
----- forward1----
<%@page import="java.io.UnsupportedEncodingException"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
public String transferCharacter(String s){//这个方法用来转变,对于表单get提交的中文这个方法是管用的,但在这里就不行
try{
return new String(s.getBytes("ISO-8859-1"),"utf-8");
}catch(UnsupportedEncodingException e){
throw new RuntimeException("不支持的字符集");
}
}
%>
<%
out.println("这是一个转发的例子==");
%>
<br/>
<%
String names=(String)request.getAttribute("names");
String para=transferCharacter(request.getParameter("redirect"));
out.println("属性name的值:"+names);
%>
<br/>
<%
out.println("参数para的值:"+para);//此处para的值一直取不到,一直是乱码
%>
----------------解决方案--------------------------------------------------------
http://fengzhiyin.iteye.com/blog/375632/,看下这个就行了!
----------------解决方案--------------------------------------------------------