Javaweb学习笔记!
观看狂神学java javaweb入门到实战学习笔记!
目录
- Javaweb学习笔记!
- 1. 基本概念
- 1.1 前言
- 1.2 web应用程序
- 1.3 静态web
- 1.4 动态web
- 2. web服务器
- 2.1 技术支持
- 2.2 网络服务器
- 3. Tomcat
- 3.1 安装Tomcat
- 3.2 启动和配置
- 3.3 配置文件
- 3.4 面试题
- 3.5 发布一个网站
- 4. HTTP
- 4.1 Http简介
- 4.3 HTTP请求
- 1. 请求行
- 2. 消息头
- 4.4 HTTP响应
- 1. 响应体
- 2、响应状态码(重要)
- 5.Maven
- 5.1 Maven项目架构管理工具
- 5.2 下载安装Maven
- 5.3配置环境变量
- 5.4阿里云镜像
- 5.5 本地仓库
- 5.6 IDEA中使用Maven
- 5.7 文件夹标记
- 5.8 配置Tomcat
- 5.9 了解Maven
- 5.10 IDEA操作
1. 基本概念
1.1 前言
web开发:
- 静态web
- html css
- 提供给所有人看的数据始终不会变化!
- 动态web
- 提供给所有人看的数据始终会发生变化,每个人在不同时期,不同地点看到的信息各不相同。
- 技术栈:JSP/servlet,ASP,PHP
在Java中,动态web资源开发的技术统称为javaweb
1.2 web应用程序
可以供浏览器访问的程序
- 多个web资源可以被外界访问,对外提供服务
- 能访问到的任何一个页面,都存在这个世界某一个角落的计算机上
- URL
- 这个统一的web资源会放在同一个文件夹下,web应用程序–>Tomcat:服务器
- 一个web应用程序由多部分组成(静态web,动态web)
- html ,css,js
- jsp,servlet
- java程序
- jar包
- 配置文件(Properties)
web应用程序写完,若想要提供给外界访问,需要一个服务器来统一管理
1.3 静态web
1.4 动态web
- 优点:
- 页面可以动态更新,所有用户看到的都不是同一个页面
- 可以和数据库交互(数据持久化,不至于数据丢失!)
- 缺点:
假如服务器的动态web资源出现错误,我们需要重新编写后台程序,重新发布!
2. web服务器
2.1 技术支持
**ASP:**国内最早流行的就是ASP(微软) 原理:C#
PHP:
- 开发速度快,功能很强大,跨平台,代码很简单
- 无法承载大的访问量(局限性)
JSP/Servlet:
- B/S:浏览器和服务器
- C/S:客户端和服务器
- sun公司主推的B/S架构
- 基于java语言
- 可以承载三高问题带来的影响
2.2 网络服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息!
Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范能在Tomcat 中得到体现,Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
3. Tomcat
3.1 安装Tomcat
- 官网下载:http://tomcat.apache.org/
- 解压
3.2 启动和配置
- 文件夹
- 启动和关闭
startup.sh
startup.bat
访问测试:
访问测试:http://localhost:8080/
开启后可以访问:
关闭则不可以:
可能遇到的问题:
- Java 环境变量没有配置导致闪退
- 乱码问题:可在配置文件中配置
- 闪退问题:需要配置兼容性
3.3 配置文件
Servlet 核心配置文件目录如下:
可以配置启动的端口号
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
修改后:
可配置主机名称
- 默认的主机名为:localhost–>127.0.0.1
- 默认网站应用存放的位置为:webapps
修改后:
修改后重启Tomcat,找不到服务器!
在系统文件夹:
新增一个映射:
可以了:(地址一定要输入正确!)
3.4 面试题
谈谈怎样访问一个网站!
- 在浏览器输入一个域名,回车;
- 本机查看 C:\Windows\System32\drivers\etc\hosts 配置文件是否有相应域名的映射。
case1: 若有,则直接映射到对应的 IP 地址,进行访问。
case2: 若无,则去 DNS 服务器上查找对应的 IP ,找到就返回相应的 IP,找不到就不返回。
3.5 发布一个网站
网站程序结构:
--webapps :Tomcat服务器的web目录
-ROOT
-kuangstudy :网站的目录名
- WEB-INF
-classes : java程序
-lib:web应用所依赖的jar包
-web.xml :网站配置文件
- index.html 默认的首页
- static
-css
-style.css
-js
-img
-.....
4. HTTP
4.1 Http简介
超文本传输协议,是一个简单的请求,响应协议,通常运行在TCP之上!
- 文本:html,字符串
- 超文本:图片,音乐,视频,定位,地图…
- 默认端口:80
**Https:**安全的
- 默认端口:443
两个时代
- HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接(http/1.0)
- HTTP/2.0:客户端可以与web服务器连接后,可以获得多个web资源(http/1.1)
4.3 HTTP请求
- 客户端-发请求(Request)—服务器
- 百度:
Request URL:https://www.baidu.com/ 请求地址
Request Method:GET get方法/post方法
Status Code:200 OK 状态码:200
Remote(远程) Address:14.215.177.39:443
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:请求能够携带的参数比较少,大小有限制,会在浏览区显示数据,不安全,但高效。
post:请求能够携带的参数没有限制,大小无限制,不会在浏览器的URL地址栏显示数据内容,安全,
但不高效
2. 消息头
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
4.4 HTTP响应
- 服务器–响应–客户端
- 百度:
Cache-Control:private 缓存控制
Connection:Keep-Alive 连接
Content-Encoding:gzip 编码
Content-Type:text/html 类型
1. 响应体
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
Refresh:告诉客户端,多久刷新一次;
Location:让网页重新定位;
2、响应状态码(重要)
200:请求响应成功200
3xx:请求重定向
- 重定向:你重新到我给你新位置去;
4xx:找不到资源404·资源不存在;
5xx:服务器代码错误 500 502:网关错误
常见面试题:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
- 域名解析
- 发起TCP的三次握手
- 建立起TCP连接后发起http请求
- 服务器响应http请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(css JavaScript 图片)
- 浏览器对页面进行渲染呈现
在我们输入网址按下回车后,DNS服务器会通过当前网址解析这一网址的ip;在查找到IP之后,浏览器会向服务器发起一个tcp连接请求,此请求包含三次握手,如下:
第一次握手:建立链接时,客户端浏览器会发送syn包到服务器,并进入SYS_SENT状态,等待服务器的确认;
第二次握手:服务器收到syn包后,必须确认客户端的syn,同时之间发送一个ack包,即是syn加ack包,此时服务器进入SYN_RECV状态,此时服务器被动打开后,接收到客户端的syn并且发送了ack时状态;
第三次握手:客户端接收到服务器的syn+ack包后,给服务器发送确认包ack,包发送完毕之后,客户端和服务器端进入ESTABLISHED(tcp连接成功)状态,完成了第三次握手。
当三次握手结束后客户端和服务器端就建立好了连接,此时tcp协议断开,开始访问服务器下的默认index.html页面,并调用该访问的资源文件,展示相应的内容
5.Maven
前言
- 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
- 如何能够让一个东西自动帮我导入和配置这个jar包。
5.1 Maven项目架构管理工具
目前用来就是方便导入jar包的!
Maven的核心思想:约定大于配置
- 有约束,不要去违反。
Maven会规定好你该如何去编写我们Java代码,必须要按照这个规范来;
5.2 下载安装Maven
官网:https://maven.apache.org/
5.3配置环境变量
在我们的系统环境变量中配置如下配置:
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven的目录
- 在系统的path中配置%MAVEN_HOME%\bin
5.4阿里云镜像
- 镜像: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>
5.5 本地仓库
<localRepository>D:\Sofelodaing\apache-maven-3.8.1\maven-repo</localRepository>
5.6 IDEA中使用Maven
- 创建一个mavenweb项目
等待项目初始化
如果有错误:
一般出现以下几种情况:
- 镜像问题:可以多配置几个镜像
<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>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com
</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 中央仓库在中国的镜像 -->
<mirror>
<id>maven.net.cn</id>
<name>oneof the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
- 新建maven项目时,Run中报警告:No archetype found in remote catalog. Defaulting to internal catalog.【在远程目录中没有找到原型。默认为内部编录。】,如图:
解决方案:
- 可以不用管【因为使用了maven模版构建项目,要从网上获取模版,然而没有找到这个模版或者网络慢,导致获取失败 】,选择File —> 再选择Close Project,关闭项目后重启就可以了。
- 参考 这篇文章
在maven的VM Options加上-DarchetypeCatalog=internal参数,如下:
5.7 文件夹标记
一个完整项目需要新建的文件夹
- 也可以这样设置
- 先点击文件,再点击项目结构:
- 点击Model进行设置
5.8 配置Tomcat
- 点击这里
- 配置
- 解决警告问题
原因是没有关联本地的tomcat,关联本地tomcat即可
建议暂时不要使用Tomcat10,因为会出现找不到路径问题
所以我又重新下载了Tomcat9
接下来就是没有创建项目的警告了:这个好办
原因:我们访问一个网站,需要一个文件夹的名字
解决办法:直接创建一个,如下图
- 启动Tomcat
intellij IDEA tomcat 启动时 报错
AJP Connector node not found: set up one in the server.xml
解决办法:
把配置tomcat的HTTP端口下面的HTTPs的端口去掉就可以了
还要保证你的Tomcat没有正在使用!
- 启动成功
5.9 了解Maven
核心配置文件:Pom.xml
<?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.liang</groupId>
<artifactId>javaweb_01_maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 项目打包方式
jar:java项目
war:javawb项目
-->
<packaging>war</packaging>
<!--配置-->
<properties>
<!--项目的默认构建编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编译版本-->
<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>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>
<!-- 在build中配置resources , 来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
5.10 IDEA操作
目录树:
因为我没导入spring,所以比较简单
未完待续