IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaWeb知识点总结 -> 正文阅读

[Java知识库]JavaWeb知识点总结

Web初步认识:

软件架构:

C/S:客户端/服务器端

B/S:浏览器/服务器端

资源分类:

?静态资源:所有用户访问后,得到的展示结果都一样

? ? ? ?静态资源可以直接被浏览器解析

? ? ? ?如:html、css、JavaScript

动态资源:每个用户访问后,得到的结果可能不一样。

? ? ? ?动态资源需要先转换为静态资源,再返回给浏览器

? ? ? ? 如:Servlet/jsp,php,asp…

网络通信三要素:

  • IP:电子设备(计算机)在网络中的唯一标识。
  • 端口:应用程序在计算机中的唯一标识。0~65536
  • 传输协议:

? ? ?基础传输协议:

????????TCP:安全协议,三次握手。速度稍慢

????????UDP:不安全协议,速度快

Web服务器软件:

服务器:安装了服务器软件的计算机

服务器软件:接收用户的请求,处理请求,做出响应。

Web服务器软件:

主要功能是提供网上信息浏览服务

常见的JAVA相关的Web服务器软件:

WebLogic: Oracle公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。

WebSphere: IBM公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。

JBOSS: JBOSS公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。

Tomcat: Apache基金组织,中小型JavaEE服务器,仅仅支持少量的JavaEE规范。开源、免费的。

Servlet:

概念:server apple,运行在服务器端的小程序

Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则

将来我们自定义一个类,实现Servlet接口,复写方法。

基本快速使用:

  1. 创建JavaEE项目
  2. 定义一个类,实现Servlet接口
  3. 实现接口中的抽象方法
  4. 配置Servlet:

web.xml中配置

Tomcat执行Servlet的原理:

1.当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径

2.查找web.xml文件,是否有对应的<url-pattern>标签体内容

3.有则找到对应的<servlet-class>全类名

4.tomcat会将字节码文件加载进内存并创建其对象

5.调用其方法

Servlet中的生命周期:

被创建:执行init方法,只执行一次(一般用于加载资源)

????????Servlet什么时候被创建?

  • 默认情况下,第一次被访问时创建
  • 可以配置指定Servlet的创建时机

????????在<servlet>标签下配置

????????????????1.第一次被访问时,创建

????????????????*<load-on-startup>的值为负数

????????????????2.在服务器启动时,创建

????????????????*<load-on-startup>的值为0或正数

????????inint方法只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

注意:多个用户同时访问时,可能存在线程安全问题。尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

提供服务:执行service方法,执行多次

????????每次访问Servlet时,Service方法都会被调用一次。

被销毁:执行destroy方法,只执行一次

Servlet被销毁时执行。服务器关闭时,Servlet被销毁

Servlet3.0注解配置:

????????好处:

????????支持注解配置。可以不需要web.xml。

????????在实现类上使用@WebServlet注解,进行配置

????????@WebServlet("资源路径")

Servlet体系结构:

????????Servlet --- 接口

????????|继承

????????GenericServlet --- 抽象类

????????|继承

????????HttpServlet --- 抽象类

GenericServlet:

该类将Servlet接口中的方法做了默认空实现,只将service()方法作为抽象

将来定义Servlet类时,可以继承GenericServlet类,实现service方法即可。

HttpServlet:

该类对Http协议的封装,简化操作。

使用步骤:

  • 定义类继承HttpServlet
  • 复写doGet/doPost方法

Servlet相关配置:

urlpartten:Servlet访问路径

一个Servlet可以定义多个访问路径@WebServlet({"url1","url2"})

路径定义规则:

????????1./xxx:一般路径

????????2./xxx/xxx:多层路径,目录结构

????????3.*.do:*通配符?

Http协议:

概念: Hyper Text Transfer Protocol 超文本传输协议,规定了 浏览器和万维网之间互相通信的规则

传输协议:定义了客户端和服务器端通信时,发送数据的格式??

特点:

  • 基于TCP/IP的高级协议
  • 默认端口号:80
  • 基于请求/响应模型:一个请求一个响应
  • 无状态的:每次请求之间相互独立,不能独立数据

历史版本:

1.0版本:每一次请求响应都会建立新的连接

1.1版本:会复用请求

请求消息:客户端发送给服务器端的数据

响应消息:服务器端发送给客户端的数据

请求消息数据格式:

请求行:

? ? ? ? 格式:

请求方式

请求url

请求协议/版本

????????请求方式:

????????HTTP协议有七种请求方式,常用的两种:

????????????????GET:

? ? ? ? ? ? ? ? ? ? ? ?1. 请求参数在请求行中

? ? ? ? ? ? ? ? ? ? ? ?2. 请求的URL长度有限制

? ? ? ? ? ? ? ? ? ? ? ?3. 不太安全

????????????????POST:

? ? ? ? ? ? ? ? ? ? ? ?1. 请求参数在请求体中

? ? ? ? ? ? ? ? ? ? ? ?2. 请求的URL长度无限制

? ? ? ? ? ? ? ? ? ? ? ?3. 相对安全

请求头:客户端浏览器告诉服务器一些信息

????????请求头名称:请求头值

????????常见的请求头:

????????User-Agent:浏览器告诉服务器,访问服务器使用的浏览器版本信息

????????????????可以在服务器端获取该头的信息,解决浏览器的兼容性问题

????????Referer: 告诉服务器,当前请求从哪里来的。

????????????????作用:防盗链、统计工作

请求空行:

????????空行,做分隔POST请求头和请求体的作用

请求体:(正文)

????????封装POST请求消息的请求参数的

响应消息数据格式:

响应行:

????????格式:

协议/版本

响应状态码

状态码描述

HTTP/1.1

200

OK

????????响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态

????????状态码均由3位数字组成

????????状态码分类:

  • ????????1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
  • ????????2xx:成功。代表:200
  • ????????3xx:重定向。
  • ????????????????302(重定向) 表示临时性重定向。访问一个Url时,被重定向到另一个url上
  • ????????????????304(访问缓存)标识访问缓存。代表上次的文档已经被缓存了,还可以继续使用
  • ????????4xx:客户端错误。
  • ????????????????404(请求路径没有对应的资源)
  • ????????????????405(请求方式和对应的方法(doPost/doGet))
  • ????????5xx:服务器端错误。
  • ????????????????500(服务器内部出现异常)

响应头:

????????请求头名称:请求头值

????????常见的响应头:

????????Content-Type:服务器告诉客户端本次响应消息体的数据格式及编码格式

????????Content-disposition:服务器告诉客户端以什么格式打开响应体数据

? ? ? ? ? ? ? ? 常用的值:

????????????????in-line:默认值,在当前页面展示

????????????????attachment;filename=XXX:以附件格式打开响应体。用于文件下载

响应空行:空格、分隔作用

响应体:传输的数据

Request对象:

request对象继承体系结构

????????servletRequest???? --接口

????????|继承

????????HttpServletRequest --接口

????????|实现

????????org.apache.catalina.connector.RequestFacade --类(Tomcat)

request功能:

获取请求消息数据:

????????获取请求行数据:

????????例:GET / serlvet/deom01?name=zhangsan HTTP/1.1

????????常用方法:

????????获取虚拟目录:serlvet

????????????????getContextPath()

????????获取请求的URI/URL:

????????????????getRequestURI():serlvet/deom01

????????????????getRequestURL():http://locahost/serlvet/deom01

? ? ? ? ? ? ? ? ? ? ? URL:统一资源定位符

??????????????????????URI:统一资源标识符

????????获取请求头数据

????????方法:

????????????????getHeader(String name):通过请求头名称获取请求头的值

????????????????Enumeration<String> getHeaderNames():获取所有的请求头名称

????????获取请求体数据

????????请求体:只有PSOT请求方式,才有请求体,在请求体中封装了POST请求的请求参数

????????步骤:

????????????????1.获取流对象

????????????????????????BufferedReader getReader():获取字符输入流

????????????????????????ServletInputStream getInputStream():获取字节输入流

????????????????2.再从流对象中拿数据

获取请求参数通用方式:get/post通用(常用)

String getParameter(String name):根据参数名称获取参数值

String[] getParameterValues(String name):根据参数名称获取参数值的数组

Enumeration<String> getParameterNames():获取所有请 求的参数名称

Map<String,String[]> getParameterMap():获取所有参数的Map集合

常见问题:

????????中文乱码问题:

????????get方式:Tomcat8 已经将get方式乱码问题解决了

????????post方式:中文数据会乱码

????????解决:获取参数前,设置request编码

????????

请求转发(forword):一种在服务器内部的资源跳转方式

步骤:

  1. 通过request对象获取请求转发器对象:

?????????RequestDispatcher getRequestDispatcher(String path)

  1. 使用RequestDispatcher对象来进行转发:

????????forward(ServletRequest request Servletponse reponse)

特点:

  • 浏览器地址栏路径不发生变化
  • 只能转发到当前服务器内部资源中
  • 转发是一次请求,可以使用request域对象共享数据

共享数据:

域对象:一个有作用范围的对象,可以在范围内共享数据

request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

方法:

????????void setAttribute(String name,Object obj):存储数据

????????Object getAttribute(String name):通过键获取值

????????void removeAttribute(String name):通过键移除键值对

获取ServletContext对象:

????????ServletContext getServletContext()

Response对象:

功能:设置响应消息

????????设置响应行:

????????????????格式: HTTP/1.1 200 OK

????????设置状态码:

????????????????setStatus(int sc)

????????设置响应头:

????????????????????????setHeader(String name,String value)

????????设置响应体:

????????????????使用步骤:

? ? ? ? ? ? ? ? ????????1.获取输出流

????????????????????????????????字符输出流:PrintWriter getWriter()

????????????????????????????????默认编码:ISO-8859-1

???????????????????????????????字节输出流:ServletOutputStream getOutputStream()

? ? ? ? ? ????????? ? ? 2.使用输出流,将数据输出到客户端浏览器

????????????????????????乱码问题:

????????????????获取流之前设置流的编码以及告诉浏览器响应体使用的编码:

????????????????????????setContentType("text/html;charset=utf-8");

重定向:redirect? (资源跳转的方式)

????????sendRedirect(String name);

????????重定向的特点:

  • 地址栏发送变化
  • 重定向可以访问其他站点(服务器)的资源
  • 重定向是两次请求,不能使用request域对象共享数据

ServletContext对象:

是一个全局对象, 服务器会给每一个项目(工程)都创建一个ServletContext对象

获取ServletContext对象:

1.通过request对象:getServletContext()

2.通过HttpServlet获取:getServletContext()

功能:

????????获取MIME类型(文件下载):

????????????????MIME类型:在互联网通信过程中定义的一种文件数据类型

????????格式:大类型/小类型????? 例:? text/html? image/jpeg

????????获取String getMimeType(String file):

????????通过file名获取对应的MIME类型。

域对象:共享数据

????????ServletContext对象范围:共享所有用户所有请求的数据

????????void setAttribute(String name,Object obj):存储数据

????????Object getAttribute(String name):通过键获取值

????????void removeAttribute(String name):通过键移除键值对

????????getRealPath(String Path):获取文件真实(服务器)路径

会话技术:

会话:一次会话中包含多次请求和响应

一次会话:浏览器第一次给服务器发送请求,会话建立,直到一方断开为止。

功能:共享数据

方式:

????????客户端会话技术: Cookie

????????服务器端会话技术: Session

Cookie:

概念:客户端会话技术,将数据保存到客户端浏览器

基本使用步骤:

? ? ? ? 1.创建Cookie对象,绑定数据:

????????????????new Cookie(String name,String value)

? ? ? ? 2.发送Cookie对象:

????????????????response.addCookie(Cookie cookie)

? ? ? ? 3.获取Cookie,获取数据:

????????????????request.getCookies():返回Cookie数组

实现的原理:

????????基于响应头set-cookie和请求头cookie传输实现

cookie的细节问题:

一次可不可以发送多个cookie

????????可以

????????可以创建多个Cookie对象,使用response调用多次addCookie

cookie在浏览器中保存多长时间?

  • 默认情况下,当浏览器关闭后,Cookie数据被销毁
  • 持久化存储:

????????????????setMaxAgr(int seconds):

????????????????????????正数:将Cookie数据写到硬盘,持久化存储。

????????????????????????负数:默认值,跟随浏览器关闭而死亡

????????????????????????0:删除Cookie信息

cookie能否存储中文?

  • 在Tomcat 8 之前,cookie中不能直接存储中文数据。

????????需要将中文数据转码 ---> 一般采用URL编码

  • 在Tomcat 8之后,cookie支持中文数据

????????但是特殊符号数据还是需要采用URL编码

cookie共享问题?

  • 在一个服务器中,部署多个Web项目,那么这些项目中Cookie能否共享?
    • 默认情况下cookie不能共享
    • setPath(String Path):设置cookie的获取范围。默认为当前的虚拟目录

????????如果要多个项目共享,则将path设置"/"即可

  • 不同的服务器之间Cookie能否共享?
    • 默认情况下cookie不能共享
    • setDomain(String path):

如果设置一级域名相同,那么多个服务器之间cookie可以共享

例: setDomain(".bai.com")

那么 tieba.baidu.com 和news.baidu.com中cookie可以共享

Cookie的特点和作用:

特点:

  • Cookie存储数据是在客户端浏览器
  • 浏览器对于单个Cookie大小有限制(4kb)以及同一个域名下总Cookie数量也有限制(20个)

作用:

  • cookie一般用于存储少量的不太敏感的数据(不安全)
  • 在不登陆的情况下,完成服务器对客户端的身份识别

Session:

概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

基本使用步骤

  1. 获取HttpSession对象:

????????????????request.getSession()

  1. 使用HttpSession对象:

????????????????HttpSession对象:

????????????????Object getAttribute(String name):获取

????????????????void setAttribute(String name,Object value):设置

????????????????void removeAttribute(String name):删除

原理:Session的实现是依赖于Cookie的。

Cookie中会有一个 JSESSIONID = XXXXX;

细节上的问题:

客户端关闭后,服务器不关闭,两次获取Session是否为同一个?

  • 默认情况下。不是
  • 可以通过创建Cookie,键设置为 JSESSIONID,设置存活时间使Cookie持久化保存。

客户端不关闭,服务器关闭,两次获取Session是否为同一个?

不是同一个,但是要确保数据不丢失

  • session的钝化:

在服务器正常关闭之前,将session对象序列化到硬盘上

  • session的活化:

在服务器启动后,将session文件反序列化到内存中的session对象即可。

注意:在Tomcat中钝化和活化均已实现,而在IDEA工具中只实现了钝化,在服务器重新开启时Work目录会被删除然后重新创建所以无法实现活化操作。

Session什么时候被销毁?

  • 服务器关闭
  • session对象调用invalidate(),自我销毁
  • session默认失效时间-->30分钟

也可以通过tomcat中的web.xml配置文件中修改

Session的特点:

  • session用于存储一次会话的多次请求的数据,存储在服务器端
  • Session可以存储任意类型,任意大小的数据

SessionCookie的区别?

  • Session存储数据在服务器端,Cookie存储数据在客户端
  • Session没有数据大小限制,Cookie有限制
  • Session数据安全,Cookie相对于不安全

Filter:过滤器

概念:当访问服务器的资源时,过滤器可以将其请求拦截下来,完成一些特殊的功能

作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…

基本快速使用步骤:

  1. 定义一个类,实现接口Filter
  2. 复写方法
  3. 配置拦截路径

????????????????web.xml配置

????????????????注解配置

过滤器执行流程:

  1. 执行过滤器
  2. 执行放行后的资源
  3. 回来执行过滤器放行下的代码

过滤器声明周期方法:

  • init:在服务器启动后,创建Filter对象,然后调用该方法。只执行一次,用于加载资源
  • doFilter:每次请求被拦截资源时,会执行。执行多次
  • destroy:在服务器关闭后,Fileter对象销毁。服务器正常关闭,调用该方法。执行一次,释放资源

过滤器配置详解:

????????拦截路径配置:

  • 具体资源路径:/index.jsp? 访问该资源时,过滤器才执行
  • 拦截目录:??? /user/*???? 访问/user下的所有资源时,过滤器都会执行
  • 后缀名拦截:? *.jsp?????? 访问所有后缀名jsp资源时,过滤器都会执行
  • 拦截所有:??? /*????????? 访问所有资源时,过滤器都会执行

????????拦截方式配置:资源被访问的方式

? ? ? ?1. .注解配置:

????????设置dispatcherTypes属性:

  • REQUEST:默认值。浏览器直接请求资源
  • FORWORD:转发访问资源
  • INCLUDE:包含访问资源
  • ERROR:错误跳转资源
  • ASYNC:异步访问资源

? ? ? ?2.?web.xml配置:

????????设置<dispatcher>标签即可

过滤器链(配置多个过滤器):

拦截顺序:

如果有两个过滤器:过滤器1和过滤器2

1执行---> 2执行 ---> 资源执行? --->? 2执行 ---> 1执行

过滤器先后顺序:

  • 注解配置:

????????????????按照类名的字符串比较规则比较,值小的先执行

????????????????如 AFilter 和 Bfilter A先执行

  • web.xml配置:

????????????????谁定义在上面,谁先执行

Listener:监听器

概念:web的三大组件之一

事件监听机制:

  • 事件:???? 一件事情
  • 事件源:?? 事件发生的地方
  • 监听器:?? 一个对象
  • 注册监听: 将事件、事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码

ServletContextListener:监听ServletContext对象的创建和销毁

方法:

  • contextDestroyed(ServletContextEvent sce):ServletContext对象被销毁前调用该方法
  • contextInitialized(ServletContextEvent sce):ServletContext对象创建后会调用该方法

步骤:

  1. 定义一个类实现ServletContextListener接口
  2. 复写方法
  3. 配置

????????web.xml中:

????????<listener>

????????????????<listener-class>类参数</listener-class>

????????</listener>

指定初始化参数:<context-param>

注解:

????????@WebListener 即可

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:31:58  更:2021-09-22 14:35:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:21:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码