servlet 跳转页面后response.getWriter().println输出的汉字乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet 跳转页面后response.getWriter().println输出的汉字乱码相关的知识,希望对你有一定的参考价值。
public class login extends HttpServlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<form action='/webtest/test' method='post'>");
out.println("用户名<input type='text' name='uname'/>");
out.println("密码<input type='password' name='pwd'/>");
out.println("<input type='submit' value='登录'/>");
out.println("</form>");
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doGet(request, response);
public class test extends HttpServlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String str=request.getParameter("uname");
System.out.println(str);
out.println("用户名:"+str);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doGet(request, response);
从login页面跳转到test页面的汉字就乱码了,但控制台输出的明明是汉字。直接打开test页面反而没乱码。
这个问题我以前遇到:
1、就是页面请求的方式是get方式的就会乱码,用post的方式就没这个问题。
2、还有就是设置web.xml里面如果配置了过滤器也要设置相应的编码,
3、将服务器的编码方式设置成相应的方式。
4、页面的编码要和后台java文件的编码的相同
如果你实在要使用get方式请求,建议你将中文先使用URLEncoder的encode方法转换两次传到后台然后再使用URLDecoder.decode解码两次就会得到你想要的传过来的信息。
为什么要转换两次因为第一次有些特殊的符号不能转换成unicode,比如#等符号,所以。。。你懂的
前台使用js转码两次也行,方法是encodeURIComponent你更懂得
我用表单提交是用post方式啊。
out.println("");
你写在get方法里面的吧??????
追问dopost里面写了this.doGet(request, response);
追答建议调整位置写在post里面,实在不行就用最后的便码吧,建议使用jsp,这样写sevlet太痛苦了
追问哎还没学到jsp,直接刷新页面浏览器可以显示出中文,而通过另外一个页面的表单跳转过来就乱码了。
把显示汉字写在dopost里面就ok了,但是我看的视频里面在dopost里面写this.doget没问题
不客气
本回答被提问者采纳 参考技术B servlet的乱码经常遇到response.setCharacterEncoding("UTF-8");
解决不了再加上试试
respnse.setHeader("content-type","text/html;charset=UTF-8");追问
上面都已经写了啊,还是不行。
追答什么样的乱码?
追问全是问号
追答看下你的工作空间是什么编码?部署在tomcat上吗?
追问是啊,我都在server.xml改了
额 。这个。用的eclipse 吗?先看下项目的编码是不是一致 再用new String("用户名","utf-8")把字符串编码下试试
servlet进入数据库验证用户名密码,用户名密码写错 怎么跳转到登录页面?/
if(密码正确 验证通过)response.sendRedirect("success.jsp");
else
response.sendRedirect("login.jsp");
至于还涉及到跳转方式的不同 可以上网看看 参考技术A 如果你的登录页面是login.jsp,你可以这样写:
out.write("<script>alert('请输入正确的账号和密码!');window.location.href='login.jsp'</script>");
不过你要引入import java.io.PrintWriter; 参考技术B response.sendRedirect("登陆页面的路径"); 这个是重定向方式 参考技术C 用重定向方式:response.sendRediret("登录页面"); 参考技术D response.sendRedirect("index.html");
以上是关于servlet 跳转页面后response.getWriter().println输出的汉字乱码的主要内容,如果未能解决你的问题,请参考以下文章
怎么从servlet传递一个值,然后在一个jsp页面得到这个值