JavaWeb01
0. JavaWeb框架介绍
JavaWeb整体框架如下图所示:
1. 基本概念
1.1 web开发介绍
web开发分为:①静态web开发,②动态web开发。
- 静态web开发:
- 其特征是对所有用户而言,网页内容是一样的。内容不会因人而异。
- 常见的静态web开发语言:html,css。
- 动态web开发:
- 提供给不同用户不同的数据。换而言之,网页内容随着用户/时间/事件而变化。
- 技术栈:servlet/JSP,ASP,PHP
- 这是目前几乎所有网站的主流方式。
- 在java中,动态web资源的开发技术统称为javaweb。
1.2 web应用程序
定义:可以提供浏览器访问的程序即为web应用程序。
- a.html、b.html ......等多个web资源,这些web资源可以被外界访问,对外界提供服务。
- 能被访问到的任何一个页面或者资源,一定存在于世界上的某一台计算机内。
- URL:Uniform Resource Locator,统一资源定位符。这是网站地址的唯一标识也是访问入口。
- 统一的一套web资源会存放在同一个文件夹下,web应用程序--->Tomcat:服务器。
- 一个web应用由多部份组成:
①html,css,js
②jsp,servlet
③java程序
④jar包
⑤配置文件(properties) - web程序编写完毕后,** 如果要提供给外界访问,则需要一个服务器进行统一管理。**
1.3 静态web
- *.htm, *.html, 这些都是网页的后缀,如果服务器上一直存在这些东西,我们可以直接进行读取,联络通讯。
- 静态web存在的缺点:
- web页面无法动态更新,所有的用户看到的都是同一个页面。
- 无法与数据库进行交互,即数据无法持久化,用户无法进行交互。
- 静态web的工作流程图示意如下:
1.4 动态web
优点:
- 动态web的页面会动态展示:web页面展示的效果因人而异。
- 可以与数据库交互(数据持久化,注册,储存用户信息,商品信息等等)
缺点: - 如果加入服务器的动态web资源出现了错误,我们需要重新编写后台程序,即停机维护。
动态web的工作流程图如下:
2. web服务器
2.1 技术讲解
- ASP语言:
- 这是由微软开发的,是国内最早流行的服务器;
- 在HTML中嵌入了VB脚本,即 ASP + COM;
- 在ASP开发中,每一页都有几千行代码,页面及其混乱。
- 有高昂的维护成本。
- 是使用 C# 语言开发的
- IIS开发:Internet Information Services, IIS 互联网信息服务,是微软提供的互联网基础服务。
- PHP语言
- PHP的开发速度很快,功能很强大,支持跨平台,代码简单。目前有70%的网站是基于 WebPHP WP 开发的。
- PHP无法承载大访问量的情况(局限性)。
3. JSP/Servlet:
B/S架构:浏览器和服务器。
C/S架构:客户端和服务器。
- JSP/Servlet是sun公司主推的 B/S 架构。
- 这是基于java语言的。所有的大公司或者一些开源组件都是由java开发的。
- 可以承载三高问题带来的影响。(三高:高并发、高可用、高性能)
- 语法与ASP高度类似。
2.2 Web服务器种类
服务器是一种被动的操作,是用来处理用户的一些请求并返回给用户一些响应信息。
(1)IIS服务器
此为微软开发的服务器:由ASP环境开发,是windows中自带的。
(2)Tomcat
Tomcat是由Apache 软件基金会(Apache Software Foundation)开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。
因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。
实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。
不过,Tomcat处理静态HTML的能力不如Apache服务器。
3. Tomcat
3.1 Tomcat基本信息
Tomcat文件夹内容介绍:
- bin文件目录下进行启动和关闭:①startup.bat为启动文件,②shutdown.bat为关闭文件。
- conf文件下:server.xml为核心配置文件
- Webapps存放着写好的网站,内部一个文件夹即代表一个网站。有五个默认的初始网站。
3.2 Tomcat相关配置
以下修改均在核心配置文件"server.xml"中进行。
- 可以启动的端口号:
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
<Connector port="8081" protocol="HTTP/1.1"
ConnectionTimeout="20000"
redirectPort="8443" />
- 可以配置的主机名称:
- 默认的主机名称为:localhost->127.0.0.1
- 默认的网站应用存放的位置为:webapps
<Host name="www.zfy.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
(*)一道高难度面试题:
请你谈谈网站是如何进行访问的?
网站访问的流程:
- 输入一个域名:回车
- 检查本机的 C:\Windows\System32\drivers\etc\hosts 配置文件下有没有这个域名映射。
- 有:则直接返回对应的ip地址,在这个地址中,有我们需要访问的web程序,可以直接访问。
127.0.0.1 www.zfy.com
- 没有:则去DNS服务器寻找,能找到即返回,找不到则报错。(DNS: 全球域名的存放地)
- 流程图示意如下:
DNS介绍:
域名系统(Domain Name System,DNS),因特网上作为域名和IP地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议运行在UDP协议之上,使用端口号53。
3.3 发布一个web网站
- 将自己写的若干网页文件放到服务器(Tomcat)中指定的web应用的文件下(webapps),既从tomcat中访问。
- 一个网页应该有的基本结构/文件如下:
- 文件夹名称:网站的目录命
- WEB-INF文件夹: 存放网站程序
- -Classes文件:java程序
- -lib: web应用所依赖的jar包,(jar包往往都存在lib目录下,即 库 )
- index.html: 默认的首页文件
- static:静态资源存放处
- -css:css资源
- -js:js资源
- -img:图像资源
- ...
- ......
3.4 IDEA中配置Tomcat
配置流程如下所示:
- 右上角选择"Add Configuration",“+” 号添加tomcat,local
- 进入基本的配置页面,并做如下配置:
- 检查tomcat默认地址是否正确:
- 上一步警告出现的原因是:访问一个网站,必须指定一个文件夹的名字。
现在解决此问题:进入deployment界面创建一个artiface:
- 设置访问路径
- 启动Tomcat:
- 显示连接成功,并跳转页面:
- 跳转页面实质为,访问该项目的网页文件:
4. Http
4.1 什么是HTTP
HTTP(超文本传输协议),是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html;字符串;...
- 超文本(Hyper Text,HT ):超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。
- HTTP的默认端口号为 80
- HTTPS:安全的 HTTP,其端口号为:443
4.2 两个时代
- http1.0:
客户与web连接后,只能获得一个web资源,并断开连接。 - http2.0:
客户端与web服务器相连后,可以获得多个web资源。
4.3 http请求
http网页请求流程如下:客户端 ---> 发送请求 ---> 服务器
以百度为例进行关键参数说明:
Request URL:https://www.baidu.com/ -- 请求地址
Request Method:GET -- 使用 get 方法进行请求
Status Code:200 OK -- 状态码:200
Remote Address:14.215.177.39.443 -- 远程地址
-
请求行:
- 请求行中一般的请求方式:GRT
- 存在可选的请求方式:Get,Post, HEAD,DELETE,PUT,TRACT...
- get:请求能够携带的参数较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效。
- post:请求能够携带的参数没有限制,大小也没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
-
消息头
Accept: 告诉浏览器,它所支持的数据类型。
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接?
HOST: 主机
4.4 http响应
http网页响应流程如下:服务器 ---> 响应 ---> 客户端
形参属性如下,以百度网页为例:
Cache-Control: prvivate -- 缓存控制
Connection: Keep-Alive -- 连接控制
Content-Encoding: gzip -- 编码
Contene-Type:text/html -- 类型
(1) 响应体:
Accept: 告诉浏览器,它所支持的数据类型。
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接?
HOST: 主机
Refresh: 告诉客户端,多久刷新一次
Location:让网页重新定位
(2)响应状态码
- 200:请求的响应成功
- 3XX:请求重新定向,即重新到新给出的地址。
- 4XX:找不到资源(404),即资源不存在。
- 5XX:服务器代码错误(500),网关错误(502)
5. Maven
- Javaweb的开发中,需要使用大量的jar包,Maven可以帮助自动导入和配置这些jar包。
- Maven最大的特点就是,导入A包的同时,会将A包所依赖的B~F包一并导入。
5.1 maven的基本介绍
Maven的基本属性:
- Maven是用于导入和管理jar包的。
- Maven的核心思想:约定大于配置,即有约束不要去违反。
- Maven会规定好你该如何去规范的编写java代码,这个规范不可逾越。
5.2 配置Maven环境变量
需要在系统/环境变量中做如下配置:
变量 | 地址 |
---|---|
系统变量:M2_HOME | maven文件夹下bin位置 |
系统变量:MAVEN_HOME | maven文件夹位置 |
环境变量: path | %MAVEN_HOME%\bin |
相关环境变量配置后,在cmd窗口检验是否配置成功:
输入如下指令:mvn -version
,成功则返回版本信息。如下图所示。
5.3 配置Maven配置文件
(1)配置下载镜像地址:
-
在配置文件setting.xml中找到标签对:
...
-
将如下代码段写入(注意,①一定不要配置已经失效的镜像,会导致导包问题,②可以配置多个镜像):
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(2)配置maven本地仓库:
如果不配置maven本地仓库地址,则会自动生成在C盘。
配置流程如下:
-
配置文件setting.xml中找到标签对:
... ,其通常是被注释的状态。如图所示
-
写入如下代码,地址为你自己创建的maven本地仓库地址,文件夹以 repo结尾。
<localRepository>D:\B-Working\A-Software-work\Environment\apache-maven-3.8.2-bin\maven-repo</localRepository>```
- 配置成功后,maven仓库会转移至此,里面会根据项目导入jar包。
5.4 在IDEA中使用Maven
5.4.1 使用Maven模板创建项目
创建一个Maven项目:
- new一个project,操作界面如下:
- 命名相关配置:
- 修改Maven路径为当前路径:
- 点击finish进行创建
- 基于maven module初次创建工程时,会自动下载jar包。过程在run界面显示:
- 出现success代码,即工程创建成功:
- (可选)检查idea配置,setting中maven相关配置是否正常:
- maven的高级配置:选中自动导入源码选项。
使用此方式创建的Maven项目,会生成 Webapps 文件夹
5.4.2 创建简单的maven项目
- 创建页面不勾选任何选项,直接下一步:
- 命名相关配置:
- 创建成功如下:
5.4.3 IDEA标记文件夹
(1)鼠标右键,mark directory as,对文件夹进行标记,赋予其功能:
(2)项目结构中进行选择。赋予文件标记:
点击Module分块
5.4.4 pom.xml
pom.xml是maven的核心配置文件。
完整初始代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--maven的版本和头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 这里是之前配置的GAN -->
<!-- package项目的打包方式-->
<!-- jar: java应用-->
<!-- war:javaweb应用-->
<groupId>com.zfy</groupId>
<artifactId>JavaWeb01_maven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>JavaWeb01_maven Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--相关配置-->
<properties>
<!-- 项目默认的构建编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 编码java版本 -->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!--具体依赖的jar包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 项目构建需要的东西,是由模板所创建的 -->
<build>
<finalName>JavaWeb01_maven</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
5.4.5 Maven导包机制dependencies
(一)机制介绍
- Maven仓库是通过dependency机制进行jar包导入的。
- dependency机制是通过配置文件pom.xml中的 标签对
<dependency> ... </dependency>
具体代码由Maven在线仓库处获得。 - Maven导包机制的厉害之处在于,在导入目标包A的同时,会将A的依赖包B~F一起导入。
Maven导包的流程如下所示:
- 登录Maven在线仓库(https://mvnrepository.com/),搜索目标jar包:
- 点击jar包页面,选择目标版本:
- 复制Maven的dependency依赖代码:
- 将代码放入pom.xml文件
<dependencies> ... </dependencies>
标签对中。
(二)项目jar包结构树:
Maven仓库自带结构树生成按钮,如下所示:
从结构树中可以看出,我们只导入了“ spring boot”jar包,但它的相关依赖已经被一起导入。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~