核心提示:(一)Filter链说明:多个Filter程序,对用户请求的某一些URL进行拦截。多个Filter程序拦截同一个URL时,拦截顺序与Filter在web.xml配置文件的顺序有关。实例演示packag...
(一)Filter链
说明:多个Filter程序,对用户请求的某一些URL进行拦截。多个Filter程序拦截同一个URL时,拦截顺序与Filter在web.xml配置文件的顺序有关。
实例演示
package com.TestFilterChain; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().print("---用户请求,我去做事--- "); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
package com.TestFilterChain; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class MyFilter01 implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); //1.如果请求URL与配置过滤器的URL相同,执行 doFilter()方法 response.getWriter().print("1.首先MyFilter01拦截用户请求的MyServlet "); //2.放行 chain.doFilter(request, response); response.getWriter().print("4.MyFilter01-----后响应 "); } public void init(FilterConfig fConfig) throws ServletException { } }
package com.TestFilterChain; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class MyFilter02 implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); //1.如果请求URL与配置过滤器的URL相同,执行 doFilter()方法 response.getWriter().print("2.其次MyFilter02拦截用户请求的MyServlet "); //2.放行 chain.doFilter(request, response); //3.放行后响应 response.getWriter().print("3.MyFilter02-----先响应 "); } public void init(FilterConfig fConfig) throws ServletException { } }
Project01 index.html MyServlet MyServlet com.TestFilterChain.MyServlet MyServlet /MyServlet MyFilter01 MyFilter01 com.TestFilterChain.MyFilter01 MyFilter01 /MyServlet MyFilter02 MyFilter02 com.TestFilterChain.MyFilter02 MyFilter02 /MyServlet
输出:
(二)FilterConfig接口的使用
FilterConfig的方法:https://docs.oracle.com/javaee/6/api/javax/servlet/FilterConfig.html
FilterConfig对象获取web.xml文件的参数
实例演示:
package com.TestFilterChain; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().print("---用户请求我去做事--- "); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
package com.TestFilterChain; import java.io.*; import javax.servlet.*; public class MyFilter01 implements Filter { private String name; FilterConfig fc; public void init(FilterConfig fConfig) throws ServletException { //1.获取FilterConfig对象 this.fc = fConfig; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //2.输出参数信息 name=fc.getInitParameter("name"); response.getWriter().println("My name is "+name+" "); chain.doFilter(request, response); } public void destroy() { } }
Project01 MyFilter01 MyFilter01 com.TestFilterChain.MyFilter01 name kaina MyFilter01 /MyServlet MyServlet MyServlet com.TestFilterChain.MyServlet MyServlet /MyServlet
输出: