JavaWeb

一.Servlet规范介绍


  1. servlet规范来自于JavaEE规范中的一种
  2. 作用:
    1. 在Servlet规范中,指定动态资源文件开发步骤
    2. 在Servlet规范中,指定Http服务器调用动态资源文件规则
    3. 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则

servlet

启动一个WEB项目的时候, WEB容器会去读取它的配置文件web.xml,新建servlet得重启或重新部署

二.Servlet接口实现类


  1. Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器提供jar包
  2. Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet接口)
  3. Servlet规范中任务,Http服务器能调用的【动态资源文件】必须是一个Servlet接口实现类

三.Servlet接口实现类开发步骤


  1. 创建一个Java类继承与HttpServlet父类,使之成为一个Servlet接口实现类

  2. 重写HttpServlet父类两个方法。doGet或则doPost
    get
    浏览器------》oneServlet.doGet()
    post
    浏览器------》oneServlet.doPost()

  3. 将Servlet接口实现类信息【注册】到Tomcat服务器

    【网站】—>【web】—》【WEB-INF】—>web.xml

     <!--将Servlet接口实现类类路径地址交给Tomcat-->
    <servlet>
    	<servlet-name>mm</servlet-name> <!--声明一个变量存储servlet接口实现类类路径-->
    <servlet-class>com.bjpowernode.controller.OneServlet</servlet-class><!--声明servlet接口实现类类路径-->
    </servlet>
    Tomcat  String mm = "com.bjpowernode.controller.OneServlet"
    
    <!--为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名-->
    <servlet-mapping> 
      <servlet-name>mm</servlet-name>
    <url-pattern>/one</url-pattern> <!--设置简短请求别名,别名在书写时必须以"/"为开头-->
    </servlet-mapping>
    
    如果现在浏览器向Tomcat索要OneServlet时地址
    
    http://localhost:8080/myWeb/one
    

四.Servlet对象的生命周期


  1. 网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责额创建。开发人员不能手动创建Servlet接口实现类的实例对象
  2. 在默认的情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时自动创建这个Servlet接口实现类的实例对象
在手动配置情况下,要求Http服务器在启动时自动创建某个Servlet接口实现类的实例对象
<servlet>
	<servlet-name>mm</servlet-name> <!--声明一个变量存储servlet接口实现类类路径-->
	<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class>
	<load-on-startup>30<load-on-startup><!--填写一个大于0的整数即可-->
</servlet>
  1. 在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象
  2. 在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁

五.HttpServletResponse接口


  1. 介绍:

    • HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
    • HttpServletResponse接口实现类由Http服务器负责提供
    • HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【3响应体】交给浏览器
    • 开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】
  2. 主要功能:

    • 将执行结果以二进制形式写入到【响应体】
    • 设置响应头中[content-type]属性值,从而控制浏览器使用
    • 设置响应头中【location】属性,将一个请求地址赋值给location.从而控制浏览器向指定服务器发送请求对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】

    重定向

    //重定向
    response.setStatus(302);
    response.setHeader("location","http://www.baidu.com");
    
    response.sendRedirect("http://www.baidu.com");
    

浏览器显示的数据与原数据不符

out.write方法可以将【字符】【字符串】【ASCII码】写入到响应体

【ASCII】:数字会当成ASCII码写入响应体

//实际开发中都是通过print方法将真实数据写入到响应体
out.write(50);-----输出2
out.print(50);-----输出50

浏览器乱码问题:

ContentType默认是text/html;charset=ISO-8859-1

//在获取流之前设置编码
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("键盘侠");

六.HttpServletRequest接口


  1. 介绍:
    • HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
    • HttpServletRequest接口实现类由Http服务器负责提供
    • HttpServletRequest接口负责在doGet/doPost方法运行时读取Http请求协议包中信息
    • 开发人员习惯于将HttpServletRequest接口修饰的对象称为【请求对象】
  2. 作用:
    • 可以读取Http请求协议包中【请求行】信息
    • 可以读取保存在Http请求协议包中【请求头】或则【请求体】中请求参数信息
    • 可以代替浏览器向Http服务器申请资源文件调用

服务器乱码问题

GET:请求参数保存在请求头,在http请求协议包到达http服务器之后,第一步就是解码

​ 请求头二进制内容由tomcat负责解码,tomcat9.0,默认使用utf-8字符集

POST:请求参数保存在请求体,第一件事就是解码,请求体二进制内容由request负责解码。request默认使用【ISO-8859-1】字符集,一个东欧语系字符集,中文乱码

//在Post请求方式下,在读取请求体内容之前,应该通知请求对象使用utf-8字符集对请求体中的内容进行一次重新解码
//通知对象使用utf-8字符集重新解码
request.setCharacterEncoding("utf-8");

七.请求对象和响应对象生命周期


  1. 在Http服务器接收到浏览器发送的【Http请求协议包】之后,自动为当前的【Http请求协议包】生成一个【请求对象】和一个【响应对象】
  2. 在Http服务器调用doGet/doPost方法时,负责将【请求对象】和【响应对象】作为实参传递到方法,确保doGet/doPost正确执行
  3. 在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁
    • 【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程中
    • 【请求对象】和【响应对象】相当于用户在服务端的代言人

八.在线考试管理系统----用户信息管理模块

  1. 用户信息注册
  2. 用户信息查询
  3. 用户信息删除
  4. 用户信息更新

准备工作:

  1. 创建用户信息表 User.frm

    CREATE TABLE USERS(
    	userId int primary key AUTO_INCREMENT,
        userName varchar(50),
        password varchar(50),
        sex char(1),
        email varchar(50),
    )
    
  2. 创建表对应的实体类,描述表结构

  3. 创建JdbcUtils工具类

  4. web文件夹下WEB-INF下创建lib文件夹,导入依赖包

九.欢迎资源文件


  1. 默认欢迎资源文件

    • 用户发送了一个针对某个网站的【默认请求】时,
      此时由Http服务器自动从当前网站返回的资源文件
    • 正常请求: http://localhost:8080/myWeb/index.html
    • 默认请求: http://localhost:8080/myWeb/
  2. Tomcat对于默认欢迎资源文件定位规则

    • 规则位置:Tomcat安装位置/conf/web.xml

    • 规则命令:

      <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
  3. 设置当前网站的默认欢迎资源文件规则

    • 规则位置: 网站/web/WEB-INF/web.xml

    • 规则命令:

      <welcome-file-list>
          <welcome-file>login.html</welcome-file>
      </welcome-file-list>
      
    • 网站设置自定义默认文件定位规则,此时Tomcat自带定位规则将失效,前面不能加斜杠

十.HTTP状态码


  1. 介绍:

    • 由三位数字组成
    • Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中【状态行】上,
    • 如果Http服务器针对本次请求,返回了对应的资源文件。通过Http状态码通知浏览器应该如何处理这个结果
  2. 分类:

    • 组成 100-599:分为五个大类
  • 1xx:最有特征 100; 通知浏览器本次返回的资源文件
    并不是一个独立的资源文件,需要浏览器在接收
    响应包之后,继续向Http服务器所要依赖的其他资源文件
  • 2xx: 最有特征200,通知浏览器本次返回的资源文件是一个
    完整独立资源文件,浏览器在接收到之后不需要所要
    其他关联文件
  • 3xx: 最有特征302,通知浏览器本次返回的不是一个资源文件内容,而是一个资源文件地址,需要浏览器根据这个地址自动发起请求来索要这个资源文件 response.sendRedirect(“资源文件地址”)写入到响应头中 location
    而这个行为导致Tomcat将302状态码写入到状态行
  • 4xx:
    * 404: 通知浏览器,由于在服务端没有定位到被访问的资源文件
    因此无法提供帮助
    * 405:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)但是这个Servlet对于浏览器采用的请求方式不能处理
    • 5xx: 500:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)
      这个Servlet可以接收浏览器采用请求方式,但是Servlet在处理请求 期间,由于Java异常导致处理失败

十一.多个Servlet调用规则


  1. 前提条件:

    ​ 某些来自于浏览器发送请求,往往需要服务端中多个Servlet协同处理。
    ​ 但是浏览器一次只能访问一个Servlet,导致用户需要手动通过浏览器
    ​ 发起多次请求才能得到服务。
    ​ 这样增加用户获得服务难度,导致用户放弃访问当前网站【98k,AKM】

  2. 提高用户使用感受:无论本次请求涉及到多少个Servlet,用户只需要【手动】通知浏览器发起一次请求即可

  3. 多个Servlet之间调用规则:

    • 重定向:地址栏会变化 302—>200
    • 请求转发

十二.重定向解决方案


  1. 工作原理:
    • 用户第一次通过【手动方式】通知浏览器访问OneServlet。
      OneServlet工作完毕后,将TwoServlet地址写入到响应头
      location属性中,导致Tomcat将302状态码写入到状态行。
    • 在浏览器接收到响应包之后,会读取到302状态。此时浏览器
      自动根据响应头中location属性地址发起第二次请求,访问
      TwoServlet去完成请求中剩余任务
  2. 实现命令:
    • response.sendRedirect(“请求地址”),将地址写入到响应包中响应头中location属性
  3. 特征:
    • 请求地址:既可以把当前网站内部的资源文件地址发送给浏览器 (/网站名/资源文件名),也可以把其他网站资源文件地址发送给浏览器(http://ip地址:端口号/网站名/资源文件名)
    • 请求次数:浏览器至少发送两次请求,但是只有第一次请求是用户手动发送。 后续请求都是浏览器自动发送的。
    • 重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【GET】
  4. 缺点: 重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间

十三.请求转发方案


  1. 原理:用户第一次通过手动方式要求浏览器访问OneServlet。OneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用TwoServlet来
    完成剩余任务

  2. 实现命令:请求对象代替浏览器向Tomcat发送请求

    • 通过当前请求对象生成资源文件申请报告对象
    • 将报告对象发送给Tomcat
RequestDispatcher  report = request.getRequestDispatcher("/资源文件名");一定要以"/"为开头
report.forward(当前请求对象,当前响应对象)

3. 优点:
 * 无论本次请求涉及到多少个Servlet,用户只需要手动通过浏览器发送一次请求
 * Servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数增加处理服务速度
4. 特征:

* 请求次数: 在请求转发过程中,浏览器只发送一次请求
* 请求地址:只能向Tomcat服务器申请调用当前网站下资源文件地址
  			request.getRequestDispathcer("/资源文件名") ****不要写网站名****
* 请求方式:在请求转发过程中,浏览器只发送一个了个Http请求协议包。
  			参与本次请求的所有Servlet共享同一个请求协议包,因此
        			这些Servlet接收的请求方式与浏览器发送的请求方式保持一致

重定向使浏览器发送请求,此时cookie是更新后的;请求转发用的还是原来的

在这里插入图片描述

十四.多个Servlet之间数据共享实现方案:


  1. 数据共享:OneServlet工作完毕后,将产生数据交给TwoServlet来使用
  2. Servlet规范中提供四种数据共享方案
    • ServletContext接口
    • Cookie类
    • HttpSession接口
    • HttpServletRequest接口

十五.ServletContext接口:


  1. 介绍:

    • 来自与Servlet规范中一个接口。在Tomcat中存在servlet-api.jar

      在Tomcat中负责提供这个接口实现类

    • 如果两个Servelt来自与同一个网站。彼此之间通过网站的ServletContext实例对象实现数据共享

    • 开发人员习惯于ServletContext对象成为【全局作用域对象】

  2. 工作原理: 每一个网站都存在一个全局作用域对象。这个全局作用域对象【相当于】一个Map.
    在这个网站中OneServlet可以将一个数据存入到全局作用域对象,当前网站中其他Servlet此时 都可以从全局作用域对象得到这个数据进行使用

在这里插入图片描述

    • 。动过程中,自动为当前网站中内存中创建一个全局作用域对象

    • 在Http服务器运行期间,一个网站只有一个全局作用域对象—好找

    • 在Http服务器运行期间,全局作用域对象一直处于存活状态

    • 在Http服务器准备关闭时,负责将当前网站中全局作用域对象进行销毁处理

      全局作用域对象生命周期贯穿网站整个运行期间

  1. 命令实现:【同一个网站】OneSevlet将数据共享给TwoServlet

    //1.通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】
    ServletContext application=request.getServletContext();
    //2.将数据添加到全局作用域对象作为【共享数据】
    application.setAttribute("key","value");
    
    
    //1.获取数据---通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】
    ServletContext application=request.getServletContext();
    //2.从全局作用域对象得到指定关键字对应数据
    Object obj=application.getAttribute("key");
    
    Integer money=(Integer)applicatioin.getAttribute("key");避免空指针异常 
    
    

十六.Cookie


  1. 介绍:

    1. Cookie来自于Servlet规范中一个工具类,存在于Tomcat提供servlet-api.jar中
    2. 如果两个Servlet来自于同一个往回走那,并且为同一个浏览器/用户提供服务,此时借助于Cookie对象进行数据共享
    3. Cookie存放当前用户的私人数据,在共享数据过程中提高服务质量
    4. 在现实生活中,Cookie相当于用户在服务器端得到【会员卡】
  2. 原理:

    用户通过浏览器第一次向网站发送请求申请OneServlet。Oneservlet在运行期间创建一个Cookie存储与当前用户相关数据,OneServlet工作完毕后,【将Cookie写入到响应头】交还给当前浏览器。浏览器接受到响应包之后,将cookie存储在浏览器的缓存一段时间后,用户通过【同一个浏览器】再次向【myWeb】网站发送请求申请TwoServlet时。【浏览器需要无条件的将myWeb网站之前推送过来的Cookie,写入到请求头】发送过去,此时TwoServlet在运行时,就可以通过读取请求头中cookie中信息,得到OneServlet提供的共享数据

  3. 实现命令:通网站OneServlet与TwoServlet借助于Cookie实现数据共享

    //1.创建Cookie的对象,保存共享数据(当前用户数据)
    //cookie相当于一个map,一个cookie只能存放一个键值对,这个键值对key和value只能是string,不能是中文
    //String---varchar---string是不同类型语言中的通用类型
    Cookie card=new Cookie();
    //2.将cookie写入响应头,交给浏览器
    response.addCookie(card);
    
    
    //1.得到cookie
    Cookie[] cookieArray=request.getCookies();
    //2.循环遍历数据得到每一个cookie的key和value
    for(Cookie card:cookieArray){
        String key=card.getName();
        String value=card.getValue();
    }
    
  4. Cookie销毁实际:

    1. 在默认情况下:Cookie对象存放在浏览器的缓存中。因此只要浏览器关闭,Cookie对象就被销毁掉
    2. 在手动设置情况下,可以要求浏览器将接收的Cookie存放在客户端计算机上硬盘上,同时需要指定Cookie在硬盘上存活时间。在存活时间范围内,关闭浏览器关闭客户端计算机,关闭服务器,都不会导致Cookie被销毁。在存活时间到达时,Cookie自动从硬盘上被删除
     cookie.setMaxAge(60); //cookie在硬盘上存活1分钟
    

十七.httpSession接口


  1. 介绍:

    • httpSession接口来自于Servlet规范下一个接口。存在于Tomcat中servlet-api.jar,其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-api.jar
    • 如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于HttpSession对象进行数据共享
    • 开发人员习惯于将HttpSession接口修饰对象称为【会话作用域对象】
  2. HttpSession与Cookie区别:【面试题】

    1. 存储位置:
      • Cookie存在客户端
      • HttpSession存放在服务端计算机内存
    2. 数据类型:
      • Cookie对象存储共享数据类型只能是String
      • HttpSession对象可以存储任意类型的共享数据
    3. 数据数量:
      • 一个Cookie对象只能存储一个共享数据
      • HttpSession使用map集合存储共享数据,可以存储任意数量共享数据
    4. 参照物:
      • Cookie相当于在服务端【会员卡】
      • HttpSession相当于客户在服务端【私人保险柜】
  3. 命令实现:同一个网站下OneSevlet将数据传递给TwoServlet

    //1.调用请求对象向Tomcat索要当前用户在服务端的私人储物柜
    HttpSession session=request.getSession();
    //2.将数据添加到用户私人储物柜
    session.setAttribute("key",共享数据);
    
    //1.获取
    //2.从会话作用域对象得到共享数据
    Object 共享数据=session.getAttribute("key",共享数据);
    
    //遍历session  和ParameterNames()相同;里面不可能有空指针异常,如果key存在,那必然存了value(购物车)
    
  4. Http服务器如何将用户与HttpSession关联起来—Cookie

  5. getSession()与getSession(false)

    1. getSession():如果当前用户在服务端已经拥有了自己的私人储物柜,要求tomcat将这个私人储物柜进行返回;如果当前用户在服务端尚未拥有自己的私人储物柜,要求tomcat为当前用户创建一个全新的私人储物柜
    2. getSession(false):如果当前用户在服务端已经拥有了自己私人储物柜,要求tomcat将这个私人储物柜返回;如果当前用户在服务端尚未拥有自己的私人储物柜,此时tomcat将返回null
  6. HttpSession销毁时机

    1. 用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中
    2. 在浏览器关闭时,意味着用户与他的HttpSessioin关系被切断
    3. 由于Tomcat无法监测浏览器何时关闭,因此在浏览器关闭时并不会导致tomcat将浏览器所关联的HttpSession进行销毁
    4. 为了解决这个问题,tomcat会为每一个HttpSession对象设置【空闲时间】,空闲时间默认为30分钟,如果当前HttpSession对象空闲时间达到30分钟,此时tomcat认为用户已经放弃了自己的HttpSession,此时tomcat就会销毁掉HttpSession
  7. HttpSession空闲时间的手动设置

    在当前网站/web/WEB-INF/web.xml

    <session-config>
    	<session-timeout>5</session-timeout>五分钟
    </session-config>
    

十八.HttpServletRequest接口实现数据共享


  1. 介绍:

    1. 在同一个网站中,如果两个Servlet之间通过【请求转发】方式进行调用,彼此之间共享同一个请求协议包。而一个请求协议包只对应一个请求对象,因此servlet之间共享一个同一个请求对象,此时可以利用这个请求对象在两个Servlet之间实现数据共享
    2. 在请求对象实现Servlet之间数据共享功能时,开发人员将请求对象称为【请求作用域对象】
  2. 命令实现:OneServlet通过请求转发申请调用TwoServlet时,需要给TwoServlet提供共享数据

    //1.将数据添加到【请求作用域对象】中attribute属性
    request.setAttribute("key",数据);//数据可以是任意类型Object
    //2.向tomcat申请调用TwoServlet
    request.getRequestDispatcher("/two").forward(request,response);
    
    
    //1.获取对象
    Objecct 数据=request.getAttribute("key");
    //2.
    

十九.Servlet规范扩展------监听器接口


  1. 介绍:

    1. 一组来自于servlet规范下的接口,共有8个接口。在Tomcat存在servlet-api.jar包
    2. 监听器接口需要由开发人员亲自实现,Http服务器提供jar包并没有对应的实现类
    3. 监听器接口用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】
  2. 作用域对象:

    1. 在servlet规范中,认为在服务器端内存中可以在某些条件下为两个servelt之间提供数据共享方案的对象,被称为【作用域对象】
    2. Servlet规范下作用域对象:
      1. ServletContext:全局作用域对象
      2. HttpSession:会话作用域对象
      3. HttpServletRequest:请求作用域对象
  3. 监听器接口实现类开发规范:三步

    1. 根据监听的实际情况,选择对应监听器接口进行实现
    2. 重写监听器接口声明【监听事件处理方法】
    3. 在web.xml文件将监听器接口实现类注册到Http服务器
    <listener>
        <listener-class>listener.OneListener</listener-class>
    </listener>
    
  4. ServletContextListener接口:

    1. 作用:通过这个接口合法的监测全局作用域对象被初始化时刻以及被销毁时刻

    2. 监听事件处理方法:

      public void contextInitlized();//在全局作用域对象被Http服务器初始化被调用
      public void contextDestory();//在全局作用域对象被Http
      
  5. ServletContextAttributeListener接口:

    1. 作用:通过这俄格接口合法的检测全局作用域对象共享数据变化时刻

    2. 监听事件的处理方法:

      public void contextAdd():在全局作用域对象添加共享数据
      public void contextReplaced():在全局作用域对象更新共享数据
      public void contextRemove():在全局作用域对象删除共享数据
      
  6. 全局作用域对象共享数据变化时刻

    ServletContext application=request.getServletContext();
    application.setAttribute("key",100);//新增共享数据
    application.setAttribute("key",200);//更新共享数据
    application.removeAttribute("key");//删除共享数据
    

二十.优化注册耗时


监听器初始化时,创建多个连接对象存入map;数据库重载方法,得到连接对象判断是否占用,未占用返回一个connection,提速6倍

二十一.Servlet规范扩展—Fileter接口


  1. 介绍:

    1. 来自于servlet规范下接口,在Tomcat中存在于servlet-api.jar包
    2. Filter接口实现类由开发人员负责提供,Http服务器不负责
    3. Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截
  2. 具体作用:

    1. 拦截Http服务器,帮助服务器检测当前请求合法性
    2. 拦截Http服务器,对当前请求进行增强操作
  3. Filter接口实现类开发步骤:三步

    1. 创建一个Java类实现Filter接口
    2. 重写Filter接口中doFilter方法
    3. web.xml将过滤器接口实现类注册到Http服务器
    <filter>
        <filter-name>mm</filter-name>
        <filter-class>filter.FilterServlet</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>mm</filter-name>
        <url-pattern>/test</url-pattern>
    </filter-mapping>
    
  4. Filter拦截地址格式:

    1. 命令格式:

      <filter-mapping>
      	<filter-name>oneFilter</filter-name>
          <url-pattern>拦截地址</url-pattern>
      </filter-mapping>
      
    2. 命令作用:拦截地址通知Tomcat在调用何种资源文之前需要调用OneFilter过滤进行拦截

    3. 要求Tomcat在调用某个一个具体文件之前,来调用OneFilter拦截

      <url-pattern>/test</url-pattern>具体文件
      <url-pattern>/test/*</url-pattern>某个文件夹
      <url-pattern>*.jpg</url-pattern>某个类型
      <url-pattern>/*</url-pattern>所有文件
      

二十二.防止用户恶意访问


  1. 令牌机制

查询数据库有没有此用户,如果有则给令牌

在这里插入图片描述

  1. 过滤器—不足,每个文件都被要求有令牌了
    在这里插入图片描述

  2. 解决:

    login相关的都应该放行,拿到URI

    //1.调用请求对象读取请求包中URI,了解用户访问的资源文件是谁
    String uri=request.getRequestURI();//【/网站名/资源文件名】
    //2.如果本次请求资源文件与登录相关【login.html 或者LoginServlet、默认文件】此时应该无条件放行
    if((uri.indexOf("login" ))!=-1||"/myweb/".equals(uri)){
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
        return;
    }
    //3.如果本次请求访问的时其他资源文件,需要得到用户在服务端HttpSession
    session=request.getSession(false)
    if(session!=null){
        filterChain.doFilter(servletRequest,servletResponse);
        return;
    }
    //4.做拒绝请求
    request.getRequestDispatcher("/login_error.html");
    

二十三.互联网通信流程图


在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值