中文乱码

jsp中的Servlet处理请求后一般都会做请求重定向或转发的处理,很多初学者会碰到很多问题,通过本人的总结,给出以下解决办法:
1.重定向:

一般我们要根据我们的Web应用名称来写,如重定向到WebRoot根目录下的login.jsp,我们可以这么写,response.sendRedirect("/Web应用名称/login.jsp");但是,这样写有一个bug,就是当你改变Web应用名称的时候,跳转就失败了,所以Web应用名称不能写死,我们知道,request.getContextPath()能够获取到Web应用的名称,所以可以这样写response.sendRedirect(""+request.getContextPath()+"/login.jsp");

2.请求转发:

请求重转发就比较简单,用
request.getRequestDispatcher("/index.jsp").forward(request, response);就行

3.还有一种情况,当一个Servlet处理请求后,我们可能还要让这个Servlet再连接到另外一个servlet,这时我们可以用javascript技术,例如:
response.setContentType("text/html;charset=utf-8");//这里是防止出现乱码,很重要的
response.getWriter().print( " <script> location.href= '"+request.getContextPath()+"/servlet/xxxxxxServlet'; </script> ");

4.还有一种情况,当一个jsp页面是由一个servlet请求转发过来的,那么在这个jsp页面中如果想去访问另外一个servlet,此时,只需要这样写:<script> location.href= 'xxxxxxServlet'; </script> "这样就ok了。

这里还有很重要的一点,由于WEB-INF目录下的所有文件是受保护的,所以在WEB-INF目录下的文件要互访的话只能同过ssh中的技术实现,否则只能通过servlet来实现互访。

转自:http://blog.sina.com.cn/s/blog_77e940bd0100yj1l.html

总结:遇到的问题:

(1)使用EL表达式的时候出现中文乱码:

在使用EL表达式之前加 :<%response.setcharacterEncording("UTF-8");%>

(2)在servlet中将请求转发到另一个页面的时候也出现中文乱码:

注释掉下面相关代码后,没有出现中文乱码

//PrintWriter out = response.getWriter();

  //out.flush();
  //out.close();
于是,尝试在out对象之前加response.setCharacterEncoding("UTF-8");也没有再出现中文乱码

(3)对于post请求在获得请求参数之前,设置一下字符编码,可解决中文乱码

即:<%request.setcharacterEncording("UTF-8");%>

要使此方式也适用于get请求,需在tomcat的server.xml文件中,在<connector>标签中加userBodyEncodingForURI="true"

注意:web项目中的server.xml也要改,具体参考tomcat官网上的帮助文档

猜你喜欢

转载自zxq1007097830.iteye.com/blog/2379949
今日推荐