关于jsp界面乱码问题

 在学习Sevrlet的重定向与转发时,写了一个登录界面,用LoginServlet处理该登录请求,登录成功则跳转至success.jsp页面,失败则跳转至error.jsp页面。

一、乱码问题

    有重定向和转发两种方式实现页面的跳转,在用转发实现跳转时,跳转后的jsp页面总是乱码,中文显示为问号???

如图:

    

jsp页面removeattribute_jsp页面

解决办法:

1、jsp界面的顶部的编码设置为:

<%@ page language="java" import="java.util.*"  contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

2、Servlet中的response对象的编码也要设置成UTF-8,在创建out流之前进行编码设置,即该语句要放在response.getWriter()前,最好是放在前面两行。

如图:

jsp页面removeattribute_jsp乱码_02

这是因为获取response对象需要先设置字符集   后设置的话就不会生效了,不先设置,那么还是用的原来的字符集,后设置的不管用的  所以要先设置 。

如果有中文请求,如从页面表单中传来的数据有中文,还要先设置request编码,

request.setCharacterEnconding("utf-8");

顺带解释一下:关于JSP页面中的pageEncoding和contentType两种属性的区别: 

  pageEncoding是jsp文件本身的编码 
  contentType的charset是指服务器发送给客户端时的内容编码 

    问题解决!

二、关于转发与重定向

首先看他们的格式:

//转发
 RequestDispatcher rd = request.getRequestDispatcher("xx.jsp");        //xx.jsp位于WebContent目录下
 rd.forward(request, response);
//重定向
 response.sendRedirect(xx.jsp);

从x度上复制过来的区别:

重定向和转发有一个重要的不同:

当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。

重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。