javaweb

文件 MIME 类

前端部分技术就不做讲解了

一.基础知识

(一)概述

JavaWeb 是指,所有通过 Java 语言编写可以通过浏览器访问的程序的总称,叫 JavaWeb。 JavaWeb 是基于请求和响应来开发的。

请求:请求是指客户端给服务器发送数据,叫请求 Request。

相应:响应是指服务器给客户端回传数据,叫响应 Response。

请求响应关系

image-20220328162544838

(二)Web资源分类

web 资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种。

静态资源: html.css.js.txt.mp4 视频 , jpg 图片

动态资源: jsp 页面.Servlet 程

(三)Tomcat 的使用

1.安装

找到你需要用的 Tomcat 版本对应的 zip 压缩包,解压到需要安装的目录即可。

2.目录介绍

bin 专门用来存放 Tomcat 服务器的可执行程序

conf 专门用来存放 Tocmat 服务器的配置文件

lib 专门用来存放 Tomcat 服务器的 jar 包

logs 专门用来存放 Tomcat 服务器运行时输出的日记信息

temp 专门用来存放 Tomcdat 运行时产生的临时数据

webapps 专门用来存放部署的 Web 工程。

work 是 Tomcat 工作时的目录,用来存放 Tomcat 运行时 jsp 翻译为 Servlet 的源码,和 Session 钝化的目录

3.启动Tomcat服务器

找到 Tomcat 目录下的 bin 目录下的 startup.bat 文件,双击,就可以启动 Tomcat 服务器。

测试Tomcat服务器启动成功?
输入:localhost:8080
出现如下界面,说明启动成功
image-20220328162913979

4.Tomcat的停止

找到 Tomcat 的 bin 目录下的 shutdown.bat 双击,就可以停止 Tomcat 服务器。

5.如何修改Tomcat端口号

找到 Tomcat 目录下的 conf 目录,找到 server.xml 配置文件
image-20220328163553570

6.将web工程部署到Tomcat中

第一种部署方法

1.只需要把web工程的目录拷贝到Tomcat的webaapps目录下即可。

例:在 webapps 目录下创建一个 book 工程,将book项目的内容拷贝到下面
image-20220328163847017

2.访问
访问格式:http:localhost:port/工程名/目录/文件名

第二种部署方法

1.找到 Tomcat 下的 conf 目录
2.创建\Catalina\localhost\
3.在当前目录下,创建如下的配置文件
image-20220328164610497

abc.xml配置文件内容如下:

<!-- Context 表示一个工程上下文path 表示工程的访问路径:/abc
docBase 表示你的工程目录在哪里
-->
<Context path="/abc" docBase="E:\book" />

访问这个工程的路径如下:http://ip:port/abc/ 就表示访问 E:\book 目录

7.ROOT 的工程的访问,以及默认index.html 页面的访问

当我们在浏览器地址栏中输入访问地址如下:
http://ip:port/ ====>>>> 没有工程名的时候,默认访问的是 ROOT 工程。
我们在Root工程中创建index.html,输入http://ip:port/ ,默认访问index.html
当我们在浏览器地址栏中输入的访问地址如下:
http://ip:port/工程名/ ====>>>> 没有资源名,默认访问 index.html 页

二.Servlet

(一)servlet是什么

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

(二)Hello World

1.实现步骤

1.实现servlet接口
2.重写service方法
3.配置web.xml文件

2.案例

第一步和第二步
image-20220328211722741

第三步
image-20220328211818820
在上图中

		<servlet>
				<servelt-name>servlet别名</servlet-name>
				<servelt-class>全限定类名</servlet-class>
		</servlet>
		<servlet-mapping>
				<servlet-name>在上面servlet中起的别名</servlet-name>
				<url-pattern>/路径名</url-pattern>
		</servlet-mapping>

3.url地址到servlet的对应关系图

image-20220328212823878

(三).servlet生命周期

1.执行Servlet构造器方法
2.执行init初始化方法

在第一.第二步,是在第一次访问的时候创建Servlet程序会调用。

3.执行service方法

第三步,每次访问都会调用

4.执行destroy销毁方法。

第四步,在web工程停止的时候调用。

(四)GET 和 POST 请求的分发处理

在实现Servlet接口中,在service()方法中,可以获取到请求的方法
image-20221106092551342

​ 向上面方法通过判断来写代码的话,每次就很麻烦,所以通过继承HttpServlet重写doGet()和doPost()就可以了。

1.实现步骤

通过继承HttpServlet类的方式实现Servlet程序
1.编写一个类继承HttpServlet类
2.根据业务需求重写doGet()或doPost()方法
3.到web.xml中配置Servlet程序中的访问地址

2.案例

继承HttpServlet类,并重写doGet()或doPost()方法。

image-20220328224806145

配置web.xml

image-20220328224913454

(五)Servlet类的继承体系

image-20220328225113891

(六)ServletConfig类

1.介绍

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

Servlet 程序和ServletConfig 对象都是由tomcat负责创建,我们负责使用。

Servlet程序是默认第一次访问时候创建,ServletConfig是每个Servlet程序创建时,就会创建一个对应的ServletConfig对象。

2.ServletConfig类的三大作用

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

3.例

web.xml配置

<!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
<servlet>
<!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class 是 Servlet 程序的全类名-->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
<!--init-param 是初始化参数-->
<init-param>
<!--是参数名-->
<param-name>username</param-name>
<!--是参数值-->
<param-value>root</param-value>
</init-param>
<!--init-param 是初始化参数-->
<init-param>
<!--是参数名-->
<param-name>url</param-name>
<!--是参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
<!--servlet-mapping 标签给 servlet 程序配置访问地址-->
<servlet-mapping>
<!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--
url-pattern 标签配置访问地址 <br/>
/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 <br/>
/hello 表示地址为:http://ip:port/工程路径/hello <br/>
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>

servlet代码

@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init 初始化方法");
// 1.可以获取 Servlet 程序的别名 servlet-name 的值
System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
// 2.获取初始化参数 init-param
System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
// 3.获取 ServletContext 对象
System.out.println(servletConfig.getServletContext());
}

注:重写init(ServletConfig config)方法一定要调用父类init(config)方法。

(七)ServletContext 类

1.介绍

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

域对象:可以在整个web工程中想Map一样存储数据的对象。

2.作用

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

3.例

例1:获取web.xml中配置的上下文参数context-param和路径

web.xml

<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>

servlet代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// 1.获取 web.xml 中配置的上下文参数 context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param 参数 username 的值是:" + username);
System.out.println("context-param 参数 password 的值是:" +
context.getInitParameter("password"));
// 2.获取当前的工程路径,格式: /工程路径
System.out.println( "当前工程路径:" + context.getContextPath() );
// 3.获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录<br/>
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));
System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
}

例2:像Map一样存取数据

public class ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// 获取 ServletContext 对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));
context.setAttribute("key1", "value1");
System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}
}
ContextServlet2 代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("Context2 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}

(八)HTTP协议

1.HTTP协议是什么

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

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

2.HTTP请求

HTTP请求分为两类:
GET请求,
POST请求

(1)GET请求

GET请求包括请求行请求头

①请求头:
请求的方式 GET
请求的资源路径
请求的协议和版本号 HTTP/1.1
②请求头:
key:value 组成 不同的键值对,表示不同的含义。

image-20220329173649175

(2)POST请求

POST请求包括:请求行.请求头和请求体(请求头和请求体中间有空行)。

①请求行:
请求的方式 POST
请求的资源路径
请求的协议和版本号 HTTP/1.1

②请求头:
key:value 不同的请求头拥有不同的含义

③请求体:
发送给服务器的数据
image-20220329174021087

(3)常用请求头说明

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

3.HTTP响应

响应行:
响应的协议和版本号
响应状态码
响应状态描述符
响应头:
key:value 不同的响应头,有不同含义
响应体:
回传给客户端的数据

image-20220329193833233

4.MIME 类型说明

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

文件MIME 类型
超文本标记语言文本.html , .htm text/html
GIF 图形.gif image/gif
RTF 文本.rtf application/rtf
普通文本.txt text/plain

等。

(九)HttpServletRequest

1.作用

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

2.常用方法

3.乱码解决

doGet中文乱码 req.setContentType(“text/html;charset=utf-8”)

doPost中文乱码 req.setCharacterEncoding(“utf-8”)

4.请求转发

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

image-20220329200452855

5.base标签作用

base 标签设置页面相对路径工作时参照的地址 ,href 属性就是参数的地址

6./的不同意义

/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/

<a href="/">斜杠</a>

/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径

1.<url-pattern>/servlet1</url-pattern>
2.servletContext.getRealPath(“/”);
3.request.getRequestDispatcher(“/”);

特殊情况:response.sendRediect(“/”); 把斜杠发送给浏览器解析。得到 http://ip:port/

(十)HttpServletResponse

1.作用

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

2.两个输出流说明

字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)

两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

3.乱码问题解决

设置服务器字符集为utf-8: resp.setCharacterEncoding(“utf-8”);

设置服务器字符集为utf-8:
有两种:
第一种:通过响应头进行设置 resp.setHeader(“Content-Type”,"text/html;charset=UTF-8);
第二种:同时设置服务器和客户端都是用UTf-8字符集 resp.setContentType(“text/html;charset=UTF-8”);

4.请求重定向

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

image-20221106094355253

设置请求重定向有两种:
第一种:通过设置状态码和响应头 resp.setStatus(302);
resp.setHeader(“Location”,“http://localhost:8080”);

​ 第二种(推荐使用): resp.sendRedirect(“http:localhost:8080”);

三.JSP

(一).JSP是什么

JSP(全称 Java Server Pages)是由 Sun 公司专门为了解决动态生成 HTML 文档的技术。

1.使用原因

通过 Servlet 输出简单的 html 页面信息都非常不方便。所以 sun 公司推出一种叫做 jsp 的动态页面技术帮助我们实现对页面的输出繁锁工作。

注:JSP不是html,所以不能像html一样直接可以通过浏览器访问,JSP本质是一个Servlet,所以蓄意通过Tomcat服务器才能进行访问。

2.JSP运行原理

jsp 的本质 ,其实是一个 Servlet程序。

jsp页面中的html内容被翻译到Servlet程序的service方法中原样输出,这就是我们说jsp是专用来输出html页面的Servlet程序。

(二).JSP语法

1.jsp文件头部声明介绍

<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” %>

属性描述
language值只能是 java。 表示翻译的得到的是 java 语言的
contentType设置响应头 contentType 的内容
pageEncoding设置当前 jsp 页面的编码
import给当前 jsp 页面导入需要使用的类包
autoFlush设置是否自动刷新 out 的缓冲区,默认为 true
buffer设置 out 的缓冲区大小。默认为 8KB
errorPage设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息
isErrorPage设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异常对象
session设置当前 jsp 页面是否获取 session 对象,默认为 true
extends给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类

2.jsp的三种脚本

(1)第一种:声明脚本

格式:

<%!					
	java代码
%>

作用:
①定义全局变量
②定义static静态代码块
③定义方法
④定义内部类

可以写在类的内部的代码,都可以通过声明脚本来实现。

(2)第二种:表达式脚本(使用很多)

格式:

<%=
	表达式
%>

作用:
①用于向页面输出内容。
②翻译到servlet程序的service方法中,以out.print()打印输出
out是jsp的一个内置对象,用于生成html的源代码

注:表达式不要以分号结尾,否则会报错

表达式脚本可以输出任意类型

(3)第三种:代码脚本(使用最多)

格式:

<%
	java代码
%>

作用:
①代码脚本的内容都会被翻译到service()方法中
②所以书写在service()中的代码,都可以书写到脚本代码中

3.jsp中的注释

单行注释和多行注释能在翻译后的 java 源代码中看见。

<%-- jsp 注释 --%>

4.jsp九大内置对象

打开编译jsp后的java文件,查看_jspService()方法

九大内置对象

对象描述
request请求对象,可以获取请求信息
response响应对象。可以设置响应信息
pageContext当前页面上下文对象。可以在当前上下文保存属性信息
session会话对象。可以获取会话信息
exception异常对象只有在 jsp 页面的 page 指令中设置 isErrorPage=“true” 的时候才会存在
applicationServletContext 对象实例,可以获取整个工程的一些信息
configServletConfig 对象实例,可以获取 Servlet 的配置信息
out输出流
page表示当前 Servlet 对象实例(无用,用它不如使用 this 对象)

九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对象

5.jsp四大域对象

四大域对象经常用来保存数据信息。

对象描述
pageContext可以保存数据在同一个 jsp 页面中使
request可以保存数据在同一个 request 对象中使用。经常用于在转发的时候传递数据
session可以保存在一个会话中使用
application(ServletContext)就是 ServletContext 对象

(三).jsp中的out输出流和response.getWriter()输出流

1.实现图

image-20220330190754195

2.选择

jsp经过翻译之后,底层源代码都是油out来进行输出。我们在 jsp 页面中统一使用 out 来进行输出。避免打乱页面输出内容的顺序。

out.write() 输出字符串没有问题
out.print() 输出任意数据都没有问题(都转换成为字符串后调用的 write 输出)

深入源码,浅出结论:在 jsp 页面中,可以统一使用 out.print()来进行输出

(四).jsp常用标签

1.jsp静态包含

格式: <%@ include file=“路径” %>

例:<%@ include file=“/include/footer.jsp”%>
第一个斜杠/表示为 http://ip:port/工程路径/ 映射到代码的web目录

特点:
1.静态包含**不会翻译被包含的 jsp 页面。**不会被翻译成 servlet
2.静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出

2.jsp动态包含

格式: <jsp:include page=“路径”>< /jsp:include>
例:

<jsp:include page="/include/footer.jsp">
	<jsp:param name="username" value="bbj"/>
	<jsp:param name="password" value="root"/>
</jsp:include>

特点:
1.动态包含会把包含的 jsp 页面也翻译成为 java 代码
2.动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。 JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);
3.动态包含,还可以传递参数。通过request获取。

动态包含的底层原理

image-20220330193219018

3.jsp标签-转发

格式: <jsp:forward page=“”>< / jsp:forward>

例:<jsp:forward page=“/scope2.jsp”>< / jsp:forward>

功能就是请求转发,page是设置请求转发的路径。

四.Listener监听器

(一).概述

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

2.Listener 它是 JavaEE 的规范,就是接口

3.监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。

(二).ServletContextListener 监听器

1.介绍

监听器有八种。

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

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

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

2.使用步骤

1.编写一个类去实现 ServletContextListener
2.实现其两个回调方法
3.到 web.xml 中去配置监听

五.EL表达式

(一).EL表达式是什么

EL 表达式的全称是:Expression Language。是表达式语言。

EL 表达式的什么作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。

因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很

对比jsp的表达式

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

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

(二).EL 表达式搜索域数据的顺序

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

搜索顺序:
pageContext
request
session
application

(三).EL 表达式——运算

语法:${ 运算表达式 }

image-20220330195841689

还有三元运算.empty运算.

“.”点运算 和 [] 中括号运算符

点运算,可以输出 Bean 对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

(四).EL表达式的11个隐含对象

image-20220330200523926

六.JSTL 标签库

(一).介绍

JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标 签库。

EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面 变得更佳简洁。

image-20220330201236013

(二).使用

在 jsp 标签库中使用 taglib 指令引入标签库

CORE 标签库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

相关请搜索CSDN,懒得介绍了,没多大用。

七.文件的上传和下载

(一).文件的上传

1.上传要求

1.要有一个form标签,method=post 请求
2.form标签的encType属性值必须为multipart/form-data值
3.在form标签中使用input type=file 添加上传的文件
4.编写服务器代码(Servlet 程序)接收,处理上传的数据。

encType=multipart/form-data表示提交的数据,以多段(每-一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器

2.文件上传时发送的HTTP协议内容

image-20220331214147050

(二).文件的下载

下载的常用API说明:
response.getOutputStream();
servletContext.getResourceAsStream( ) ;
servletContext.getMimeType( );
response.setContentType();

response . setHeader( “Content-Disposition”," attachment; fileName=1 . jpg");
这个响应头告诉浏览器。这是需要下载的。而attachment表示附件,也就是下载的一一个文件。fileName= 后面,表示下载的文件名。

附件名乱码解决:
URLEncoder编码
BASE64编码
每个浏览器使用的编码不同,需要使用对应的编码

八.Cookie和Session

(一).Cookie

1.什么是Cookie?

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

2.Cookie的创建

image-20220331214832210

代码:

protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
	//1 创建 Cookie 对象
	Cookie cookie = new Cookie("key4", "value4");
	//2 通知客户端保存 Cookie
	resp.addCookie(cookie);
	//1 创建 Cookie 对象
	Cookie cookie1 = new Cookie("key5", "value5");
	//2 通知客户端保存 Cookie
	resp.addCookie(cookie1);
	resp.getWriter().write("Cookie 创建成功");
}

3.Cookie的操作

服务端获取客户端的Cookie:req.getCookies()
等。

4.浏览器查看Cookie

在开发者模式中点击application

5.Cookie的生命控制

Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

setMaxAge()
正数,表示在指定的秒数后过期
负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
零,表示马上删除 Cooki

6.Cookie 有效路径 Path 的设置

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。 path 属性是通过请求的地址来进行有效的过滤。

方法:cookie.setPath(String path);

(二).Session

1.什么是Session

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

2.如何创建Session.Session的Id和判断是否是为新创建的

创建:request.getSession();

判断是否为新:session.isNew();

每个会话都有一个身份证号,也就是ID值,唯一:session.getId();

3.Session生命周期控制

public void setMaxlnactiveInterval(int interval)设 置Session 的超时时间(以秒为单位),超过指定的时长,Session就会被销毁。
值为正数的时候,设定Session的超时时长。
负数表示永不超时(极少使用)
public int getMaxlnactiveInterval()获取Session的超时时间
public void invalidate()让当前Session会话马上超时无效。

Session默认的超时时长为30分钟。
因为Tomcat服务器的配置文件web.xml中默认由以下的配置,标识当前tomcat服务器下的所有Sessin超时配置默认为30分钟。

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

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

image-20220331220149624

九.过滤器

1.Filter 什么是过滤器

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

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

2.Filter 的工作流程图

image-20220331220552458

例:

public class AdminFilter implements Filter {
/**
* doFilter 方法,专门用于拦截请求。可以做权限检查
*/
@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) {
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
return;
} else {
// 让程序继续往下访问用户的目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
}
}


web.xml 中的配置:
<!--filter 标签用于配置一个 Filter 过滤器-->
<filter>
<!--给 filter 起一个别名-->
<filter-name>AdminFilter</filter-name>
<!--配置 filter 的全类名-->
<filter-class>com.atguigu.filter.AdminFilter</filter-class>
</filter>
<!--filter-mapping 配置 Filter 过滤器的拦截路径-->
<filter-mapping>
<!--filter-name 表示当前的拦截路径给哪个 filter 使用-->
<filter-name>AdminFilter</filter-name>
<!--url-pattern 配置拦截路径
/ 表示请求地址为:http://ip:port/工程路径/ 映射到 IDEA 的 web 目录
/admin/* 表示请求地址为:http://ip:port/工程路径/admin/*
-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>

3.使用步骤

1.编写一个类去实现 Filter 接口
2.实现过滤方法 doFilter()
3.到 web.xml 中去配置 Filter 的拦截路

4.Filter 的生命周期

Filter的生命周期包含几个方法:
1.构造器方法
2.init 初始化方法
第1,2步,在web工程启动的时候执行(Filter 已经创建)
3.doFilter 过滤方法
第3步,每次拦截到请求,就会执行
4.destroy 销毁
第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

5.FilterConfig 类

FilterConfig类见名知义,它是Filter过滤器的配置文件类。
Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了Filter 配置文件的配置信息。

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

6.FilterChain 过滤器链

image-20220331223323117

7.拦截路径

精确匹配:
/target.jsp
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp

目录匹配
/admin/*
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*

后缀名匹配
*.html
以上配置的路径,表示请求地址必须以.html 结尾才会拦截到

十.ThreadLocal

Threadlocal的作用,它可以解决多线程的数据安全问题。

ThreadLocal它可以给当前线程关联一一个数据(可以是普通变量,可以是对象,也可以是数组,集合)

ThreadLocal的特点:
1.ThreadLocal 可以为当前线程关联一个数据。 (它可以像 Map一样存取数据,key 为当前线程)
2.每一个ThreadLocal对象,只能为当前线程关联一个数据, 如果要为当前线程关联多个数据,就需要使用多个ThreadLocal对象实例。
3.每个ThreadLocal对象实例定义的时候,一般都是static 类型
4.ThreadLocal 中保存数据,在线程销毁后。会由JVM虚拟自动释放。
destroy 销毁
第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

5.FilterConfig 类

FilterConfig类见名知义,它是Filter过滤器的配置文件类。
Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了Filter 配置文件的配置信息。

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

6.FilterChain 过滤器链

[外链图片转存中…(img-W2mid7tF-1667699178783)]

7.拦截路径

精确匹配:
/target.jsp
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp

目录匹配
/admin/*
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*

后缀名匹配
*.html
以上配置的路径,表示请求地址必须以.html 结尾才会拦截到

十.ThreadLocal

Threadlocal的作用,它可以解决多线程的数据安全问题。

ThreadLocal它可以给当前线程关联一一个数据(可以是普通变量,可以是对象,也可以是数组,集合)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值