今日学习笔记

过滤器Filter

过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理

应用到的场景一般有自动登录、统一设置编码格式、访问权限控制和敏感字符过滤等

在我的项目中,新建一个角色

今日学习笔记

 

 王五

会出现乱码 

 今日学习笔记

 数据库中也显示乱码

今日学习笔记

 

 这就是由于没有设置过滤器导致,所以需要设置过滤器来解决

首先在数据库连接的bd中设置字符编码

String DB_URL ="jdbc:mysql://localhost:3306/test?useUnicode=true";
告诉MySQL这里要用到我们自己定义的编码,而非系统自带的编码(如ios等)


然后修改Tomcat,在conf目录的service.xml文件中修改connecter

今日学习笔记

 

 Tomcat如果不作这一步修改,在以后的项目中会遇到本电脑显示正常,项目到其他电脑就显示乱码的情况

 在servlet中新建EncodeFilter

public class EncodeFilter implements Filter 

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

}

@Override
public void destroy() {

}

在web.xml中配置filter
<filter>
<filter-name>encodeFilter</filter-name>
<filter-class>com.dpb.servlet.servlet.EncodeFilter</filter-class> //这里是servlet的路径
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/*</url-pattern>//“/*”的意义是所有文件编码都要经过此过滤
</filter-mapping>

编写filter
private String encode = "utf-8";

@Override
public void init(FilterConfig filterConfig) throws ServletException {
if (filterConfig.getInitParameter("encode") != null) {
encode = filterConfig.getInitParameter("encode");

}

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
filterChain.doFilter(request, response);
(加粗部分是filter的核心编码,即实现request和response的互相转换)

今日学习笔记

 

 再次添加的新用户角色不再产生乱码,数据库中也不再显示乱码

今日学习笔记

 

上一篇:hashlib模块


下一篇:Base64和URL编解码操作