之前都用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
分享到:
相关推荐
还挺好,是我总结的ajax例子,关于ajax与servlet之间值的传递,以及servlet与数据库之间的连接,数据解析,等等!
这是servlet出现乱码,以及乱码出现时的解决办法。
jsp+servlet+mysql乱码解决的 累积各路方法 最终终成正果
全面讲述JAVA web的前后台协作传值的方法,get&post session&attribute jsp&servlet,堪称史上最全面的总结!
最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下: public void doGet...
关于java中使用servlet中解决乱码!
servlet输出JS乱码问题
在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象。由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-...
ajax与Servlet,传值Demo,包含ajax传值乱码转换
JSP与servlet之间的传值JSP与servlet之间的传值
jsp传参 servlet接收中文乱码问题的解决方法.docx
F:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发...
解决servlet页面乱码问题,对于初学者还是有帮助的
servlet与jsp中文乱码处理,详细介绍多种乱码处理方法,包括使用过滤器的方法
用ajax 通过url传参数给servlet时,在servlet提取时一直是乱码,即使用了统一的字符编码也没用。
Jsp与Servlet之间的传值(已验证) 1、JSP传值给Servlet 2、Servlet传值给Jsp
jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析
最简单的写法 只要JSP页面的 编码格式和 web.xml 编码格式一样就行
java-web学习demo--最简单的servlet jsp跳转传值java-web学习demo--最简单的servlet jsp跳转传值