JavaWeb面经

目录

前言、13个常见javaweb面试问题

1. servlet的生命周期

  • 加载并实例化:当servlet容器启动后,servlet会通过类加载器来加载servlet容器,完成后再new一个servlet对象完成实例化。
  • init()初始化:调用Servlet对象的初始化方法做初始化信息,此方法只会被调用一次!
  • service()执行:用来处理请求,在HttpServlet中被封装为了doGet()方法和doPost()方法。
  • destroy()销毁:在长时间没有被调用或者是服务器关闭时,会调用destroy方法来销毁!

2. servlet是单例的嘛?

  • Servlet默认是是单例多线程的~

3. cookie和session的区别

  • cookie的数据是保存在客户端的,session的数据是保存在服务器端的
  • cookie只能存放在浏览器中,session还可以存放在Redis或者数据库中
  • cookie的安全性不太高,session安全性会更好
  • cookie容易被欺骗,session不太会
  • cookie可以减轻服务性能,session可以在一定时间保存在服务器上,当访问增多时比较耗内存

4. session的原理

  • 当浏览器第一次发送请求给服务器端时,服务器会创建一个session,同时这个时候也会创建一个cookie(name为jSessionID,Value为Session的id值),然后将cookie发送至浏览器端
  • 浏览器发送第n次请求给服务端,都会携带着这个jSessionID的cookie对象
  • 可以通过查询name为JsessionID的cookie的value值,查看有没有这个session对象

5. 如何客户端禁止Cookie,那么Session还能用吗?

  • 可以用,Session只是依赖SessionID
  • 如果Cookie被禁止了,还可以在url中添加Session的方法来保证Session的正常使用~

6. 请求转发和重定向的区别(forward和redirect的区别)

  • forward的地址栏不会发生变化,而redirect的地址栏会发生变化。
  • forward的数据存取是在request域中,而redirect的数据存取是在session域中。
  • forward不能跨域访问,而redirect可以跨域。
  • forward是一次请求,redirect是一次会话,多次请求!
  • forward比redirect更加高效,所以能forward就不redirect!

7. 如何实现跨域

  • 服务器端跨域设置CORS等于*。
  • 单个接口使用注解@CrossOrigin运行跨域。
  • 使用jsonp跨域:利用script标签的src连接可以访问不同源的特性,加载远程返回的“JS函数”来执行的

8. 跨域的session如何处理

  • 使用cookie跨域共享来处理Session跨域问题,设置Cookie的有效范围即可!
  • 使用Spring Session
  • 使用JWT的机制
  • 使用Token机制
    以上四种方式具体的方式感兴趣的可以自行去了解一下!

9. 拦截器和过滤器的区别

  • 拦截器是实现HandlerInterceptor接口,过滤器是实现Filter接口
  • 拦截器有三个时间节点,而过滤器只有一个时间点
  • 拦截器的底层原理是反射机制,而过滤器底层仅仅是函数的回调
  • 拦截器是属于框架对象,而过滤器是属于Servlet对象
  • 拦截器一般做请求验证和拦截请求,而过滤器一般是设置request和response的参数,侧重于数据过滤
  • 过滤器在拦截器之前执行!
  • 如果请求不被DispatcherServlet接受,那么拦截器失效!

10. http发送请求的过程

  • 浏览器根据域名进行解析IP地址
  • 浏览器与服务器建立一个TCP连接
  • 浏览器给服务器发送一个HTTP请求
  • 服务器端响应HTTP请求,浏览器得到HTML代码
  • 浏览器解析HTML代码,并请求HTML代码中的资源
  • 关闭服务器端TCP连接,浏览器对页面进行渲染

11. 常见的http状态码有哪些?

  • 200:成功
  • 302:重定向
  • 304:访问缓存
  • 404:无对应的资源
  • 405:请求方式中没有doXXX的方法
  • 500:服务器端在执行请求时发生了错误!

12. get请求和post请求的区别

  • get请求时可以缓存的,而post请求是不可以缓存的
  • get请求的数据会被连接在地址栏后面,而post请求的数据会被放入到请求体中
  • get请求的数据传输大小不能超过4k,而post请求数据没有大小限制!
  • get请求不太安全,而post请求比较安全。
  • get请求能够保留历史记录,而post请求不能保留!

13. 什么是ajax?能做什么?

Ajax(Asynchronous JavaScript and XML)是异步的JavaScript和XML
作用:可以实现异步刷新,也就是在整个网页中,实现部分内容的刷新了,不用重新加载整个网页界面!
可以增强用户的体验感,而且可以减轻服务器端的负载!

一、JavaScript

1、JavaScript 介绍

Javascript 语言诞生主要是完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解析执行JavaScript 代码。
JS 是Netscape 网景公司的产品,最早取名为LiveScript;为了吸引更多java 程序员。更名为JavaScript。
JS 是弱类型,Java 是强类型。
特点:

  1. 交互性(它可以做的就是信息的动态交互)
  2. 安全性(不允许直接访问本地硬盘)
  3. 跨平台性(只要是可以解释JS 的浏览器都可以执行,和平台无关)

2、JavaScript 和html 代码的结合方式

第一种方式

只需要在head 标签中,或者在body 标签中, 使用script 标签来书写JavaScript 代码
示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        // alert 是JavaScript 语言提供的一个警告框函数。
        // 它可以接收任意类型的参数,这个参数就是警告框的提示信息
        alert("hello javaScript!");
    </script>
</head>
<body>
</body>
</html>

3、js 中的事件

什么是事件?事件是电脑输入设备与页面进行交互的响应。我们称之为事件。
常用的事件:
onload 加载完成事件: 页面加载完成之后,常用于做页面js 代码初始化操作
onclick 单击事件: 常用于按钮的点击响应操作。
onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。
onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作
onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法。

4. 事件的注册又分为静态注册和动态注册两种:

在这里插入图片描述

5、DOM 模型

DOM 全称是Document Object Model 文档对象模型
大白话,就是把文档中的标签,属性,文本,转换成为对象来管理。
那么它们是如何实现把标签,属性,文本转换成为对象来管理呢。这就是我们马上要学习的重点。
在这里插入图片描述

6. 节点的常用属性和方法

节点就是标签对象

  • 方法:
    通过具体的元素节点调用
    getElementsByTagName()
    方法,获取当前节点的指定标签名孩子节点

    appendChild( oChildNode )
    方法,可以添加一个子节点,oChildNode 是要添加的孩子节点

  • 属性:
    childNodes
    属性,获取当前节点的所有子节点
    firstChild
    属性,获取当前节点的第一个子节点

二、JQuery

1. jQuery 介绍

什么是jQuery ?
jQuery,顾名思义,也就是JavaScript 和查询(Query),它就是辅助JavaScript 开发的js 类库。

jQuery 核心思想!!!
它的核心思想是write less,do more(写得更少,做得更多),所以它实现了很多浏览器的兼容问题。

jQuery 流行程度
jQuery 现在已经成为最流行的JavaScript 库,在世界前10000 个访问最多的网站中,有超过55%在使用
jQuery。

jQuery 好处!!!
jQuery 是免费、开源的,jQuery 的语法设计可以使开发更加便捷,例如操作文档对象、选择DOM 元素、制作动画效果、事件处理、使用Ajax 以及其他功能

在这里插入图片描述

2. 使用jQuery 给一个按钮绑定单击事件?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
    <script type="text/javascript">
        // window.onload = function () {
        // var btnObj = document.getElementById("btnId");
        // // alert(btnObj);//[object HTMLButtonElement] ====>>> dom 对象
        // btnObj.onclick = function () {
        // alert("js 原生的单击事件");
        // }
        // }
        $(function () { // 表示页面加载完成之后,相当window.onload = function () {}
            var $btnObj = $("#btnId"); // 表示按id 查询标签对象
            $btnObj.click(function () { // 绑定单击事件
                alert("jQuery 的单击事件");
            });
        });
    </script>
</head>
<body>
<button id="btnId">SayHello</button>
</body>
</html>

3、什么是jQuery 对象,什么是dom 对象

Dom 对象
1.通过getElementById()查询出来的标签对象是Dom 对象
2.通过getElementsByName()查询出来的标签对象是Dom 对象
3.通过getElementsByTagName()查询出来的标签对象是Dom 对象
4.通过createElement() 方法创建的对象,是Dom 对象
DOM 对象Alert 出来的效果是:[object HTML 标签名Element]

jQuery 对象
5.通过JQuery 提供的API 创建的对象,是JQuery 对象
6.通过JQuery 包装的Dom 对象,也是JQuery 对象
7.通过JQuery 提供的API 查询到的对象,是JQuery 对象
jQuery 对象Alert 出来的效果是:[object Object]

4. jQuery 对象的本质是什么?

jQuery 对象是dom 对象的数组+ jQuery 提供的一系列功能函数。

5. jQuery 对象和Dom 对象使用区别

jQuery 对象不能使用DOM 对象的属性和方法
DOM 对象也不能使用jQuery 对象的属性和方法

6. Dom 对象和jQuery 对象互转

  • 1、dom 对象转化为jQuery 对象(*重点)
    1、先有DOM 对象
    2、$( DOM 对象) 就可以转换成为jQuery 对象
  • 2、jQuery 对象转为dom 对象(*重点)
    1、先有jQuery 对象
    2、jQuery 对象[下标]取出相应的DOM 对象
    在这里插入图片描述

7、jQuery 选择器(*****重点)

7.1、基本选择器(****重点)

在这里插入图片描述

7.2、层级选择器(****重点)

在这里插入图片描述

7.3、过滤选择器

基本过滤器:

在这里插入图片描述

内容过滤器:

在这里插入图片描述

属性过滤器:

在这里插入图片描述

表单过滤器:

在这里插入图片描述

表单对象属性过滤器:

在这里插入图片描述

8、jQuery 事件操作

$( function(){} );window.onload = function(){}的区别?
他们分别是在什么时候触发?
1、jQuery 的页面加载完成之后是浏览器的内核解析完页面的标签创建好DOM 对象之后就会马上执行。
2、原生js 的页面加载完成之后,除了要等浏览器内核解析完标签创建好DOM 对象,还要等标签显示时需要的内容加载完成。

他们触发的顺序?
1、jQuery 页面加载完成之后先执行
2、原生js 的页面加载完成之后

他们执行的次数?
1、原生js 的页面加载完成之后,只会执行最后一次的赋值函数。
2、jQuery 的页面加载完成之后是全部把注册的function 函数,依次顺序全部执行。

9. javaScript 事件对象

事件对象,是封装有触发的事件信息的一个javascript 对象。
我们重点关心的是怎么拿到这个javascript 的事件对象。以及使用。

如何获取呢javascript 事件对象呢?
在给元素绑定事件的时候,在事件的function( event ) 参数列表中添加一个参数,这个参数名,我们习惯取名为event。
这个event 就是javascript 传递参事件处理函数的事件对象。
比如:
//1.原生javascript 获取事件对象

window.onload = function () {
document.getElementById("areaDiv").onclick = function (event) {
console.log(event);
}
}

//2.jQuery 代码获取事件对象

$(function () {
$("#areaDiv").click(function (event) {
console.log(event);
});
});

//3.使用bind 同时对多个事件绑定同一个函数。怎么获取当前操作是什么事件。

$("#areaDiv").bind("mouseover mouseout",function (event) {
if (event.type == "mouseover") {
console.log("鼠标移入");
} else if (event.type == "mouseout") {
console.log("鼠标移出");
}
});

三、Tomcat

1.JavaWeb 的概念

  • a) 什么是JavaWeb
    JavaWeb 是指,所有通过Java 语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。
    JavaWeb 是基于请求和响应来开发的。
  • b)什么是请求
    请求是指客户端给服务器发送数据,叫请求Request。
  • c)什么是响应
    响应是指服务器给客户端回传数据,叫响应Response。
  • d)请求和响应的关系
    请求和响应是成对出现的,有请求就有响应。

2. Web 资源的分类

web 资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种。
静态资源: html、css、js、txt、mp4 视频, jpg 图片
动态资源: jsp 页面、Servlet 程序

3. 常用的Web 服务器

  • Tomcat:由Apache 组织提供的一种Web 服务器,提供对jsp 和Servlet 的支持。它是一种轻量级的javaWeb 容器(服务器),也是当前应用最广的JavaWeb 服务器(免费)。

  • Jboss:是一个遵从JavaEE 规范的、开放源代码的、纯Java 的EJB 服务器,它支持所有的JavaEE 规范(免费)。

  • GlassFish: 由Oracle 公司开发的一款JavaWeb 服务器,是一款强健的商业服务器,达到产品级质量(应用很少)。

  • Resin:是CAUCHO 公司的产品,是一个非常流行的服务器,对servlet 和JSP 提供了良好的支持,
    性能也比较优良,resin 自身采用JAVA 语言开发(收费,应用比较多)。

  • WebLogic:是Oracle 公司的产品,是目前应用最广泛的Web 服务器,支持JavaEE 规范,
    而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。

四、XML

1、xml简介:

    1. 什么是xml?
      xml 是可扩展的标记性语言。
    1. xml 的作用?
      xml 的主要作用有:
      1、用来保存数据,而且这些数据具有自我描述性
      2、它还可以做为项目或者模块的配置文件
      3、还可以做为网络传输数据的格式(现在JSON 为主)。
  • 3、xml 语法
    1. 文档声明。
    2. 元素(标签)
    3. xml 属性
    4. xml 注释
    5. 文本区域(CDATA 区)

2. 文本区域(CDATA 区)

CDATA 语法可以告诉xml 解析器,我CDATA 里的文本内容,只是纯文本,不需要xml 语法解析
CDATA 格式:<![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml ]]>
在这里插入图片描述

3. xml 解析技术介绍

xml 可扩展的标记语言。
不管是html 文件还是xml 文件它们都是标记型文档,都可以使用w3c 组织制定的dom 技术来解析。

在这里插入图片描述

document 对象表示的是整个文档(可以是html 文档,也可以是xml 文档)

早期JDK 为我们提供了两种xml 解析技术DOM 和Sax 简介已经过时,但我们需要知道这两种技术
dom 解析技术是W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java 对dom 技术解析标记也做了实现。

sun 公司在JDK5 版本对dom 解析技术进行升级:SAX( Simple API for XML )
SAX 解析,它跟W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的容。
它是一行一行的读取xml 文件进行解析的。不会创建大量的dom 对象。
所以它在解析xml 的时候,在内存的使用上。和性能上。都优于Dom 解析。

第三方的解析:
jdom 在dom 基础上进行了封装、
dom4j 又对jdom 进行了封装。
pull 主要用在Android 手机开发,是在跟sax 非常类似都是事件机制解析xml 文件。

这个Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml 文件

4. dom4j 解析技术

由于dom4j 它不是sun 公司的技术,而属于第三方公司的技术,我们需要使用dom4j 就需要到dom4j 官网下载dom4j的jar 包。

五、Servlet

1. 什么是Servlet

1、Servlet 是JavaEE 规范之一。规范就是接口
2、Servlet 就JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

2. url 地址到Servlet 程序的访问

在这里插入图片描述

3. Servlet 的生命周期

  • 1、执行Servlet 构造器方法
  • 2、执行init 初始化方法
    第1、2步,是在第一次访问,的时候创建Servlet 程序会调用。
  • 3、执行service 方法
    第3步,每次访问都会调用。
  • 4、执行destroy 销毁方法
    第4步,在web 工程停止的时候调用。

4. 通过继承HttpServlet 实现Servlet 程序

一般在实际项目开发中,都是使用继承HttpServlet 类的方式去实现Servlet 程序。

1、编写一个类去继承HttpServlet 类
2、根据业务需要重写doGet 或doPost 方法
3、到web.xml 中的配置Servlet 程序的访问地址

5. Servlet 类的继承体系

在这里插入图片描述

6. ServletConfig 类

ServletConfig 类从类名上来看,就知道是Servlet 程序的配置信息类。

Servlet 程序和ServletConfig 对象都是由Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个Servlet 程序创建时,就创建一个对应的ServletConfig 对象。

ServletConfig 类的三大作用

1、可以获取Servlet 程序的别名servlet-name 的值
2、获取初始化参数init-param
3、获取ServletContext 对象
ServletContext 类

7. 什么是ServletContext?

1、ServletContext 是一个接口,它表示Servlet 上下文对象
2、一个web 工程,只有一个ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在web 工程部署启动的时候创建。在web 工程停止的时候销毁。

  • 什么是域对象?
    域对象,是可以像Map 一样存取数据的对象,叫域对象。
    这里的域指的是存取数据的操作范围,整个web 工程。

在这里插入图片描述

ServletContext 类的四个作用

1、获取web.xml 中配置的上下文参数context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像Map 一样存取数据

五、 HTTP 协议

1. 什么是HTTP 协议

  • 什么是协议?

协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。

所谓HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP 协议。

HTTP 协议中的数据又叫报文。

2. 请求的HTTP 协议格式

客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。

请求又分为GET 请求,和POST 请求两种

2.1 GET 请求

1、请求行
(1) 请求的方式       GET
(2) 请求的资源路径     [+?+请求参数]
(3) 请求的协议的版本号   HTTP/1.1

2、请求头
key : value 组成不同的键值对,表示不同的含义。
在这里插入图片描述

2.2 POST 请求

1、请求行
(1) 请求的方式; ;         POST
(2) 请求的资源路径;     [+?+请求参数]
(3) 请求的协议的版本号;     HTTP/1.1

2、请求头
(1) key : value 不同的请求头,有不同的含义
空行

3、请求体===>>> 就是发送给服务器的数据
在这里插入图片描述

2.3 常用请求头的说明

Accept:  表示客户端可以接收的数据类型
Accpet-Languege:  表示客户端可以接收的语言类型
User-Agent:  表示客户端浏览器的信息
Host:  表示请求时的服务器ip 和端口号

2.4 哪些是GET 请求,哪些是POST 请求

  • GET 请求有哪些:
    1、form 标签method=get
    2、a 标签
    3、link 标签引入css
    4、Script 标签引入js 文件
    5、img 标签引入图片
    6、iframe 引入html 页面
    7、在浏览器地址栏中输入地址后敲回车
  • POST 请求有哪些:
    8、form 标签method=post

3. 响应的HTTP 协议格式

1、响应行
(1) 响应的协议和版本号
(2) 响应状态码
(3) 响应状态描述符

2、响应头
(1) key : value 不同的响应头,有其不同含义
空行
3、响应体---->>> 就是回传给客户端的数据
在这里插入图片描述

4. 常用的响应码说明

200   表示请求成功
302   表示请求重定向(明天讲)
404   表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500   表示服务器已经收到请求,但是服务器内部错误(代码错误)

5. MIME 类型说明

MIME 是HTTP 协议中数据类型。

MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务。MIME 类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。

常见的MIME 类型:
在这里插入图片描述
在这里插入图片描述

6. HttpServletRequest 类有什么作用。

每次只要有请求进入Tomcat 服务器,Tomcat 服务器就会把请求过来的HTTP 协议信息解析好封装Request 对象中。
然后传递到service 方法(doGet 和doPost)中给我们使用。我们可以通过HttpServletRequest 对象,获取到所有请求的信息。

7. 请求的转发

什么是请求的转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
在这里插入图片描述

8. Web 中的相对路径和绝对路径

在javaWeb 中,路径分为相对路径和绝对路径两种:

**.** 表示当前目录
**..** 表示上一级目录
资源名  表示当前目录/资源名

在实际开发中,路径都使用绝对路径,而不简单的使用相对路径。
1、绝对路径
2、base+相对

9. web 中/ 斜杠的不同意义

在这里插入图片描述

10. HttpServletResponse 类的作用

HttpServletResponse 类和HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个Response 对象传递给Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse 对象来进行设置

两个输出流的说明。

字节流: getOutputStream(); 常用于下载(传递二进制数据)
字符流:getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter();
        resp.getOutputStream();

    }
}

11. 请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
在这里插入图片描述

请求重定向的第一种方案:

// 设置响应状态码302 ,表示重定向,(已搬迁)
resp.setStatus(302);
// 设置响应头,说明新的地址在哪里
resp.setHeader("Location", "http://localhost:8080");

请求重定向的第二种方案(推荐使用):

resp.sendRedirect("http://localhost:8080");

六、JSP(过时,不咋用了)

1. 什么是jsp,它有什么用?

jsp 的全换是java server pages。Java 的服务器页面。

jsp 的主要作用是代替Servlet 程序回传html 页面的数据。

因为Servlet 程序回传html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。

2. 什么是Listener 监听器?

1、Listener 监听器它是JavaWeb 的三大组件之一。
JavaWeb 的三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

2、Listener 它是JavaEE 的规范,就是接口
3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。

3. ServletContextListener 监听器

ServletContextListener 它可以监听ServletContext 对象的创建和销毁。

ServletContext 对象在web 工程启动的时候创建,在web 工程停止的时候销毁。

监听到创建和销毁之后都会分别调用ServletContextListener 监听器的方法反馈。

两个方法分别是:

public interface ServletContextListener extends EventListener {
/**
* 在ServletContext 对象创建之后马上调用,做初始化
*/
public void contextInitialized(ServletContextEvent sce);
/**
* 在ServletContext 对象销毁之后调用
*/
public void contextDestroyed(ServletContextEvent sce);
}

如何使用ServletContextListener 监听器监听ServletContext 对象。

使用步骤如下:
1、编写一个类去实现ServletContextListener
2、实现其两个回调方法
3、到web.xml 中去配置监听器

监听器实现类:

public class MyServletContextListenerImpl implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext 对象被创建了");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext 对象被销毁了");
}
}

web.xml 中的配置:

<!--配置监听器-->
<listener>
<listener-class>com.atguigu.listener.MyServletContextListenerImpl</listener-class>
</listener>

七、EL 表达式(过时,不太用)

1.什么是EL 表达式,EL 表达式的作用?

EL 表达式的全称是:Expression Language。是表达式语言。
EL 表达式的什么作用:EL 表达式主要是代替jsp 页面中的表达式脚本在jsp 页面中进行数据的输出。
因为EL 表达式在输出数据的时候,要比jsp 的表达式脚本要简洁很多。

<body>
<%
request.setAttribute("key","值");
%>
表达式脚本输出key 的值是:
<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%><br/>
EL 表达式输出key 的值是:${key1}
</body>

EL 表达式的格式是:${表达式}

EL 表达式在输出null 值的时候,输出的是空串。
jsp 表达式脚本输出null 值的时候,输出的是null 字符串。

2. EL 表达式搜索域数据的顺序

EL 表达式主要是在jsp 页面中输出数据。

主要是输出域对象中的数据。

当四个域中都有相同的key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

<body>
<%
//往四个域中都保存了相同的key 的数据。
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
${ key }
</body>

八、Cookie 和Session

1. 什么是Cookie?

1、Cookie 翻译过来是饼干的意思。
2、Cookie 是服务器通知客户端保存键值对的一种技术。
3、客户端有了Cookie 后,每次请求都发送给服务器。
4、每个Cookie 的大小不能超过4kb

2. 如何创建Cookie

在这里插入图片描述

3. 服务器如何获取Cookie

服务器获取客户端的Cookie 只需要一行代码:req.getCookies():Cookie[]
在这里插入图片描述

4. Cookie 生命控制

在这里插入图片描述

5. 什么是Session 会话?

1、Session 就一个接口(HttpSession)。
2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3、每个客户端都有自己的一个Session 会话。
4、Session 会话中,我们经常用来保存用户登录之后的信息。

cookie保存在客户端,session保存在服务器端

6. 如何创建Session 和获取(id 号,是否为新)

在这里插入图片描述

7. Session 生命周期控制

在这里插入图片描述在这里插入图片描述

如果说。你希望你的web 工程,默认的Session 的超时时长为其他时长。你可以在你自己的web.xml 配置文件中做
以上相同的配置。就可以修改你的web 工程所有Seession 的默认超时时长。

<!--表示当前web 工程。创建出来的所有Session 默认是20 分钟超时时长-->
<session-config>
<session-timeout>20</session-timeout>
</session-config>

如果你想只修改个别Session 的超时时长。就可以使用上面的API。setMaxInactiveInterval(int interval)来进行单独的设置。
session.setMaxInactiveInterval(int interval)单独设置超时时长。

8. Session 超时的概念介绍:

在这里插入图片描述

9. 浏览器和Session 之间关联的技术内幕

Session 技术,底层其实是基于Cookie 技术来实现的。
在这里插入图片描述

九、Filter过滤器

1. 什么是Filter 过滤器

1、Filter 过滤器它是JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
2、Filter 过滤器它是JavaEE 的规范。也就是接口
3、Filter 过滤器它的作用是:拦截请求,过滤响应。

拦截请求常见的应用场景有:
1、权限检查
2、日记操作
3、事务管理
……等等

2. Filter 的初体验

要求:在你的web 工程下,有一个admin 目录。这个admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必
须是用户登录之后才允许访问。
思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到Session 域中。所以要检查用户是否
登录,可以判断Session 中否包含有用户登录的信息即可!!!

<%
	Object user = session.getAttribute("user");
	// 如果等于null,说明还没有登录
	if (user == null) {
		request.getRequestDispatcher("/login.jsp").forward(request,response);
		return;
	}
%>

3. Filter 的工作流程图:

在这里插入图片描述

4. Filter 的生命周期

在这里插入图片描述

5. FilterConfig 类

FilterConfig 类见名知义,它是Filter 过滤器的配置文件类。

Tomcat 每次创建Filter 的时候,也会同时创建一个FilterConfig 类,这里包含了Filter 配置文件的配置信息。

FilterConfig 类的作用是获取filter 过滤器的配置内容
1、获取Filter 的名称filter-name 的内容
2、获取在Filter 中配置的init-param 初始化参数
3、获取ServletContext 对象

6. Filter 的拦截路径

6.1、精确匹配

在这里插入图片描述

6.2、目录匹配

在这里插入图片描述

6.3、后缀名匹配

在这里插入图片描述

Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!

7.ThreadLocal 的使用

ThreadLocal 的作用,它可以解决多线程的数据安全问题。
ThreadLocal 它可以给当前线程关联一个数据(可以是普通变量,可以是对象,也可以是数组,集合)
ThreadLocal 的特点:
1、ThreadLocal 可以为当前线程关联一个数据。(它可以像Map 一样存取数据,key 为当前线程)
2、每一个ThreadLocal 对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数据,就需要使用多个ThreadLocal 对象实例。
3、每个ThreadLocal 对象实例定义的时候,一般都是static 类型
4、ThreadLocal 中保存数据,在线程销毁后。会由JVM 虚拟自动释放。

十、JSON、AJAX、i18n

详细内容见:点击此链接

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值