`

servlet传值出现乱码的解决

    博客分类:
  • Java
阅读更多

之前都用SSH开发,完全不懂servlet...今天在祖哥的带领下初识了servlet,写了一个小的demo。大体的功能是在一个页面输入一个词,后台通过servlet传值到百度进行搜索。

可惜啊,servlet不给面子,输入页面的值总是出现中文乱码。上网查了很多资料,解决的都不理想。最后综合了几篇文章,终于成功将值正确传入百度输入框中去啦。哈哈~

下面是过程:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base>
  </head>
  
  <body>
    <form action="hello">
		<input type="text" name="name"/>
		<input type="submit"/>
	</form>
  </body>
</html>

 

第一行的pageEncoding按正常的习惯我给直接改成了utf-8。这样一般是比较不会出现乱码的。页面上有个提交按钮,在文本框中输入了中文后提交,调用hello对应的servlet (web.xml中有配置),程序就流动到了我写的HelloServlet.java中。

 

HelloServlet.java (修改前,会乱码)

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String str= request.getParameter("name");  
		response.sendRedirect("http://www.baidu.com/s?wd=" + str);  //将页面输入的值str作为关键字传给百度
	}

 

OK, 在tomcat上把程序跑起来,在文本框中输入“啦啦啦”,额,乱码就出现了,百度查了一个不知道是什么东东的东东。

这时候想想,乱码是在哪里造成的呢?从页面上读取的时候会不会已经是乱码了呢?那我们在上面代码中吧str先打印出来看看吧。

 

String str=request.getParameter("name");  
System.out.println(str); //打印出刚从页面上传回来的值看看是否是乱码

 

 额,结果还真是乱码啊,居然在第一步的传值就乱了。恩,那要怎么修改?上百度查了些文章,一个一个方法试过,最后总算能让System.out.println(str)打印出正确的中文字了

 

String str=new String( request.getParameter("name").getBytes("iso8859-1"), "utf-8");  
System.out.println(str);

 

恩,解释一下第一句,getBytes("iso8859-1") ,将页面的string用iso8859-1 编码读入(因为jsp页面很多都用iso进行内部编码,这是网上人家说的),然后用utf-8 读出到str中。这里我用utf-8 就可以在println中看到正确的中文了。如果你的用utf-8 不行,可以换成其他编码试试,直到println能正确打出中文。(总有一种编码是正确的吧,utf-8不行就一个一个试看看吧)。这步对了再进行下一步。

 

到这里,起码就可以确认从页面读入servlet的string是没有乱码了的吧。这时工程跑起来还有乱码,那就是从servlet传到目的页面时候产生的了啦。如同我的代码。这时servlet中的str是正确的中文了,可是response.sendRedirect("http://www.baidu.com/s?wd=" + str) 到百度后却是乱码(额,插一句废话,这里通过s?/wd = 关键字  将查询关键字输入给百度)。又上网查了,最后结果是改成这样的:

 

HelloServlet.java

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String str=new String( request.getParameter("name").getBytes("iso8859-1"), "utf-8");  
		System.out.println(str);
		str = java.net.URLEncoder.encode(str);
		response.sendRedirect("http://www.baidu.com/s?wd=" + str);
	}

 

恩,这样就能正确的显示啦。在文本框里输入“你好”,点按钮,页面就自动链接到百度同时用百度查询了“你好”啦。

 

 

                                                                                                               by   NN     2009-9-28

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics