回顾
1.JSP特殊的servlet 会被转成.java文件,然后编译成.class文件servlet通过dao层去将数据库的数据取出来,取出来以后使用request.setAttribute(键,值)转发给jsp页面request.geetRequestDispathcer(转发地址).forward(request,response)传给JSP页面以后可以使用 el表达式${键} 和 jstl 将数据取出来,展示在html标签中将案例进行完善修改,换成jsp页面
一、过滤器
JavaWeb有三大组件:servlet filter(过滤器) listener(监听器)
1.1Filter过滤器
包括咱们写的网站,使用过滤器了没﹖咱们现在还得自己手写url输入login.jsp,能不能使用过滤器进行过滤﹖无论你请求任何资源我都会进行过滤,只让login.jsp页面通行,所以这个一弄上去以后就显示login.jsp作用:验证信息登录 处理字符集的问题 过滤跳转等
1.2过滤器图解
1.3Filter入门
1.新建一个FilterDemo1类,这个类实现Filter接口
2.三个方法
init方法:初始化Filter,现有FdoFilter方法:核心方法destroy方法:销毁方法
package com.qfedu.filter; /*** @author wodexinhuai* @create 2022-05-12-9:49*/import javax.servlet.*;import javax.servlet.annotation.*;import java.io.IOException;//@WebFilter("/*") 是拦截的路径 拦截所有资源@WebFilter("/*")//@WebFilter(filterName = "FilterDemo1")public class FilterDemo1 implements Filter {public FilterDemo1(){System.out.println("Filter被实例化");}public void init(FilterConfig config) throws ServletException {System.out.println("filter初始化");}public void destroy() {System.out.println("Filter销毁");}//核心方法@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {System.out.println("111111");// chain.doFilter(request,response);//放行代码System.out.println("2222222");//将放行代码注释掉,就意味着拦截所有资源不放行}}
1.4执行流程
1.浏览器访问资源的时候,先去匹配@WebFilter的路径,会被拦截(要么放行值执行其他资源,要么拦截回到客户端)
2.先去执行Filter
3.看是否满足条件,满足就放行
4.放行资源以后,执行完资源以后再回到Fliter里面
请求==》过滤器==》资源(servlet、jsp)》过滤器》客户端
1.5Fliter生命周期
1.实例化Filter
2.初始化Fliter ,实例化和初始化都是一次
3.doFliter()核心方法
4.销毁,tomcat服务器关闭的时候销毁
重点:servlet先销毁,filter后销毁
因为servlet执行完销毁,然后回到filter
1.6过滤器拦截路径问题
1.精准拦截
@WebFliter(“/TestServlet1”) 只拦截这一个资源
2.拦截一个目录
@WebFilter(“/user/*”) 拦截user下的所有资源
3.拦截指定后缀的
@WebFilter(“*.jsp”)
4.拦截所有资源 只用这个
**@WebFilter(“/_”)_
1.7过滤器综合案例
功能型网站、展示型网站
还用昨天的项目案例E:\idea_workspace\day47_510anli2
使用过滤器,写项目时,最后加过滤器(项目可以整除运行时在加过滤器)
1.7.1登录拦截
1.流程第一次运行服务器,URI是/day47_510anli2/
if(requestURI.endsWith("/login.html") || requestURI.endsWith("/LoginServlet")){//放行chain.doFilter(request,response);}
2.进入login.html 再次执行拦截器 这时候URI是/day47_510anli2/login.html
else if(session == null || session.getAttribute("user") == null){//不放行 跳转到login.htmlresponse.sendRedirect("login.html");}
3.进入LoginServlet 设置了setAttribute(“user”,user)
所以以后每次执行servlet 都可以执行
else if (session.getAttribute("user") != null){//放行chain.doFilter(request,response);}
然后都可以放行
package com.qfedu.fliter; /*** @author wodexinhuai* @create 2022-05-12-10:56*/import javax.servlet.*;import javax.servlet.annotation.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;@WebFilter("/*")public class LoginFilter implements Filter {public void init(FilterConfig config) throws ServletException {Filter.super.init(config);}public void destroy() {Filter.super.destroy();}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {//第一步 使用HttpServlet的参数 子类比父类强 ServletRequest里没有getSession方法HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//过滤器的核心,现在拦截所有//有session和没有session值的两种方案//有session就证明登录过了,没有证明没有登录//有session就放行,没有session就拦截跳转到login.jspHttpSession session = request.getSession();System.out.println("1111filter:session:" + session);//如果session为null,就会直接跳转到login.jsp页面//url的一部分 /day47_510anli2/ 统一资源标识符String requestURI = request.getRequestURI();System.out.println("2222" + requestURI);//是否放行 以下if else 顺序不能换if(requestURI.endsWith("/login.html") || requestURI.endsWith("/LoginServlet")){//放行chain.doFilter(request,response);}else if(session == null || session.getAttribute("user") == null){//不放行 跳转到login.htmlresponse.sendRedirect("login.html");}else if (session.getAttribute("user") != null){//放行chain.doFilter(request,response);}}}
二、jquery
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><!-- 引入外部js文件,封装好的js --><!-- 一旦引入成功就可以数学符合jQuery语法格式的代码了 --><!-- 第一种引入方式 引入本机js文件 --><script src="jquery-3.4.1.min.js"></script><!-- 第二种进入方式 引入网络上面的CDN的js文件 --><!-- 必须得有网,没有网就不能写jQuery语法格式的代码 --><!-- <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> --></head><body></body><!-- 一定要记住,jQuery是js的封装,所以写的是js代码 --><script>//匿名函数 jQuery的功能$(function(){//功能代码alert("呼叫博儿")})</script></html>
