什么是JavaWeb?

Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。

Internet上供外界访问的Web资源分为:静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。静态web资源开发技术:HTML、CSS。动态web资源开发技术:JavaScript、JSP/Servlet、ASP、PHP等。在Java中,动态web资源开发技术统称为Java Web。

项目开发步骤

搭建Java Web应用的开发环境-----部署Tomcat服务器、用eclipse创建Server服务、构建Java Web项目、建立第一个JSP文件、 运行JSP文件。

第一个要点是掌握tomcat的安装和部署。在Windows系统上安装Tomcat相对简单,下载压缩包解压缩到任意目录即可(目录名称不要含有中文字符)。进入tomcat的bin目录,可以直接运行startup.bat启动tomcat服务。

第二个要点是在eclipse中添加Server服务。把tomcat与eclipse进行关联,方便eclipse管理tomcat。

第三个要点是构建Java Web项目。Web项目开发的第一步就是要建立项目。在新建Project项目时,选择Dynamic Web Project项目类型,即可创建Web项目。

第四个要点是建立的项目如何在Server中运行。选择要运行的JSP文件,单击右键,在弹出的菜单中选择Run on Server命令即可,初次运行项目时,需要配置项目在哪个Server中运行(如有多个Server)。

web后端和前端是怎么连接的?

1、web服务器(apache、tomcat等),网络协议(http、socket等),浏览器(chrome、FF、IE等)。浏览器发起建立连接请求,通过网络协议与服务器建立连接,服务器保持连接,获取浏览器想要的数据,服务器通过连接返回内容给浏览器,浏览器把数据呈现出来
2、连接的协议一般是http,也有websocket。服务器以服务的方式存在,就像外卖店,你打个电话过去,人家就把饭菜送上门来了。
3、web服务器访问数据库一样要使用网络连接,端口只是开放服务的入口而已,就像外卖的电话。

主流 Java Web 开发框架

1) Spring 框架

Spring 框架是一个轻量级的框架,渗透了 Java EE 技术的方方面面。Spring 框架是由于软件开发的复杂性而创建的,是一个开源框架。

Spring 框架的用途不仅限于服务器端的开发,从简单性、可测试性和松耦合性角度而言,绝大部分 Java 应用都可以从 Spring 框架中受益。

对 Spring 框架的几点说明:

  • 目的:解决企业应用开发的复杂性。
  • 目标:Java EE 技术更容易使用,并促进良好编程习惯的养成。
  • 功能:使用基本的 JavaBean 代替 EJB,并提供更多的企业应用功能。
  • 范围:任何 Java 应用。

Spring 框架是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,它主要作为依赖注入容器和 AOP 实现存在,还提供了声明式事务、对 DAO 层的支持等简化开发的功能。

Spring 框架可以很方便地与 Spring MVC、Struts 2、MyBatis、Hibernate 等框架集成,其中大名鼎鼎的 SSM 集成框架指的就是基于 Spring MVC + Spring + MyBatis 的技术框架,使用这个集成框架能使应用程序更加健壮、稳固、轻巧和优雅,这也是当前流行的 Java Web 技术框架。

Spring 框架官网:https://spring.io/

2) Spring MVC 框架

Spring MVC 框架属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中,是结构清晰的 MVC Model2 的实现。

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,并且拥有高度的可配置性,支持多种视图技术。它还可以进行定制化开发,使用相当灵活。

此外,Spring 框架整合 Spring MVC 框架是无缝集成,这是一个高性能的架构模式,已越来越广泛地应用于互联网应用的开发中。当使用 Spring 框架进行 Web 开发时,可以选择 Spring MVC 框架或集成其他 MVC 的开发框架,如 Struts 1(现在一般不用)、Struts 2(一般老项目使用)等。

3) MyBatis 框架

MyBatis 框架是一个优秀的数据持久层框架,可在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。

Mybatis 的封装性要低于 Hibernate 框架,且性能优异、简单易学,因此应用较为广泛。

MyBatis 框架本是 Apache 的一个开源项目 iBatis,2010 年,这个项目由 Apache software foundation 迁移到 Google code,并且改名为“MyBatis”;2013 年 11 月它迁移到 Github。

“iBatis”一词来源于“internet”和“abatis”的组合,它是一个基于 Java 的持久层框架,其框架包括 SQL Maps 和 Data Access Objects(DAOs)。

MyBatis 3中文文档:https://mybatis.org/mybatis-3/zh/

4) Hibernate 框架

Hibernate 框架不仅是一个优秀的持久化框架,也是一个开放源代码的对象关系映射框架。它对 JDBC 进行了轻量级的对象封装,将 POJO 与数据库表建立映射关系,形成一个全自动的 ORM 框架。

Hibernate 框架可以自动生成 SQL 语句,且自动执行,使 Java 程序员可以随心所欲地使用对象编程思维来操纵数据库。

Hibernate 框架还可以应用在任何使用 JDBC 的场合:

  • 可以在 Java 的客户端程序使用;
  • 也可以在 Servlet/JSP 的 Web 应用中使用;
  • 最具革命意义的是,Hibernate 框架可以在应用 EJB 的 Jave EE 架构中取代 CMP,以完成数据持久化的重任。

Hibernate 框架已经成为当前主流的数据库持久化框架,并被广泛应用。

Hibernate 框架官网:http://hibernate.org/

5) Struts 2 框架

Struts 2 框架以 WebWork 的优秀设计思想为核心,吸收 Struts 框架的部分优点,提供了一个更加简洁的基于 MVC 设计模式实现的 Web 应用程序框架,它本质上相当于一个 Servlet。

在 MVC 设计模式中,Struts 2 框架作为控制器(Controller)来建立模型与视图的数据交互。

Struts 2 框架是 Struts 的下一代产品,是在 Struts 1 和 WebWork 技术的基础上进行合并的创新。它采用拦截器的机制来处理用户的请求,可使业务逻辑控制器与 Servlet API 完全脱离开,所以也可以理解是 WebWork 的更新产品。

Struts 2 框架充分利用了其他 MVC 框架的经验和教训,使整个框架更加清晰和灵活。

Struts 框架官网:https://struts.apache.org/

基本概念

web开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42BEbqIT-1663510961697)(Day007_JavaWeb.assets/1655879512039.png)]

web应用程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ks5w1Qr-1663510961699)(Day007_JavaWeb.assets/1655879636897.png)]

静态Web

  • .htm、.html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。网络:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYC5tMMj-1663510961700)(Day007_JavaWeb.assets/1655880375132.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvGV5VFh-1663510961700)(Day007_JavaWeb.assets/1655879840044.png)]

动态Web

页面会动态展示:“web页面展示的效果因人而异“;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-180zgBgh-1663510961700)(Day007_JavaWeb.assets/1655880420060.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Eri87qB-1663510961701)(Day007_JavaWeb.assets/1655880498131.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1Bstcic-1663510961701)(Day007_JavaWeb.assets/1655880863170.png)]

Web服务器

技术讲解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTKaZC7B-1663510961702)(Day007_JavaWeb.assets/1655885899537.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEFBupPU-1663510961702)(Day007_JavaWeb.assets/1655885930618.png)]

Web服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9uj1UN7-1663510961702)(Day007_JavaWeb.assets/1655946924742.png)]

下载Tomcat:

  1. 安装或者解压
  2. 了解配置文件及目录结构
  3. 这个东西的作用

Tomcat

安装Tomcat

Tomcat官网:http://tomcat.apache.org/

采用了Tomcat 9 的版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GT7MsSOy-1663510961703)(Day007_JavaWeb.assets/1655947227051.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FWacYdL-1663510961703)(Day007_JavaWeb.assets/1655947286705.png)]

Tomcat启动和配置

文件夹目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vYEwu9VJ-1663510961703)(Day007_JavaWeb.assets/1655966390983.png)]

启动和关闭Tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3if6jlCA-1663510961703)(Day007_JavaWeb.assets/1655966511099.png)]

启动测试:http://localhost:8080/

可能遇到的问题:

  1. Java环境变量没有配置(可能会闪退)
  2. 闪退问题:需要配置兼容性
  3. 乱码问题:配置文件中设置

配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jqXIFXLy-1663510961704)(Day007_JavaWeb.assets/1655966467567.png)]

总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1XJdVwr-1663510961704)(Day007_JavaWeb.assets/1655969932331.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glkA4hxr-1663510961704)(Day007_JavaWeb.assets/1655970213782.png)]

发布一个网站

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGZImW0W-1663510961705)(Day007_JavaWeb.assets/1655970695564.png)]

Http

什么是Http?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qx3NjGKi-1663510961705)(Day007_JavaWeb.assets/1656292438371.png)]

两个时代

  • http1.0

    • HTTP/1.0 :客户端可以与web服务器连接后,只能获得一个web资源,断开连接(烧流量)
  • http2.0
    • HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源,不用每次请求连接

http请求

  • 客户端–发请求(Request)–服务器
  • 百度:General
Request URL: https://www.baidu.com/  //请求地址
Request Method: GET                 //get方法,post方法
Status Code: 200 OK                 //状态码:200
Remote Address: 14.215.177.38:443   //远端服务器地址
  • 百度:Request Headers
Accept: text/html
Accept-Encoding: gzip, deflate, br  //编码
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 //语言
Cache-Control: max-age=0    //缓存控制
Connection: keep-alive      //保持连接

1、请求行

  • 请求行中的请求方式:GET
  • 请求方式:GetPost,HEAD,DELETE,PUT,TRACT…
    • GET:一次请求可以携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效。
    • POST:一次请求可以携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。

2、消息头

Accept: //告诉服务器它所支持的数据类型
Accept-Encoding: //支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: //告诉服务器它的语言环境
Cache-Control: //缓存控制
Connection: //告诉服务器,请求完成是断开还是保持连接
HOST: //主机

Http响应

  • 服务器–响应–客户端
  • 百度:Response Headers
Cache-Control: private                       //缓存控制
Connection: keep-alive                      //保持连接
Content-Encoding: gzip                      //编码
Content-Type: text/html;charset=utf-8      //类型
Accept: //告诉服务器它所支持的数据类型
Accept-Encoding: //支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: //告诉服务器它的语言环境
Cache-Control: //缓存控制
Connection: //告诉服务器,请求完成是断开还是保持连接
HOST: //主机
Refresh://告诉客户端多久刷新一次
Location://让网页重新定位;

响应体

Accept: //告诉服务器它所支持的数据类型
Accept-Encoding: //支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: //告诉服务器它的语言环境
Cache-Control: //缓存控制
Connection: //告诉服务器,请求完成是断开还是保持连接
HOST: //主机
Refresh://告诉客户端多久刷新一次
Location://让网页重新定位;

响应状态码

200:请求响应成功 200

3xx:请求重定向

  • 重定向:你重新到我给你的新位置去找

4xx:找不到资源 404

  • 资源不存在

5xx:服务器代码错误 500 502:网关错误

常见面试题:

二面:当你的浏览器中地址栏输入地址并回车的一瞬间到页面=能够展示回来,经历了什么?

  1. **(域名解析)**在客户端,浏览器输入地址后,首先会在windows系统文件的hosts中查找是否有对应的ip地址,如果没有则需要向DNS域名解析服务器询问该域名对应的ip地址。
  2. **(TCP三次握手)**获取相应的ip地址后,客户端与服务器端建立TCP连接(三次握手),(网络层,数据链路层,物理层)

三次握手

​ 第一次握手:客户端向服务器端发送一个SYN段,该段中包含客户端的初始序列号。

​ 第二次握手:服务器端返回客户端SYN+ACK,该端中包含服务器端的初始序列号,ACK表示,已经确定收到客户端的SYN段。

​ 第三次握手:客户端向服务器端响应一个ACK端,ACK表示,已经确定接受到服务器端的SYN段。

  1. **(建立起TCP连接后发起http请求)**客户端向服务器端发送请求,包含请求行,请求头。主要的两种请求方式(GET与POST)

–>GET:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据的内容,不安全,但高效。

–>POST:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。

  1. **(服务器响应http请求)**服务器处理请求,并返回响应,包含状态码,响应头,响应体。
  2. **(浏览器解析http代码)**浏览器收到响应,解析http代码渲染页面,并在浏览器页面展示出来。
  3. **(断开连接)**http1.0短连接,http1.1长连接。

Maven

为什么要学习Maven技术?

1,在 JavaWeb 开发中,需要使用大量的 jar 包,我们手动去导入:

2,如何能够让一个东西自动帮我们导入和配置这个 jar 包。

由此,Maven 诞生了!

Maven项目架构管理工具

我们目前就是用来方便导入jar包的

Maven的核心思想约定大于配置

  • 有约束,不要去违反
  • 目录结构有约定

Maven会规定好你该如何去编写我们的java代码,必须要按照这个规范来

配置环境变量

配置如下:系统环境变量,不是用户变量

  • MAVEN_HOME maven的目录(类似JAVA_HOME)
  • M2_HOME maven目录下的bin目录(以后用到,比如spring,springboot)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5ulhIe2-1663510961705)(Day007_JavaWeb.assets/1656297369928.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50WjcCk7-1663510961705)(Day007_JavaWeb.assets/1656297382545.png)]

类似 JDK,检测是否安装成功,打开cmd,输入:

mvn -version 注意:mvn来源于bin目录下的mvn

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzzkWoka-1663510961706)(Day007_JavaWeb.assets/1656297414457.png)]

配置阿里云镜像

镜像:mirrors

  • 作用:加速我们的下载

国内建议使用阿里云镜像 ,百度一下:Maven 阿里云镜像
放在F:\Software\apache-maven-3.8.1\conf\settings.xml<mirrors></mirrors>标签中

<mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

本地仓库

建立一个本地仓库,可以配多个

F:\Software\apache-maven-3.8.1\conf\settings.xml中找到如下信息:

Default: ${user.home}/.m2/repository  <!--默认的仓库地址-->
<localRepository>/path/to/local/repo</localRepository>

修改为:

<localRepository>D:\Java\apache-maven-3.6.3\maven-repository</localRepository>

同时,在文件夹路径下需要新建文件夹:maven-repository 作为本地仓库

创建一个idea项目

创建的是一个web应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q4bpAUub-1663510961706)(Day007_JavaWeb.assets/1656298676391.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOeNYd6X-1663510961706)(Day007_JavaWeb.assets/1656299215161.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XwDuYCC-1663510961706)(Day007_JavaWeb.assets/1656299324723.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjZU1zJy-1663510961707)(Day007_JavaWeb.assets/1656309725591.png)]

项目创建成功

更改Maven的配置

注意:idea项目创建成功后,看一眼Maven的配置,确定一下配置文件以及仓库的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ezwe11EW-1663510961707)(Day007_JavaWeb.assets/1656310030400.png)]

不勾选Maven模版的话会得到一个干净的Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZ8HH7cs-1663510961707)(Day007_JavaWeb.assets/1656310961798.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BK8TC1gy-1663510961707)(Day007_JavaWeb.assets/1656310885654.png)]

标志文件夹

创建的web项目src中没有放置源码的java目录,放置配置文件的resource目录,需要手动添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATaVCgcb-1663510961707)(Day007_JavaWeb.assets/1656311345519.png)]

第二种方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HJbA7jiU-1663510961707)(Day007_JavaWeb.assets/1656311575998.png)]

在idea中配置tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLYFNBTA-1663510961708)(Day007_JavaWeb.assets/1656311802148.png)]

选择tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ftOpuCz-1663510961708)(Day007_JavaWeb.assets/1656313414225.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9z6Gtxcr-1663510961708)(Day007_JavaWeb.assets/1656313719328.png)]

解决警告问题

必须要有的配置:相当于我们访问一个网站,必须要指定一个文件夹名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGsUnoAE-1663510961708)(Day007_JavaWeb.assets/1656313784533.png)]

配置完成之后启动tomcat

pom文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOUQUzsO-1663510961708)(Day007_JavaWeb.assets/1656315648143.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5X82aLqo-1663510961708)(Day007_JavaWeb.assets/1656315997711.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KdPNQWeT-1663510961709)(Day007_JavaWeb.assets/1656316124689.png)]

Maven高级的地方在于,他会自动导入所需jar包所依赖的相关jar包供项目使用

配置文件无法导出或生效的问题的解决方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulTDwsp6-1663510961709)(Day007_JavaWeb.assets/1656317014188.png)]

Maven仓库的使用

地址:https://mvnrepository.com/

写一个servlet

找到tomcat的存放目录,双击打开bin目录下的startup.bat文件,启动tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XlepG5Et-1663510961709)(Day007_JavaWeb.assets/1656321816900.png)]

进入http://localhost:8080/ 出现此页面,tomcat启动成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AVWQWhO-1663510961709)(Day007_JavaWeb.assets/1656321962270.png)]

进入webapps目录下的examples

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjprisFU-1663510961709)(Day007_JavaWeb.assets/1656321924380.png)]

进入http://localhost:8080/examples/servlets/helloworld.html下查看servlet例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T2jVoQyF-1663510961709)(Day007_JavaWeb.assets/1656322012595.png)]

模仿官网例子写一个servlet

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3MPzCWf-1663510961710)(Day007_JavaWeb.assets/1656340813602.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2u4vCsir-1663510961710)(Day007_JavaWeb.assets/1656340959699.png)]

查看响应头信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iIvIUrtC-1663510961710)(Day007_JavaWeb.assets/1656341367676.png)]

在servlet中设置头部信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVwtMgRk-1663510961710)(Day007_JavaWeb.assets/1656341451888.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ul7IpPB-1663510961710)(Day007_JavaWeb.assets/1656341490367.png)]

servlet

什么是servlet?