1.Web开发:javax.servlet.Filter
- 所有过滤器都应该实现Filter接口.
- 过滤器的作用:
- 对目标访问前或访问后进行过滤.
- 应用场景:
- 对密码进行加密
- 对请求参数进行字符编码设置
- 对请求进行权限控制
- 对请求参数值进行非法字符过滤
- …
2.过滤器过滤规则:
①过滤器默认对请求进行过滤,对服务器内部资源转发不进行过滤.
②需求:希望服务器内部资源转发也进行过滤.在<filter-mapping>中增加转发过滤设置
<dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> |
③过滤器过滤执行顺序:
- 按照匹配规则进行执行过滤.
- 如果多个过滤器的匹配规则都匹配到这个路径,按照<filter-mapping>匹配顺序来执行过滤.
④过滤执行顺序原理:
- 通过Tomcat将过滤器对象创建后,存放到集合,然后根据匹配规则,迭代过滤器实施过滤.
- 每一个过滤器的执行有责任调用下一个过滤器的执行.所以在doFilter()方法中进行放行: chain.doFilter(req,resp);
3.项目中解决乱码问题
- GET: 在Tomcat/conf/server.xml中设置编码.
- <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- POST :
- 字符编码过滤器只能解决POST请求乱码问题.不能解决GET请求乱码问题.
- 项目开发注意事项:
①工作空间编码设置
②JSP页面编码设置
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- pageEncoding="UTF-8" 页面编码
- contentType="text/html; charset=UTF-8" 服务器端响应返回结果字符编码:response.setCharacterEncoding("UTF-8");
③数据库编码
- 如果修改编码:
- 修改编码,重新启动服务器,重新创建数据库以及表.以前创建的数据还是采用以前的编码.
- 应用程序和数据库之间数据交互是通过url来指定中间编码进行转换
- jdbc:mysql://localhost:3306/atcrowdfunding170506?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
- 命令行查询数据显示乱码
- 数据库采用utf8编码,而DOS窗口默认GBK,需要通过set names GBK将数据库数据转换为GBK编码之后再显示到DOS窗口就解决乱码问题了.
- 这个设置只是临时的,只针对于当前窗口有效.
- Java中字符串编码转换:
public byte[] getBytes(String charsetName) 字符串对象调用这个方法将字符串转换为二进制数据(将原来编码转换为指定的中间编码)
public String(byte bytes[], String charsetName) 将二进制数组数据再转换为字符串(将数据的中间编码再转换为需要的编码).
- 设置Eclipse的编码了,所有的工作空间字符编码与Eclispe编码一致了.