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页面反而没乱码。

参考技术A

这个问题我以前遇到:

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中出现的错误。(无法跳转到指定页面。)

用servlet做一个简单登录,页面用jsp

怎么从servlet传递一个值,然后在一个jsp页面得到这个值

servlet3.0异步,前台页面怎么支持,怎么获取异步输出内容

html 点表单里的提交按钮跳转到servlet文件

JSP&Servlet