网站建设公司能力要求湘潭做网站 活动磐石网络
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:50
当前位置: 首页 > news >正文
网站建设公司能力要求,湘潭做网站 活动磐石网络,腾讯云服务器可以做传奇网站吗,网站建设应具备哪些专业技能过滤器
- 概念 过滤器#xff1a; 从名字上理解就是对于事件的过滤操作#xff0c;在web 中的过滤器#xff0c;就是对于请求进行过滤操作#xff0c;我们使用过滤器#xff0c;就可以对于请求进行拦截操作#xff0c;然后进行响应的处理操作#xff0c;实现很多的特殊…过滤器
- 概念 过滤器 从名字上理解就是对于事件的过滤操作在web 中的过滤器就是对于请求进行过滤操作我们使用过滤器就可以对于请求进行拦截操作然后进行响应的处理操作实现很多的特殊的功能比如登录控制、权限控制操作、过滤敏感词汇. 2. 过滤器原理 流程 浏览器 和web 资源之间存在一个过滤器对于资源进行处理操作浏览器进行Http请求操作首先经过过滤器然后携带放行的request 和 Reponse 进入到web 资源 然后将资源进行返回操作http 进行响应。 注意拦截器的工作不仅仅对于请求进行拦截操作而且也会对响应进行拦截操作。 3. 配置 过滤器的使用总共有两种方式 一种是通过注解的形式进行实现操作。一种是通过web.xml进行实现。需要相关的配置文件Filter就在servlet-api.jar中我们将该jar包放到WEB-INF下的lib目录下面然后加入项目。如果是使用的maven 则需要进行如下的操作 dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion4.0.1/versionscopeprovided/scope
/dependency3.1 注解式配置 对于注解的源码进行分析 String[] value() default {};
String[] urlPatterns() default {};
// 其中两者的含义是相同的urlPatterns和value只能配置一个不能两个都配置两个都配置就会报错。进行条件的过滤操作的时候设置过滤器的限制过滤的条件路径。 WebFilter(urlPatterns {/Day45/user, /Day45/admin})WebFilter(/Day45/user) 注解中的value属性3.2 web.xml式配置
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1filter!– 当前过滤器名字 –filter-nameBFilter/filter-name!– 对应当前过滤器的.class文件 –filter-classcom.java.a_filter.BFilter/filter-class/filterfilter-mapping!– 对应过滤器的名字 –filter-nameBFilter/filter-name!– 限制过滤路径 –url-pattern//url-pattern/filter-mappingfilter-mapping!– 对应过滤器的名字 –filter-nameBFilter/filter-name!– 限制过滤路径 –url-pattern/andmin/user/url-pattern/filter-mapping
/web-app4. 过滤器链 FilterChain 过滤器链就是 在浏览器和 web 资源之间 有多个过滤器组成的一条过滤器链返回的数据会经过每一个过滤器中间多个过滤器形成一个过滤器链。 4.1 执行顺序 过滤器链的执行顺序两种情况下需要进行考虑操作 使用注解的方式进行配置过滤器这个时候需要考虑的是类的名称在字典中的顺序顺序在前的优先进行执行操作。在后的将靠后进行执行操作。使用web.xml 文件进行配置filter 过滤器根据在web.xml文件中的顺序来决定过滤器链的执行流程。靠前的优先进行执行操作。如果两者进行混合使用那么在web.xml 文件中的配置会优先进行操作执行。 4.2 FilterChain 通过查看源码能够得到的结论是 FilterChain 就只有一个方法。其实这个方法就是用来对于拦截进行放行操作的如果有多个拦截器那么就会继续调用下一个Filter 进行拦截。doFilter 方法需要传入个参数一个是ServletRequest 参数 一个是ServletReponse 参数这个直接进行传入就行。 Tomcat 在调用过滤器的时候默认会传入Request 和 Reponse 这个参数封装了请求和响应我们直接使用就行。ServletResquest和ServletResponse可以直接强转成HttpServletRequest和HttpServletResponse然后使用相应的方法。 //将ServletRequest 转换为 HttpServletRequest HttpServletRequest httpServletRequest (HttpServletRequest) servletRequest;WebFilter(/)
public class Filter01 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(调用过滤器01对请求进行过滤~~
);//放行,如果还有过滤器那么就执行下一个过滤器filterChain.doFilter(servletRequest,servletResponse);System.out.println(调用过滤器01对响应进行过滤);}Overridepublic void destroy() {} } WebFilter(/*) public class Filter02 implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(调用过滤器02对请求进行过滤);//放行,如果还有过滤器那么就执行下一个过滤器filterChain.doFilter(servletRequest,servletResponse);System.out.println(调用过滤器02对响应进行过滤~~);}Overridepublic void destroy() {} }运行结果调用过滤器01对请求进行过滤调用过滤器02对请求进行过滤调用过滤器02对响应进行过滤调用过滤器01对响应进行过滤 5.过滤器初始化参数 指 加载一定的资源的时候敏感词汇的过滤操作跟当前的过滤器进行绑定操作这里能够使用初始化参数两种方式 通过注解的方式来完成配置操作。通过web.xml 实现配置操作 5.1 注解实现初始化 // 注解方式完成 WebFilter(value /,initParams {WebInitParam(name filename, value saolei.properties)})5.2 xml 实现初始化 !– XML配置方式完成 – filterfilter-nameEFilter/filter-namefilter-classcom.qfedu.a_filter.EFilter/filter-class!– 初始化参数 –init-paramparam-namefilename/param-nameparam-valuesaolei.xml/param-value/init-param/filter filter-mappingfilter-nameEFilter/filter-nameurl-pattern//url-pattern /filter-mapping6. 过滤器的声明周期 过滤器也有声明周期Filter 的声明周期和Servlet 的声明周期十分相似。 过滤器总共有三个阶段 初始化、拦截过滤、销毁 初始化阶段当服务器启动的时候我们的服务器就会读取配置文件扫描注解然后来创建我们的过滤器。拦截和过滤阶段只要请求资源的路径和拦截的路径相同则过滤器就会对请求进行过滤操作这个阶段在服务器运行的过程中会一直循环。销毁阶段 当服务器进行关闭的时候服务器创建的过滤器也会随之销毁。 创建一个Filter类实现其中所有的方法 import javax.servlet.; import java.io.IOException;public class LifeCycleFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 该方法是初始化方法、在Filter 创建的时候调用}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 该方法是过滤和拦截的方法当请求和拦截匹配的时候进行调用}Overridepublic void destroy() {// 这个方法是销毁方法在Filter 销毁前进行调用} }1.启动服务器时调用初始化方法 2.进行拦截时调用doFilter方法 3.关闭服务器的时候调用销毁方法7. FilterConfig FilterConfig 和 FilterChain 这两个对象是通过服务器在创建和调用Filter 对象的时候所传入的这两个对象十分有用FilterConfig 对象能够读取我们的配置的初始化参数、FilterChain 可以实现多个Filter 之间的连接操作。 源码剖析 getFilterName()获取filter的名称getServletContext()获取ServletContextgetInitparamter(String var1)获取配置的初始参数的值getInitParamterNames()获取配置的所有参数名称 分析 我们在init方法中使用FilterConfig 来读取配置的数据库信息然后进行输出操作。FilterConfig 的作用就是用来读取配置文件。 public class MyFilterConfig implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(———–获取全部key:value————);//得到所有配置参数的名字EnumerationString names filterConfig.getInitParameterNames();while (names.hasMoreElements()) {//得到每一个名字String name names.nextElement();System.out.println(name filterConfig.getInitParameter(name));}System.out.println(———–end…..————);}// 输出的结果是配置信息的键值对数据Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {}Overridepublic void destroy() {} } filterfilter-namemyFilterConfig/filter-namefilter-classcom.clucky.filter.MyFilterConfig/filter-classinit-paramparam-namedriver/param-nameparam-valuecom.mysql.jdbc.Driver/param-value/init-paraminit-paramparam-nameurl/param-nameparam-valuejdbc:mysql://localhost:3306/equip_employ_manage?serverTimezoneGMT/param-value/init-paraminit-paramparam-nameusername/param-nameparam-valueroot/param-value/init-paraminit-paramparam-namepassword/param-nameparam-valueroot/param-value/init-param/filterfilter-mappingfilter-namemyFilterConfig/filter-nameurl-pattern//url-pattern/filter-mapping - 实例实现 8.1 编码操作 WebFilter(/) public class AEncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 获取当前Tomcat服务器版本信息String serverInfo request.getServletContext().getServerInfo();HttpServletRequest httpServletRequest (HttpServletRequest) request;HttpServletResponse httpServletResponse (HttpServletResponse) response;if (serverInfo.startsWith(Apache Tomcat/7) || serverInfo.startsWith(Apache Tomcat/6)) {// 存在ISO-8859-1// 留下一个小问题System.out.println(Tomcat 6 or 7);} else {// Tomcat 8以及以上处理POST请求中文乱码问题和对应Response响应乱码问题System.out.println(Tomcat 8 or 9);httpServletRequest.setCharacterEncoding(utf-8);httpServletResponse.setContentType(text/html;charsetutf-8);}// 过滤链进行放行操作chain.doFilter(httpServletRequest, httpServletResponse);}Overridepublic void destroy() {} }8.2 登录过滤操作 先进行封装操作使用抽象类能够保证该类不会被实例化实例化的话只能够使用匿名内部类。 下面是相关的代码总结。 public abstract class BaseFilter implements Filter {/** 过滤器的初始化操作** param filterConfig 初始化参数 过滤器的配置* throws ServletException Servlet异常/Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}/** 过滤的销毁方法/Overridepublic void destroy() {Filter.super.destroy();} } WebFilter(/) public class MyFilter extends BaseFilter{/*** 【核心方法】用于制定针对于用户请求和响应的过滤规则需要通过 FilterChain 进行请求放行操作** param servletRequest ServletRequest 用户请求符合 Servlet 要求的 request 对象* param servletResponse ServletResponse 根据用户请求绑定创建的符合 Servlet 要求的 Response 对象* param filterChain FilterChain 过滤器链类型用于【放行】请求* throws IOException IO异常* throws ServletException Servlet 异常/Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//1.强制类型转换HttpServletRequest request (HttpServletRequest)servletRequest;HttpServletResponse response (HttpServletResponse)servletResponse;//3. 获取请求路径String uri request.getRequestURI();StringBuffer requestURL request.getRequestURL();System.out.println(requestURL);System.out.println(uri);//未进行登录时能够放行的操作if (uri.endsWith(/)||uri.endsWith(login.html)|| uri.endsWith(loginServlet)){// 放行操作filterChain.doFilter(request, response);} else {// 判断是否存在对象如果存在过Object id1 request.getSession().getAttribute(u_account);// 如果已经登录成功if (id1 ! null){filterChain.doFilter(request,response);} else {response.setContentType(text/html;charsetutf-8);response.getWriter().write(script alert(请先登录);location.href/login.html/script);}}} }8.3 实现敏感词汇过滤操作 // Filter 代码import javax.servlet.; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import java.io.IOException; import java.util.ArrayList; import java.util.List;WebFilter(servletNames {comment},initParams {WebInitParam(name sensitiveWord, value zz)}) public class CommentFilter implements Filter {private ListString sensitiveWords new ArrayList();Overridepublic void init(FilterConfig filterConfig) throws ServletException {//得到敏感词汇String word filterConfig.getInitParameter(sensitiveWord);//加入集合sensitiveWords.add(word);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//设置编码servletRequest.setCharacterEncoding(utf-8);servletResponse.setContentType(text/html;charsetutf-8);//得到评论String message servletRequest.getParameter(message);for (String sensitiveWord : sensitiveWords) {//对所有敏感词汇进行过滤if (message.contains(sensitiveWord)){//替换敏感词汇message message.replace(sensitiveWord, *);}}//存入request域servletRequest.setAttribute(comment,message);//放行filterChain.doFilter(servletRequest,servletResponse);}Overridepublic void destroy() {} } // Servlet 代码import javax.servlet.; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.util.HashSet;WebServlet(name comment,value /comment) public class CommentServlet extends HttpServlet {//记录评论敏感词汇的ipprivate HashSetString hashSet new HashSet();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String message request.getParameter(message);String comment (String) request.getAttribute(comment);if (message.equals(comment)){System.out.println(没有敏感词汇…..);//设置名字request.setAttribute(name,good boy);}else {//有敏感词汇记录IPString localAddr request.getLocalAddr();System.out.println(localAddr);hashSet.add(localAddr);//设置名字request.setAttribute(name,bad boy);}//转发到comment.jsp页面request.getRequestDispatcher(/comment.jsp).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);} } // JSP 页面% page contentTypetext/html;charsetUTF-8 languagejava % html headtitle评论/title /head body h1输入评论内容/h1 form action\({pageContext.request.contextPath}/comment methodposttextarea namemessage cols30 rows10/textareainput typesubmit value提交 /form p \){requestScope.get(name)}span stylecolor: red${requestScope.get(comment)}/span/p /body /html
- 上一篇: 网站建设公司哪些主要哪些建站助手官网
- 下一篇: 网站建设公司品牌太平洋汽车网址大全
相关文章
-
网站建设公司哪些主要哪些建站助手官网
网站建设公司哪些主要哪些建站助手官网
- 技术栈
- 2026年04月20日
-
网站建设公司哪家好 皆来磐石网络赤壁网站建设
网站建设公司哪家好 皆来磐石网络赤壁网站建设
- 技术栈
- 2026年04月20日
-
网站建设公司哪家好 该如何选择seo是什么职业做什么的
网站建设公司哪家好 该如何选择seo是什么职业做什么的
- 技术栈
- 2026年04月20日
-
网站建设公司品牌太平洋汽车网址大全
网站建设公司品牌太平洋汽车网址大全
- 技术栈
- 2026年04月20日
-
网站建设公司企业网站网站 建设平台分析
网站建设公司企业网站网站 建设平台分析
- 技术栈
- 2026年04月20日
-
网站建设公司前景中国建设部网站官网
网站建设公司前景中国建设部网站官网
- 技术栈
- 2026年04月20日






