@nextleaf
2018-09-28T00:05:08.000000Z
字数 2073
阅读 1008
Java
JSP
监听器
验证码
ServletContextListener
ServletRequestListener
HttpSessionListener
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
HttpSessionBindingListener(这种类型的监听器不用在web.xml中进行声明)
HttpSessionActivationListener
HttpSession中对象的状态有两种:绑定与解除绑定、钝化与活化;
绑定与解除绑定,就是指在HttpSession中将某个对象设置为属性值或者移除某个属性的值。而钝化是指服务器会将不常使用的Session对象暂时序列化到系统文件或数据库中,而活化就是将暂存在系统文件或数据库中的Session对象反序列化到服务器中
数据库编码及其连接参数为UTF-8。
post提交后req.getParameter("username").trim();
取值中文时乱码,但req.setAttribute("ms", "中文中文");
和<%=request.getAttribute("ms")
取值正常。
//先解码,再编码
new String(req.getParameter("username").trim().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
POST传来数据,Tomcat默认以ISO-8859-1
编码(ISO-8859-1是不支持中文的)成单字节数据,若没有进行请求编码设置或重新编码操作,那么中文字符会在jsp页面中输出???,出现类似多个?形式的乱码现象
page指令用于定义JSP页面的各种属性
contentType:文档类型
pageEncoding:页面编码
get请求:
Tomcat8之后,get请求默认编码为utf-8
,不需要进行重新编码。
(get请求参数编码受tomcat的URIEncoding参数影响)
meta中
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
当前面pageEncoding和contentType都没有设置的情况下,被解析成的html页面就会采用这种编码方式。
jsp页面中 pageEncoding--->contentType--->meta 默认缺省。pageEncoding写了后面的都可以不用写,默认继承。
response.getWriter().println可以看到这个编码设置的作用,但response编码格式设置对于使用request.setAttribute等传递数据不起作用。(为什么?)
request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码(解码)的编码。
该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。对post方法有效
如果设置了response.setCharacterEncoding。那么就会按照这个编码格式传送到前端,浏览器并用这种方式(head中的content-type设置成response.setCharacterEncoding定义的编码格式)重新编码(解码);
如果没有显式设置的话,不管request的编码是什么,response的编码就是ISO-8859-1,等到了浏览器,发现response的信息header中没有相关编码设置,就会去取window系统的编码格式,中文系统默认为GBK/GB2312。
对post提交有影响:
response.setCharacterEncoding对post提交有影响,当没有对response.setCharacterEncoding设置的时候,值为null,则默认采用iso-8859-1来进行重新编码(解码)。
浏览器根据自己页面的编码格式作为起始编码格式,把字符进行编码成byte进行传输。如果response.getCharacterEncoding为null,那么默认采用iso-8859-1进行重新编码(解码)成字符,如果设置了,就按照设置的编码格式进行重新编码(解码)字符。