JavaWeb
1.0 基本概念
1.1 前言
web开发:
-
静态web
-
html css
-
数据不会变化的网页
-
-
动态web
-
ASP、JSP、Servlet、Ajax...
-
数据会发生变化的网页
-
动态web资源开发统称为JavaWeb
1.2 web应用程序
web应用程序:可以提供浏览器访问的程序;
-
能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
-
URL:URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。
-
统一的web资源会被放在同一个文件夹下,web应用程序===>Tomcat 服务器
-
一个web应用由多部分组成(静态web,动态web)
-
html、css、js
-
jsp、servlet
-
java程序
-
jar包
-
配置文件(properties、xml)
-
web应用程序编写完成后,若想要提供给外界访问,需要一个服务员来统一管理;
1.3 静态web
-
*.htm , *.html 这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。
-
静态web的缺点
-
web页面无法动态更新,所有用户看到的都是同一个页面
-
轮播图,点击特效:伪动态
-
javascript、vbscript (微软)
-
-
无法与数据库交互(数据无法持久化,用户无法交互)
-
1.4 动态web
页面会动态展示
缺点:
-
加入服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布;
-
停机维护
-
优点:
-
web页面可以动态更新,所有用户看到的都不是同一个页面
-
它可以数据库交互
2.0 web服务器
2.1 技术讲解
ASP:
-
微软开发,国内最早流行的就是ASP
-
在HTML中嵌入VB脚本,ASP+COM
-
在ASP开发中,基本一个页面就有几千行代码,html、vb、各种嵌套在一起,页面混乱,维护成本高
-
C#
PHP:
-
优点:PHP开发速度快,功能强大,跨平台,代码简单
-
局限性:无法承载大访客量的情况
JSP/Servlet
B/S:浏览器和服务器
C/S:客户端和服务器
-
当时sun公司主推的B/S架构
-
基于JAVA语言
-
可承载三高(高并发、高性能、高可用性)问题带来的影响
-
语法像ASP,方便ASP使用者转型,加强市场强度
2.2 web服务器
服务器是一种被动程序,用来 处理用户的请求 和 给用户相应信息
IIS
-
IIS (Internet Information Services) 是由微软开发的一种 Web 服务器软件。
-
Windows中自带的
Tomcat
-
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成的web应用服务器。
-
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。以及初学者的首选
-
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。Tomcat最新版本为10.0.23。
面试题:
请你谈谈网站是如何进行访问的!
输入一个域名,回车
检查本机的配置文件下有没有这个域名映射
有:直接返回对应的 ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
127.0.0.1 www.hunter.com
没有:去DNS服务器找,找到的话就返回,找不到就返回找不到
3.0 HTTP
3.1 什么是HTTP?
HTTP
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
HTTPS
HTTPS (Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道。
在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与TCP之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
3.2 两个时代
-
HTTP 1.0时代
-
HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接。
-
-
HTTP 2.0时代
-
HTTP/2.0:客户端可以与web服务器连接后,可以获得一个web资源。
-
3.3 HTTP请求
-
客户端==发请求(request)==>服务器
百度:
Request URL:https://www.baidu.com/ 请求地址 Request Method:GET get方法/post方法 Status Code:200 OK 状态码:200 Remote Address:183.2.172.185:443
1.请求行
-
请求行中的请求方式:Get
-
请求方式 :get、post、HEAD、DELETE、PUT、TRACT。。
-
get:请求能够携带的参数比较小,大小有限制,会在浏览器的URL地址显示数据内容,不安全,但高效
-
post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址显示数据内容,安全,但不高效
-
2.消息头
Accept:告诉浏览器,它所支持的数据类型 Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1 Accept-Language:告诉浏览器,它的语言环境 Cache-Control:缓存控制 Connection:高速浏览器,请求完成是断开还是保持连接 HOST:主机
3.4 HTTP响应
-
服务器==相应==>客户端
百度:
Cache-Control:private 缓存控制 Connection:keep-alive 连接 Content-Encoding:gzip 编码 Content-Type:text/html; charset=utf-8 类型
1.响应体
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:高速浏览器,请求完成是断开还是保持连接
HOST:主机
Refrush:告诉客户端,多久刷新一次
Location:让网页重新定位
2.响应状态码
200:请求响应成功
3xx:请求重定向
重定向:你重新到我给你的新位置去
4xx:找不到资源
资源不存在
5xx:服务器代码错误
常见面试题:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
4.0 Maven
我为什么要学习这个技术?
-
在JavaWeb开发中,需要使用大量jar包,我们手动去导入
-
如何能够让一个东西自动帮我导入和配置这个jar包。
由此,Maven诞生了!
4.1 Maven项目架构管理工具
Maven的核心思想:约定大于配置
-
有约束,不要去违反。
Maven会规定好如何编写Java代码,项目目录结构
4.2
由于maven的约定大于配置,我们之后可能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:
<!-- 在bunld中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*. xml</include> </includes> <filtering>true</filtering> </ resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*. properties</include> <include>**/*. xml</include> </includes> <filtering>true</filtering> </resource> </ resources> </build>
5.0 Servlet
5.1 什么是Servlet?
-
Servlet就是sun公司开发动态web的一门技术
-
sun公司在这些API中提供一个接口叫做:Servlet
-
如果想开发一个Servlet程序,需要完成两个小步骤:
-
编写一个类,实现Servlet接口
-
把开发好的Java类部署到web服务器中。
-
把实现了Servlet接口的Java程序叫做:Servlet
5.2 Servlet原理
Servlet 是由web服务器调用,web服务器在收到浏览器的请求之后,会:
5.3 Mapping问题
-
一个Servlet可以指定一个映射路径
-
一个Servlet可以指定多个映射路径
-
一个Servlet可以指定通用映射路径
-
指定一些后缀或者前缀等等...
-
优先级问题
指定了固有的映射路径的优先级最高,如果找不到就会走默认的处理请求
5.4 ServletContext
web容器在启动的时候,它会为每个web程序都创建一个对应的Servlet Context对象,它代表了当前的web应用;
1. 共享数据
我在这个Servlet中保存的数据,可以在另一个servlet中拿到;
2. 获取初始化参数
3. 请求转发
4. 读取资源文件
Properties
-
在Java目录下新建properties
-
在resources目录下新建properties
发现:都被打包到同一个路径下:classes,我们俗称这个路径为classpath;
思路:需要一个文件流
5.5 HttpServletRequest和HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表 请求 的HttpServletRequest对象 和一个代表 响应 的一个HttpServletResponse对象
如果要获取客户端请求过来的参数:找HttpServletRequest
如果要给客户端响应一些信息:找HttpServletResponse
1. HttpServletRequest
(1) 获取参数,请求转发
面试题:请你聊聊重定向和转发的区别
相同点
页面都会实现跳转
不同点
请求转发的时候,url 地址栏不会产生变化;307
重定向的时候,url 地址栏会发生变化;302
2. HttpServletResponse
(1) 向浏览器输出消息
(2) 下载文件
-
要获取下载文件的路径
-
获取下载文件名
-
设置想办法让浏览器能够支持下载我们需要的东西
-
获取下载文件的输出流
-
创建缓冲区
-
获取OutputStream对象
-
将FileOutputStream流写入到Buffer缓冲区
-
使用OutputStream缓冲区中的数据输出到客户端
(3) 验证码
验证码怎么来的?
-
前端实现
-
后端实现,需要用到Java的图片类,生成一个图片
(4) 实现重定向
面试题:请你聊聊重定向和转发的区别
相同点
页面都会实现跳转
不同点
请求转发的时候,url 地址栏不会产生变化;307
重定向的时候,url 地址栏会发生变化;302
6.0 Cookie 和 Session
你怎么证明你是 学校的学生
你 学校
校卡 学校给你校卡
学校登记 学校标记你是学校的学生
一个网站,怎么证明你来过
客户端 服务端
服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了;cookie
服务器登记客户端来过,下次访问的时候直接匹配客户端;session
6.1 会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话
6.2 保存会话的两种方式
cookie
-
客户端技术(请求,响应)
session
-
服务器技术。我们可以利用这个技术,把信息或数据放在session中
6.3 Cookie
-
从请求中拿到cookie信息
-
服务器响应给客户端cookie
一个网站 cookie 是否存在上限?
一个cookie只能保存一个信息
一个web站点可以给浏览器发送多个cookie,一个站点最多存放20个cookie
cookie大小有限制,4kb
一个浏览器的cookie上限是300个
-
删除cookie
-
如果不设置有效期,关闭浏览器,自动失效
-
设置有效期为 0
-
设置有效期
Cookie图示
6.4 Session(重点)
什么是Session?
-
服务器会给每一个用户(浏览器)创建一个Session对象
-
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
例子:用户登陆之后,整个网站用户都可以访问 ===> 保存用户的信息
使用场景:
-
保存一个登陆用户的信息
-
购物车信息
-
在整个网站中经常会使用的数据,我们将其保存到Session中
Session 和 Cookie 的区别:
Cookie 是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
Session 把用户的数据写到用户独占的Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
Session对象由服务器创建
Session销毁的:
-
自动销毁
-
Session默认等待30分组自动销毁
-
设置过期时间
javasession.setMaxInactiveInterval(5); //5秒后自动销毁
-
-
手动销毁
-
直接关闭服务器,Session就被销毁了,因为Session存活在服务器端
-
session.invalidate(); //立即销毁
-
配置web.xml文件
<session-config> <session-timeout>10</session-timeout> //10分钟后销毁 </session-config>
-
Session图示
7.0 JSP
7.1 什么是 JSP ?
Java Server Pages:Java服务器端页面,和Servlet一样,用于动态web技术
最大的特点:
-
写 JSP 就像在写HTML
-
区别:
-
HTML只给用户提供静态的数据
-
JSP页面中可以嵌套 JAVA 代码,为用户提供动态数据
-
7.4 JSP工作模式
jsp的工作模式是请求/相应模式,客户端首先发出HTTP请求,jsp程序收到请求后会进行处理并返回处理结果。在一个jsp文件第一次被请求时,jsp引擎(容器)把该jsp文件转换成一个Servlet,而这个引擎本身也是一个Servlet。
JSP本质上是一个Servlet
7.3 JSP原理
-
客户端通过浏览器向服务器发出请求,在该请求中包含了请求的资源的路径,这样当服务器接收到该请求后就可以知道被请求的内容。
-
服务器根据接收到的客户端的请求来加载相应的JSP文件。
-
Web服务器中的 JSP引擎 会将被加载的 JSP文件 转化为 Servlet文件(.java)。
-
JSP引擎将生成的Servlet代码编译成Class文件。
-
服务器执行这个Class文件。
-
最后服务器将执行结果发送给浏览器进行显示。
图示
8.0 JavaBean (实体类)
JavaBean有特定的写法:
-
属性必须私有化
-
无参构造、有参构造
-
对应的get/set方法
一般用来和数据库的字段做映射(ORM)
ORM:对象关系映射
-
表===>类
-
字段===>属性
-
行记录===>对象
people表
id | name | age | address |
---|---|---|---|
1 | hunter | 18 | 珠海 |
2 | 肥猫叉烧 | 19 | 珠海 |
3 | 航航 | 20 | 珠海 |
public class People { private int id; private String name; private int age; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public People(int id, String name, int age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } public People() { } }
9.0 MVC 三层架构
9.1 什么是MVC?
Model View Controller
模型 视图 控制器
早些年的架构
用户直接访问控制层,控制层可以直接操作数据库
servlet--CRUD-->数据库 弊端:程序十分臃肿,不利于维护 servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码 架构: 程序猿调用 | JDBC | 数据库
9.2 MVC三层架构
Model
-
业务处理:业务逻辑(Service)
-
数据持久层:CRUD (Dao)
View
-
展示数据
-
提供连接,发起Servlet请求 (a,form,img...)
Controller(Servlet)
-
接收用户的请求 (req:请求参数、Session信息...)
-
交给业务层处理对应的代码
-
控制试图的跳转
登陆--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username,password)--->交给业务层处理登录的业务(判断用户名密码是否正确:事务)--->Dao层查询用户名和密码是否正确--->数据库
10.0 Filter
Filter:过滤器,用来过滤网站的数据
-
处理中文乱码
-
登陆验证
-
...
11.0 监听器
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。