Java Web
1.基本概念
1.1前言
本文是看b站上面的遇见狂神说记录的笔记
web开发:
- web 是网页开发的意思,表示我们可以从网页上面获取资源 www.baidu.com
- 静态web
- - html css - 提供给所有人看的数据始终不会发生变化
- 动态web
- - 淘宝,几乎所有的网站都是动态web - 提供给所有人看的数据是会发生变化的,每一个人在不同的时间,不同的地点,看到的信息各不相同 - 技术栈: Servlet/JSP, ASP,PHP 在Java中,动态web资源开发的技术称为JavaWeb
1.2web应用程序
web应用程序:可以提供浏览器访问的程序
- 像a.html,b.html等等多个web资源,这些web资源都可以被外界访问,对外提供服务
- 我们所能够访问的任何一个页面或者资源,都是存在于这个世界的某一个角落的计算机上面的
- url:统一资源定位符 ? 后面回过头看
- 这个统一的web资源会被放在同一个文件夹下面,但是这些web应用程序,我们不能直接访问它,需要借助Tomcat服务器
- 一个web应用由多个部分组成(静态web,动态web)
- - html css js - jsp servlet - java程序 - jar包 - 配置文件(Properties)
web应用程序编写完成以后,如果想要提供给外界来访问,需要一个服务器来统一管理
1.3静态web
- .html, .htm这些都是网页的后缀,如果服务器上一直存在这些东西的话,我们就可以直接进行读取
- 静态web存在的缺点
- - web页面无法动态更新,所有人看到的都是一样的页面
- 它不能和数据库进行交互,数据无法持久化,用户不能交互
</ul> - 加入服务器的动态web资源出现了错误,我们就需要重新编写我们的后台程序,重新发布
- 这就意味着要停机维护
- web页面可以动态更新
- 它可以和数据库进行交互 (数据持久化 比如说注册信息)
- sun公司主推的b/s架构
- 基于Java语言的(所有的大公司,或者一些开源的组件,都是用Java写的)
- 可以承载三高问题带来的影响:高性能,高并发,高可用
- - 轮播图,点击特效:做了一个伪动态的效果 - 我们可以用JavaScript来做出动态效果
1.4 动态web
页面会动态展示,它的展示效果因人而异
缺点:
优点
2.web服务器
2.1技术讲解
JSP/Servlet:
B/S:浏览器,服务器
C/S客户端和服务端
2.2web服务器
接收用户请求,给用户返回响应
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些相应信息
Tomcat
Tomcat实际上运行的是JSP页面和Servlet
工作3-5年后,可以尝试写Tomcat服务器
下载Tomcat:
1.安装或解压
2.了解配置文件以及目录结构
3.知道这个东西的作用
3.Tomcat
3.1安装Tomcat
1.Tomcat官网https://tomcat.apache.org/
3.2启动与配置
文件夹作用
bin目录:用来放启动和关闭的脚本文件
conf:配置
lib:放依赖的jar包
logs:发存放网站的
一个文件夹代表一个web应用?
启动和关闭
点击bin目录—startup.bat—双击就启动起来了
注意:startup.bat打开以后不要关闭
然后在网站输入localhost:8080
这样就可以进入tomcat网站
访问测试 http://localhost:8080
可能遇到的问题:
1.Java环境没有配置 因为Tomcaat是Java写的
2.闪退问题:需要配置兼容性
3.乱码问题:需要在配置文件中设置
点击conf
3.3配置
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
可以配置主机的名称
- 默认的主机名是:localhost–>127.0.0.1
- 默认网站应用存放的位置位:webapps
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
3.4高难度面试题
请你谈谈网站是怎么进行访问的
1.输入一个域名:然后按回车
2.检查本机的:C:WindowsSystem32driversetchosts配置文件下有没有这个域名的映射
1.有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序
2.没有:去DNS服务器找 (DNS就是管理所有域名的地方)
找到的话就返回,找不到的话就返回找不到
理解:
客户端发起请求,假设发送的请求是:www.baidu.com,这个请求不是直接拿到的
客户端有一个hosts配置文件,他在:C:WindowsSystem32driversetc
客户端会先去hosts看看有没有这个域名的配置文件
3.5发布一个web网站
不会就先模仿
- 把自己写的网站,放在服务器(Tomcat)中指定的web应用程序夹(webapps)下,
就可以访问网站应有的结构
---webapps :Tomcat服务器的web目录
-ROOT
-kuangstudy :网站的目录名
-WEB -INF
-classes :Java程序
-lib:web应用所依赖的jar包
-web.xml:网站配置文件
-index.html:网站默认的首页
-static :静态资源文件
-css
-style
-js
-img
...
4.Http
4.1什么是HTTP
HTTP(超文本传输协议),是一个简单的请求-响应协议,它通常运行在TCP之上
- 文本:html,字符串…
- 图片,声音,视频,定位,地图
- 默认端口号:80
默认端口号:443
4.2两个时代
- http1.0
- - HTTP/1.0:客户端可以和web服务器连接后,只能获得一个web资源 - 当我们请求第二次的时候,也不能获得资源,因为断开连接了
- http2.0
- - HTTP/1.1:客户端可以和web服务器连接后,可以获得多个web资源
4.3HTTP请求
- 客户端–发送请求(Request)–服务器 我们输入百度地址,点击回车,在网页上查看请求过程
Request URL:https://www.baidu.com/ 请求地址
Request Method:GET 请求方法
Status Code:200 OK 状态码
Remote(远程) Address:14.215.177.39:443
Reffer Policy:no-referrer-when-downgrade
Accept:text/html
Accept-Encoding:gzip,deflate,br
Accept-Language:zh-CN,zh;q=0.9 语言
Cache-Control:max-age=0
Connection:keep-alive
1.请求行
- 请求行中的请求方式:GET
- 请求方式:GET , POST ,HEAD,DELETE,PUT,TRACT
- - get:请求方式所能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据信息,不安全,但是效率高 - post:请求方式所能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址显示数据信息,但是安全
2.消息头
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪一种编码方式
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机
4.4HTTP响应
- 服务器端----响应—客户端
百度:
Cache-Control:private 缓存控制
Connection:Keep-Alive 连接
Content-Encoding:gzip 编码
Content-Type:text/html 类型
1.响应体
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪一种编码方式
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机
Refresh: 告诉客户端,多久刷新一次
Location: 让网页重新定位
2.响应状态码(重点)
200:请求响应成功
3**:请求重定向
- 重定向:你重新到我给你指定的新位置去
4**:找不到资源 404
- 资源不存在
5**:服务器代码错误 500
502叫网关错误
常见面试题(伴随javaweb学习过程中)
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够显示回来,经历了什么?
5.Maven
为什么要学习这个技术
1.在javaweb开发中,需要使用大量的jar包,需要手动导入
2.如何能够让一个东西自动帮我们导入和配置这个jar包
由此,Maven就诞生了
Maven是国外的
5.1Maven项目架构管理工具
我们目前就是用来导入jar包的
Maven的核心思想:约定大于配置
- 有约束,不要去违反
Maven会规定号我们要怎么去编写我们的java代码,必须按照这个要求来,主要是规范我们代码要写在哪一个目录下面
5.2下载安装Maven
下载完成后,解压即可
5.3配置环境变量
在我们的系统环境变量中
配置如下变量:
- M2_HOME maven目录下面的bin目录
- MAVEN_HOME :maven目录
- 在系统的path中配置MAVEN_HOME %MAVEN_HOME%bin
- 测试maven是否安装完毕
5.4阿里云镜像
- 镜像:mirrors
- - 作用:加速我们的下载
- 国内建议使用阿里云的镜像
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public </url>
</mirror>
</mirrors>
5.5本地仓库
在本地的仓库,原创仓库
建立一个本地仓库:localRepository
<localRepository>
D:\Program Files\apache-maven-3.8.4-bin\apache-maven-3.8.4\maven-repo
</localRepository>
5.6在IDEA中maven的操作
创建maven项目(通过模板创建)
1.创建MavenWeb项目
2.等待项目初始化完毕 出现 BUILD SUCCESS 说明成功
3.观察maven项目多了什么东西
4.idea中的maven设置
4.idea中的maven设置
idea项目创建成功以后,看一眼maven的配置
点击菜单栏View->Tool Windows->Maven projects
创建普通maven项目
这个只有在Web应用下才会有
5.7标记文件夹功能
5.8配置Tomcat
解决警告问题
为什么会有警告问题
必须要配置:为什么会出现这个问题:我们访问一个网站的时候,需要指定一个文件夹的名字
然后启动Tomcat
5.9 pom文件
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>
<!--这里就是我们刚刚配置的GAV-->
<groupId>com.kuang</groupId>
<artifactId>javaweb-01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!--java的打包方式 jar:java应用 war:JavaWeb应用 -->
<packaging>war</packaging>
<name>javaweb-01-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>
<!--编译版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--配置文件-->
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!--静态依赖的jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<!--项目构建用的东西-->
<build>
<finalName>javaweb-01-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>
maven的高级之处在于,它会子哦对那个帮你导入这个jar包所需要的其他jar包
maven的约定大于配置,它规定好我们的Java代码要写在哪一个包下面,如果我们不这样做的话,甚至都建不了Java
maven由于它的约定大于配置,我们之后可能会遇到我们写的配置文件,无法被导出或者生效问题,解决方案:
<!--在build中配置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>