MySql的语法看这篇就够了,传送地址:MySql必知必会
JSP的使用看这篇就够了,传送地址:JSP必知必会
(1) 编写一个类实现Filter接口 (导入的包为:javax.servlet.Filter)
(2) 实现三个方法:
①实现过滤方法doFilter(),此方法中的:
filterChain.doFilter(servletRequest,servletResponse);
只有执行此方法,才可以访问拦截路径中的资源,若未执行此方法则代表拦截
②实现init()方法
③实现destroy()方法
(3) 到web.xml中配置Filter的拦截路径
分析: 用户登录之后会把登录信息保存到Session域中,所以检查用户是否登录,可以判断Session 中是否包含用户的登录信息即可
代码演示(1):创建LoginServlet程序
public class LoginServlet implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpSession session = httpServletRequest.getSession();
Object user = session.getAttribute("user");
//如果等于null,说明还没有登录
if (user == null) {
httpServletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
} else {
//登录成功,可以访问Admin目录下的目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
代码演示(2):在web.xml中编写配置
<filter>
<filter-name>LoginServletfilter-name>
<filter-class>com.qizegao.Filter.LoginServletfilter-class>
filter>
<filter-mapping>
<filter-name>LoginServletfilter-name>
<url-pattern>/Admin/*url-pattern>
filter-mapping>
运行结果:
直接在浏览器输入:http://localhost:8080/MyTest/Admin/a.jsp,跳转到login.jsp,无法访问a.jsp
注意:
1.Filter过滤器也支持注解,在首行加@WebFilter(“拦截路径”),则无需web.xml文件
2.浏览器不能直接访问实现Filter接口的类,只需访问拦截路径,就会自动的触发doFilter方法
1.构造器方法
2.init初始化方法
3.doFilter方法 (其中有chain.doFilter方法)
4.destroy方法
其中:① 1和2在web工程启动的时候执行(即在创建Filter过滤器)
② 第三步,符合拦截路径的请求发送到服务器的时候,自动的执行,若请求不属于拦截
路径,则不会执行
③ 第四步,停止web工程的时候执行(停止web工程,也会销毁Filter过滤器)
1.FilterConfig类是Filter过滤器的配置文件类,每次创建Filter的时候,也会创建一个FilterConfig
类,其中包含了Filter配置文件的配置信息
2.FilterConfig类的作用是获取Filter过滤器的配置文件内容:
(1) 获取Filter的名称,即web.xml文件中标签的值:
filterConfig.getFilterName();
(2) 获取web.xml文件中标签的值(写在filter标签中,可写多个),如:
(3) 获取ServletContext对象:filterConfig.getServletContext()
注意:
1.精确匹配
<url-pattern>/target.jspurl-pattern>
表示请求的地址必须为http://ip:port/工程路径/target.jsp,才可以触发doFilter方法
2.目录匹配
<url-pattern>/admin/*url-pattern>
表示请求的地址必须为http://ip:port/工程路径/admin/目录下所有的文件,才可以触发doFilter方法
3.后缀名匹配
<url-pattern>*.htmlurl-pattern>
表示请求地址必须以.html结尾才可以触发doFilter方法
<url-pattern>*.jspurl-pattern>
表示请求地址必须以.jsp结尾才可以触发doFilter方法
注意:Filter过滤器只关心请求的地址是否符合拦截路径,不会关心请求的资源是否存在
代码演示:FilterChain过滤器链的使用
(1) 在Admin目录下创建a.jsp
(2) 创建两个Filter过滤器
public class Filter1 implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Filter1的前置代码执行");
chain.doFilter(req, resp);
System.out.println("Filter1的后置代码执行");
}
}
public class Filter2 implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Filter2的前置代码执行");
chain.doFilter(req, resp);
System.out.println("Filter2的后置代码执行");
}
}
运行结果:
在浏览器地址栏输入:http://localhost:8080/MyTest/Admin/a.jsp
控制台输出: