• 【Java八股文总结】之Java Web


    文章目录

    Java Web

    一、Java Web介绍

    Q:什么是Java Web?

    Web:World Wide Web(www),即全球广域网,也称为万维网。
    JavaWeb:是用Java技术来解决web互联网领域的技术栈。

    Q:Java Web的工作原理?

    在这里插入图片描述

    Q:Java Web的知识体系

    数据库(MySQL、JDBC、Maven、MyBatis)、前端(HTML+CSS+JavaScript、Ajax+Vue+Element)、核心技术(Tomcat+HTTP+Servlet、Request+Response、JSP、Cookie+Session、Filter+Listener)

    二、JDBC

    JDBC(Java Database Connectivity),Java数据库连接,使用Java代码操作 关系型数据库 的API。

    1、JDBC的使用步骤

    ① 创建工程,导入驱动jar包(mysql-connector-java-5.1.48.jar)
    ② 注册驱动。Class.forName("com.mysql.jdbc.Driver");
    ③ 获取连接。Connection conn = DriverManager.getConnection(url, username, password);
    ④ 定义SQL语句。String sql = “update...”;
    ⑤ 获取执行SQL对象。Statement stmt = conn.createStatement();
    ⑥ 执行SQL。stmt.executeUpdate(sql);
    ⑦ 处理返回结果。
    ⑧ 释放资源。

    2、JDBC API详解

    1、DriverManager

    ①注册驱动 Class.forName("com.mysql.jdbc.Driver");
    Driver类源码

    static {
    	try {
    		DriverManager.registerDriver(new Driver());
    	} catch (SQLException var1) {
    		throw new RuntimeException("Can't register driver!");
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ②获取连接

    Static Connection getConnection(String url,String user,String password);
    
    • 1

    参数
    url: 连接路径
    语法: jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
    示例: jdbc:mysql://127.0.0.1:3306/db1
    细节:
    如果连接的是本机mysq服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql://数据库名称?参数键值对
    配置useSSL=false参数,禁用安全连接方式,解决警告提示。
    user: 用户名
    password: 密码

    2、Connection

    Connection(数据库连接对象)作用:①获取执行SQL的对象;②管理事务。

    注意:JDBC事务管理
    在这里插入图片描述

    3、Statement
    • Statement作用:执行SQL语句。
    • 执行SQL语句
      int executeUpdate(sql):执行DML、DDL语句
      返回值:①DML语句影响的行数;②DDL语句执行后,执行成功也可能返回0。
      ResultSet executeQuery(sql):执行DQL语句
      返回值:ResultSet结果集对象。
    4、ResultSet
    • ResultSet(结果集对象)作用:封装了DQL查询语句的结果。

    ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象。

    • 获取查询结果

    boolean next():①将光标从当前位置向前移动一行;②判断当前行是否为有效行。
    返回值:
    true:有效行,当前行有数据。
    false:无效行,当前行没有数据。

    xxx getXxx(参数):获取数据。
    xxx:数据类型;如:int getInt(参数); String getString(参数)。
    参数:int:列的编号,从1开始。String:列的名称。

    • 使用步骤

    ①游标向下移动一行,并判断该行否有数据: next();
    ②获取数据: getXxx(参数)。

    5、PreparedStatement
    • PreparedStatement作用:预编译SQL语句并执行,预防SQL注入问题(将敏感字符进行转义)。
    • SQL注入
      SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

    三、数据库连接池

    1、简介

    数据库连接池是个容器,负责分配、管理数据库连接(Connection);
    它允许应用程序 重复使用一个现有的数据库连接,而不是再重新建立一个
    释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
    好处: ①资源重用;②提升系统响应速度;③避免数据库连接遗漏。

    2、数据库连接池的实现

    • 标准接口:DataSource
      • 官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口。
      • 功能:获取连接。
    Connection getConnection()
    
    • 1
    • 常见的数据库连接池:DBCP、C3PO、Drulid
    • Druid(德鲁伊)
      • Druid连接池是阿里巴巴开源的数据库连接池项目;
      • 功能强大,性能优秀,是Java语言最好的数据库连接池之一。

    3、Druid使用步骤

    ①导入jar包druid-1.1.12.jar —> ②定义配置文件 —> ③加载配置文件 —> ④获取数据库连接池对象 —> ⑤获取连接

    四、前端相关技术

    4.1 HTML

    1、什么是HTML?

    • HTML(HyperText Markup Language): 超文本标记语言 ,所有的网页都是使用其编写的。
      超文本: 超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。
      标记语言: 由标签构成的语言。

    • HTML运行在浏览器上,HTML标签由浏览器来解析。

    • HTML标签都是预定义好的。例如:使用展示图片。

    • W3C标准:网页主要由三部分组成(结构:HTML、表现:CSS、行为:JavaScript)

    2、HTML的使用

    • HTML文件以 .htm 或 .html 为拓展名。
    • HTML结构标签
      在这里插入图片描述
    • HTML标签不区分大小写。
    • HTML标签属性值单双引号皆可。

    3、HTML标签

    • 基础标签
      在这里插入图片描述
      转义字符
      在这里插入图片描述

    • 图片、音频、视频标签
      在这里插入图片描述

    • 超链接标签

    <a  href="链接地址url"  target="打开方式"></a>
    target:_self:默认值,再当前页面打开;_blank:在空白页面打开。
    
    • 1
    • 2
    • 列表标签
      在这里插入图片描述

    • 表格标签
      在这里插入图片描述

    • 布局标签
      在这里插入图片描述

    • 表单标签
      表单: 在网页中主要负责数据采集功能,使用标签定义表单。
      表单项(元素): 不同类型的input元素、下拉列表、文本域等。
      在这里插入图片描述

    1、form:定义表单
    ① action:规定当提交表单时向何处发送表单数据,URL。
    ② method:规定用于发送表单数据的方式
    · get:浏览器会将数据直接附在表单的action URL之后,大小有限制。
    · post:浏览器会将数据放到http请求消息体中,大小无限制。
    2、input:定义表单项,通过type属性控制输入形式,type的取值有:
    在这里插入图片描述

    4.2 CSS

    CSS(Cascading Style Sheet)层叠样式表,是一门语言,用于控制网页表现。

    1、CSS导入方式

    在这里插入图片描述

    2、CSS选择器

    在这里插入图片描述

    CSS相关知识参见W3school: https://www.w3school.com.cn/css/index.asp

    4.3 JavaScript

    1、什么是JavaScript?

    JavaScript是一门 跨平台、面向对象的脚本语言 ,来控制网页行为的,它能使网页可交互。
    JavaScript和Java是完全不同的语言,不论是概念还是设计,但是基础语法类似。

    2、JavaScript使用

    1、如何引入?

    内部脚本:将JS代码定义在HTML页面中。
    外部脚本:将JS代码定义在外部JS文件中,然后引入到HTML页面中。
    注意: 在HTML中定义JavaScript代码,必须放在 标签之间。

    2、基础语法
    • 输出语句
      使用window.alert()写入警告框。
      使用document.write()写入HTML输出。
      使用console.log()写入浏览器控制台。

    • 变量
      JavaScript 中用 var 关键字(variable的缩写)来声明变量。
      JavaScript是一门 弱类型语言,变量可以存放不同类型的值。
      ECMAScript 6新增了 let 关键字来定义变量。它的用法类似于var,但是所声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明
      ECMAScript 6新增了 const 关键字,用来声明一个 只读的常量。一旦声明,常量的值就不能改变。

    • 数据类型
      JavaScript中分为:原始类型和引用类型。
      5种原始类型:
      number:数字(整数、小数、NaN(Not a Number))
      string:字符、字符串,单双引皆可
      boolean:布尔,true、false
      null:对象为空
      undefined:当声明的变量未初始化时,该变量的默认值是undefined
      使用 typeof 运算符可以获取数据类型:alert(typeof age);

    • 运算符
      一元运算符:++、–
      算术运算符:+、-、*、/、%
      赋值运算符:=、+=、-= …
      关系运算符:>、<、>=、<=、!=、=
      逻辑运算符:&&、||、!
      三元运算符:条件表达式?true_value : false_value

    注意:

    == 和 === 的区别(是否会进行类型转换)
    == :在判断时,如果二者数据类型不一致,会先进行类型转换
    === : 全等于,判断类型是否一样,如果不一样,直接返回false;类型一样再去比较值。

    • 流程控制语句
      if、switch、for、while、do…while

    • 函数
      函数(方法)是被设计为执行特定任务的代码块。
      定义:JavaScript函数通过 function 关键词进行定义,语法为:

    function functionName(参数1,参数2..){
    要执行的代码
    }
    
    • 1
    • 2
    • 3

    注意:
    形式参数不需要类型。因为JavaScript是弱类型语言。
    返回值也不需要定义类型,可以在函数内部直接使用return返回即可。

    3、JavaScript对象

    Array、String、自定义对象

    4、BOM

    • Browser Object Model,浏览器对象模型。
    • JavaScript将浏览器的各个组成部分封装为对象。
    • 组成:
      Window:浏览器窗口对象
      Navigator:浏览器对象
      Screen:屏幕对象
      History:历史记录对象
      Location:地址栏对象

    5、DOM

    • Document Object Model,文档对象模型。
    • 将标记语言的各个组成部分封装为对象。
      Document:整个文档对象
      Element:元素对象
      Attribute:属性对象
      Text:文本对象
      Comment:注释对象

    4.4 Vue/Element

    Element - 网站快速成型工具
    w3school 在线教程

    1、Vue

    Vue是一套 前端框架 ,免除原生JavaScript中的DOM操作,简化书写。
    基于 MVVM (Model-View-ViewModel)思想,实现数据的 双向绑定 ,将编程的关注点放在数据上。
    官网:https://cn.vuejs.org

    2、Element

    Element:是饿了么公司前端开发团队提供的一套 基于Vue的网站组件库,用于快速构建网页。
    组件:组成网页的部件,例如超链接、按钮、图片、表格等等。
    Element官网:https://element.eleme.cn/#/zh-CNListener

    五、Java Web技术

    5.1 HTTP

    HTTP,HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

    1、HTTP协议特点

    ①基于TCP协议:面向连接,安全。
    ②基于请求-响应模型:一次请求对应一次响应。
    ③HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

    • 缺点:多次请求间不能共享数据。Java中使用会话技术(Cookie、Session)来解决这个问题。(Cookie在客户端,Session在服务端)
    • 优点:速度快。

    2、HTTP请求数据格式

    请求数据分为3部分:
    ①请求行:请求数据的第一行。其中GET表示请求方式,/ 表示请求资源路径,HTTP/1.1表示协议版本。
    ②请求头:第二行开始,格式为key: value形式。
    ③请求体:POST请求的最后一部分,存放请求参数。(GET没有请求体)
    在这里插入图片描述
    在这里插入图片描述

    3、HTTP响应数据格式

    响应数据分为3部分:
    ①响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。
    ②响应头:第二行开始,格式为key: value形式。
    ③响应体:最后一部分。存放响应数据。
    在这里插入图片描述
    状态码大全链接: https://cloud.tencent.com/developer/chapter/13553

    4、GET请求和POST请求区别

    • Post和Get的共同点:
      ①都是HTTP协议中的两个发送请求的方法,底层都是 基于TCP/IP协议

    • Post和Get的区别:
      ①post传递数据,不需要在url中显式出来,而get方法需要在 url中显式
      ②post传输的 数据量大,可以达到2M ,而get传参受url长度限制, 最多传递1024字节
      ③post请求是 将数据传输到服务器端 ,而get请求是为了 从服务器端取数据(为什么get也能传参?为了告诉服务端需要什么数据)
      ④post在真正接受数据之前会 先将请求头发送给服务器进行确认,然后才真正发送数据

    • Get和Post的区别:
      ①get传递的参数在页面可以看见,安全性低。(post更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
      ②GET请求请求 参数在请求行中,没有请求体 。POST请求请求 参数在请求体中
      ③get传参 速度更快
      ④get不能 传递中文,会乱码 ,而post不会出现乱码问题。
      在这里插入图片描述

    5.2 Web服务器——Tomcat

    Web服务器是一个用于程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。主要功能是“提供网上信息浏览服务”。

    1、什么是Tomcat?

    Tomcat是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖于Tomcat才能运行。
    官网:https://tomcat.apache.org/

    5.3 Servlet

    Servlet是Java提供的一门 动态web 资源开发技术。

    Q:Servlet由谁创建? Servlet方法由谁调用?

    Servlet由web服务器创建,Servlet方法由web服务器调用

    Q:服务器怎么知道Servlet中一定有service方法?

    因为我们自定义的servlet,必须实现servlet接口并复写其方法,而servlet接口中有service方法。

    1、Servlet生命周期

    • 对象的生命周期指一个对象从被创建到被销毁的整个过程。
    • Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
      加载和实例化:默认情况下,当servlet第一次被访问时,由容器创建servlet对象。
      初始化:在Servlet实例化之后,容器将调用servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
      请求处理:每次请求servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
      服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。

    2、Servlet常用方法

    • 初始化方法,在Servlet被创建时执行,只执行一次。void init(ServletConfig config)
    • 提供服务方法,每次Servlet被访问,都会调用该方法。void service(ServletRequest req, ServletResponse res)
    • 销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet。void destroy()
    • 获取ServletConfig对象ServletConfig getServletConfig()
    • 获取Servlet信息String getServletInfo()

    3、Servlet的体系结构

    在这里插入图片描述
    注意: 自定义Servlet都需要实现HttpServlet接口,并重写doGet和doPost方法。
    在这里插入图片描述

    5.4 Request

    在这里插入图片描述
    request:获取请求数据。
    response:设置响应数据。

    1、Request的体系

    在这里插入图片描述
    在这里插入图片描述
    ① Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中。
    ② 使用request对象,查阅JavaEE API文档的HttpServletRequest接口。

    2、Request获取请求数据

    • 请求数据分为3部分:
    1. 请求行:GET /request-demo/req1?username=zhangsan HTTP/1.1
    · String getMethod():获取请求方式GET
    · String getContextPath():获取虚拟目录(项目访问路径): /request-demo
    · StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
    · String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
    · String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 请求头:User-Agent: Mozilla/5.0 Chrome/91.0.4472.106
    · String getHeader(String name):根据请求头名称,获取值
    
    • 1
    1. 请求体:username=superbaby&password=123
    · ServletInputStream getInputStream():获取字节输入流
    · BufferedReader getReader():获取字符输入流
    
    • 1
    • 2
    Q:URL(统一资源定位符)和URI(统一资源标识符)的区别?

    URI(Uniform Resource Identifier):统一资源标识符,可以唯一标识一个资源,例如人的身份证号,唯一标识一个人;
    URL(Uniform Resource Locator):统一资源定位符,可以提供该资源的路径,例如人的家庭住址,通过URL可以找到这个人。

    • 请求参数获取方式
      请求参数获取方式:
      ① GET方式String getQueryString()
      ② POST方式BufferedReader getReader()
    Q思考:GET请求方式和POST请求方式区别主要在于获取请求参数的方式不一样,是否可以提供一种统一获取请求参数的方式,从而统一doGet和doPost方法内的代码?

    在这里插入图片描述

    Map<String, String[]> getParameterMap():获取所有参数Map集合
    String[] getParameterValues(String name):根据名称获取参数值(数组)
    String getParameter(String name):根据名称获取参数值(单个值)
    
    • 1
    • 2
    • 3

    3、Request请求处理中文乱码问题

    • 请求参数如果存在中文数据,则会乱码。
    • 解决方案:
      ① POST:设置输入流的编码,req.setCharacterEncoding("UTF-8");
      ② 通用方式(GET/POST):先编码,再解码。new String(username.getBytes("ISO-8859-1"),"UTF-8");
    • URL编码
      ① 将字符串按照编码方式转为二进制。
      ② 每个字节转为2个16进制数并在前边加上% 。

    4、请求转发

    • 请求转发(forward):一种在 服务器内部的资源跳转方式
    • 实现方式req.getRequestDispatcher("资源B路径").forward(req,resp);
    • 请求转发资源间共享数据:使用Request对象 void setAttribute(String name,Object o):存储数据到request域中。 Object getAttribute(String name):根据key,获取值。 void removeAttribute(String name):根据key,删除该键值对。

    5、请求转发的特点

    ① 浏览器地址栏路径不发生变化
    ② 只能转发到当前服务器的内部资源
    一次请求,可以在转发的资源间使用request共享数据。

    5.5 Response

    在这里插入图片描述

    1、Response设置响应数据

    响应数据分为3部分:

    1. 响应行:HTTP/1.1200 OK void setStatus(int sc):设置响应状态码
    2. 响应头:Content-Type:text/html void setHeader(String name, String value):设置响应头键值对
    3. 响应体:head> PrintWriter getWriter():获取字符输出流 ServletOutputStream getOutputStream():获取字节输出流

    2、Response完成重定向

    • 重定向(Redirect):一种资源跳转方式
    • 实现方式
    resp.setStatus(302);
    resp.setHeader("location",“资源B的路径");
    resp.sendRedirect("资源B的路径");
    
    • 1
    • 2
    • 3
    • 重定向特点
      ① 浏览器地址栏路径发生变化
      ② 可以重定向到任意位置的资源(服务器内部、外部均可)。
      两次请求,不能在多个资源使用request共享数据。
    Q:请求转发和重定向的区别

    在这里插入图片描述

    3、Response响应数据

    1、响应字符数据

    • 使用
      ① 通过Response对象获取字符输出流 PrintWriter writer = resp.getWriter();
      ② 写数据 writer.write("aaa");
    • 注意
      ① 该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭。
      ② 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1。 resp.setContentType("texthtmll;charset=utf-8");
      上面这行代码有两个作用:可以解决中文乱码;可以设置"content-type"头信息,告诉浏览器发送什么格式的数据(即换了 response.setHeader(" content-type","text/html"));

    2、响应字节数据

    • 使用
      ① 通过Response对象获取字符输出流 ServletOutputStream outputStream = resp.getOutputStream();
      ② 写数据 outputStream.write(字节数据);

    • IOUtils工具类使用
      ① 导入坐标

    <dependency>
    	<groupld>commons-io</groupld>
    	<artifactld>commons-io</artifactld>
    	<version>2.6</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ② 使用

    lOUtils.copy(输入流,输出流)
    • 1

    5.6 JSP

    • 概念:Java Server Pages,Java服务端页面。
    • 一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
    • JSP = HTML + Java,JSP本质上就是一个Servlet
    • JSP的作用:简化开发,避免了在Servlet中直接输出HTML标签。

    1、JSP入门

    在这里插入图片描述

    2、JSP原理

    JSP本质上就是一个Servlet 。JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器(Tomcat)将其编译,最终对外提供服务的其实就是这个 字节码文件
    在这里插入图片描述

    3、JSP脚本

    JSP脚本用于 在JSP页面内定义Java代码
    JSP脚本分类:
    ① <%…%>:内容会直接放到jspService()方法之中。
    ② <%=.…%>:内容会放到out.print()中,作为out.print()的参数。
    ③ <%!..%>:内容会放到jspService()方法之外,被类直接包含。

    4、JSP缺点

    由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了 以下问题:

    • 书写麻烦,特别是复杂的页面。
    • 阅读麻烦。
    • 复杂度高,运行需要依赖于各种环境,JRE,JSP容器,JavaEE等。
    • 占内存和磁盘,JSP会自动生成java和.class文件占磁盘,运行时的.class文件占内存。
    • 调试困难,出错后,需要找到自动生成的.java文件进行调试。
    • 不利于团队协作,前端人员不会Java,后端人员不精HTML。
      在这里插入图片描述

    5、EL表达式

    • Expression Language表达式语言,用于简化JSP页面内的Java代码。
    • 主要功能:获取数据。
    • 语法:${expression}
      ${brands}:获取域中存储的key为brands的数据。
      · JavaWeb中的 四大域对象
      ①page:当前页面有效;
      ②request:当前请求有效;
      ③session:当前会话有效;
      ④application:当前应用有效。
      el表达式获取数据,会依次从这4个域中寻找,直到找到为止。
      在这里插入图片描述

    6、JSTL标签

    JSP标准标签库(Jsp Standarded Tag Library),使用标签取代JSP页面上的Java代码。
    在这里插入图片描述
    在这里插入图片描述

    7、MVC模式

    • MVC是一种 分层开发的模式 ,其中:M-Model,业务模型,处理业务;V:View,视图,界面展示;C:Controller,控制器,处理请求,调用模型和视图。
    • MVC好处:职责单一,互不影响;有利于分工协作;有利于组件重用。
      在这里插入图片描述
      在这里插入图片描述

    5.7 Cookie & Session

    1、会话跟踪技术

    • 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在 一次会话中可以包含多次请求和响应
    • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间 共享数据
    • HTTP协议是 无状态 的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享。
    • 实现方式:①客户端会话跟踪技术 Cookie ;②服务端会话跟踪技术 Session

    2、Cookie基本使用

    在这里插入图片描述

    3、Cookie原理

    Cookie的实现是 基于HTTP协议 的,包括 响应头(set-cookie)、请求头(cookie)
    在这里插入图片描述

    4、Cookie存活时间

    • 默认情况下,Cookie存储在 浏览器内存 中,当 浏览器关闭,内存释放,则Cookie被销毁
    • setMaxAge(int seconds):设置Cookie存活时间
      正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时间自动删除。
      负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁。
      零:删除对应Cookie。

    5、Cookie存储中文

    Cookie不能直接存储中文,如需要存储,则需要进行转码:URL编码。

    6、Session

    服务端会话跟踪技术:将数据保存到服务端。
    JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能。

    7、Session使用

    ① 获取Session对象 HttpSession session = request.getSession();
    ② Session对象功能

    · void setAttribute(String name, Object o):存储数据到session域中。	
    · Object getAttribute(String name):根据key,获取值。
    · void removeAttribute(String name):根据key,删除该键值对。
    
    • 1
    • 2
    • 3

    8、Session原理

    Session是基于Cookie实现的,Cookie中存在一个参数sessionid。

    9、Session的活化和钝化

    Q:服务器重启后,Session中的数据是否还在?
    钝化: 在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中。
    活化: 再次启动服务器后,从文件中加载数据到Session中。

    10、Session的销毁

    ① 默认情况下,无操作,30分钟自动销毁。

    <session-config>
    	<session-timeout>30</session-timeout>
    </session-config>
    
    • 1
    • 2
    • 3

    ② 调用Session对象的invalidate()方法。

    11、Cookie和Session的区别

    Cookie和Session都是来完成一次会话内多次请求间 数据共享 的。
    区别:

    • 存储位置:Cookie是将数据存储在客户端,Session 将数据存储在服务端
    • 安全性:Cookie 不安全,Session安全
    • 数据大小:Cookie最大3KB,Session无大小限制
    • 存储时间:Cookie可以长期存储,Session 默认30分钟
    • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

    5.8 Filter

    • 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
    • 过滤器可以把对资源的请求 拦截 下来,从而实现一些特殊的功能。
    • 过滤器一般完成一些 通用的操作 ,比如:权限控制、统一编码处理、敏感字符处理等等。

    1、Filter快速入门

    定义过滤器类,实现Filter接口,使用 @WebFilter 注解配置拦截资源路径。
    在这里插入图片描述

    2、Filter执行流程

    在这里插入图片描述

    3、Filter拦截路径配置

    Filter可以根据需求,配置不同的拦截资源路径

    @WebFilter(" /*")
    public class FilterDemo implements Filter
    
    • 1
    • 2
    • 拦截具体的资源:/index.jsp,只有访问index.jsp时才会被拦截。
    • 目录拦截:/user/*,访问/user下的所有资源,都会被拦截。
    • 后缀名拦截:*.jsp,访问后缀名为jsp的资源,都会被拦截。
    • 拦截所有:/*,访问所有资源,都会被拦截。

    4、过滤器链

    一个Web应用,可以配置多个过滤器,这多个过滤器称为 过滤器链
    在这里插入图片描述
    注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序。

    5.9 Listener

    • 概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
    • 监听器可以监听就是在application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
    • Listener分类:JavaWeb中提供了8个监听器
      在这里插入图片描述

    1、ServletContextListener使用

    定义一个类,是西安ServletContextListener接口,并在实现类上添加 @WebListener 注解。
    在这里插入图片描述

    5.10 AJAX

    1、介绍

    AJAX(Asynchronous JavaScript And XML):异步 的JavaScript和XML。
    在这里插入图片描述

    AJAX作用:
    ① 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据。(使用了AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了)
    ② 异步交互:可以在 不重新加载整个页面 的情况下,与服务器交换数据并 更新部分网页 的技术,如:搜索联想、用户名是否可用校验等。

    2、JSON

    JavaScript Object Notation,JavaScript 对象表示法。由于其语法简单,层次结构鲜明,现多用于作为数据载体, 在网络中进行数据传输

    • JSON和Java对象转换
      请求数据: JSON字符串转为Java对象。
      响应数据: Java对象转为JSON字符串。

    • Fastjson
      Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON库 ,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。

    使用步骤
    1.导入坐标

    <dependency>
    	<groupld>com.alibaba</groupld>
    	<artifactld>fastjson</artifactld>
    	<version>1.2.62</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.Java对象转JSON String jsonStr = JSON.toJSONString(obj);
    3.JSON字符串转Java对象 User user = JSON.parseObject(jsonStr, User.class);

  • 相关阅读:
    【畅购商城】订单模块之收货人列表
    集合java
    Springboot 集成 Redis集群配置公网IP连接报私网IP连接失败问题
    基于python+Django的二维码生成算法设计与实现
    深入理解MySQL索引的数据结构和事务的四大特性、隔离性的四种级别
    java基础运算符 之 赋值运算符
    vue3监听input保留两位小数点
    一文详解扩散模型:DDPM
    leetcode-470.用 Rand7() 实现 Rand10()
    高防DNS如何实现对DDoS攻击的流量清洗?
  • 原文地址:https://blog.csdn.net/qq_46111316/article/details/127943236