关于jsp界面乱码问题
在学习Sevrlet的重定向与转发时,写了一个登录界面,用LoginServlet处理该登录请求,登录成功则跳转至success.jsp页面,失败则跳转至error.jsp页面。
一、乱码问题
有重定向和转发两种方式实现页面的跳转,在用转发实现跳转时,跳转后的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()前,最好是放在前面两行。
如图:
这是因为获取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内的对象将无法使用。
希望可以帮到像我一样的javaweb初学者。