1.JavaWeb
1.1基本概念
1.1.1web开发
在java中,动态web资源开发的技术统称为JavaWeb。
web开发:
- web:网页的意思
- 静态web
- html,css
- 提供给所有人看的数据始终不会发生变化
- 动态web
- 提供给所有人看的数据始终会发生变化,每个人在不同的时间、不同的地点看到的信息各不相同(淘宝的千人千面)
- 技术栈:Servlet/jsp,ASP,PHP
1.1.2web应用程序
web应用程序:可以提供浏览器访问的程序。web应用程序编写完毕后,若想提供给外界访问,就需要一个统一服务器来管理。
- a.html、b.html……多个web资源,这些web资源可以被外界访问,对外界提供服务
- 我们能访问到的任何一个页面或者资源,都存在于这个世界上的某一台计算机上
- url:统一资源定位系统(uniform resource locator)是因特网的万维网服务程序上用于指定信息位置的表示方法。
- 这个统一的web资源会被放在同一个文件夹下,形成web应用程序----->Tomcat服务器
- 一个web应用由多部分组成(静态web,动态web)
- html,css,js
- jsp,servlet
- java程序
- jar包
- 配置文件(Properities)
1.1.3静态Web
-
.html、.htm等这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。
-
静态Web存在的缺点:
- Web页面无法动态更新,所有的用户看到的都是同一个页面
- 轮播图:点击特效,伪动态
- JavaScript
- VBScript
- 他无法和数据库交互,数据无法持久化,用户无法交互
- Web页面无法动态更新,所有的用户看到的都是同一个页面
1.1.4动态Web
页面会动态展示:“Web页面展示的效果因人而异”
缺点:
- 加入服务器的动态web资源出现了错误,我们就需要重新编写我们的后台程序,重新发布(停机维护)。
优点:
- Web页面可以动态更新,所有的用户看到的都是不同的页面
- 他可以和数据库交互,数据持久化:注册,商品信息,用户信息……
1.2Web服务器
1.2.1ASP:
-
微软:国内最早流行的就是ASP
-
在HTML中嵌入了VB的脚本,ASP+COM
-
在ASP开发中,基本一个页面都有几千行的业务代码,页面极其混乱
-
维护成本高
-
C#
-
IIS互联网信息服务,Web服务组件
<h1> <p></p> <p> <% System.out.println("hello") %> </p> </h1>
1.2.2PHP
- php开发速度很快,功能很强大,跨平台,代码很简单。PHP在Web网站服务器端使用的编程语言所占份额高达78.9%。
- 无法承载大访问量的情况(局限性)
1.2.3JSP/Servlet
B/S:浏览和服务器
C/S:客户端和服务器
- sun公司主推的B/S架构
- 基于java语言的,所有的大公司或者一些开源的组件都是用java写的
- 可以承载三高问题带来的影响
- 语法很像ASP,这使得ASP转JSP很容易,这就加强了市场强度
1.2.4Web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
IIS:微软的,ASP,Windows中自带的
Tomcat:
Tomcat是Apache 软件基金会(Apache Software Foundation)的,由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。
Tomcat服务器是一个免费的开放源代码的Web 应用服务器。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
当配置正确时,Apache 为HTML(标准通用标记语言下的一个应用)页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个**Servlet和JSP容器。
2.Tomcat
2.1去官网下载安装包
2.2件夹的作用
2.3启动和关闭
启动和关闭Tomcat,在bin文件夹里
测试:
在http://localhost:8080后面,可以加上webapps中的文件http://localhost:8080/docs/
可能遇到的问题:
- java环境变量没有配置
- 闪退问题:需要配置兼容性
- 乱码问题,配置文件中的设置
2.4配置
2.4.1端口号
在server文件里可以修改端口号,仍旧能访问
- tomcat:8080
- mysql:3306
- http:80
- https:443
2.4.2主机名
但是修改主机就不能访问,如果想要其能够访问,需要修改系统配置
- 默认主机名:localhost–>127.0.0.1
- 默认网站应用存放的位置为:webapps
2.4.3面试题
请你谈谈网站是如何进行访问的?
-
输入一个域名,回车
-
检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射
-
有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
-
没有:去DNS服务器找,找到的话就返回。找不到就返回找不到
-
2.5发布一个web网站
不会写就先模仿
将自己写的网站,放到服务器(tomcat)中指定的web的文件夹下(webapps),就可以访问了。
网站应有的结构:
-- webapps:Tomcat服务器的web目录
- Root
- 自己的网站文件夹
- WEB-INF
- classes:java程序
- lib:web应用所依赖的jar包
- web.xml:网站配置文件
- index.html:默认的首页
- static
- css
- style.css
- js
- img
- ……
3.Http
3.1概念
HTTP:超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html,字符串
- 超文本:图片,音乐,视频,定位,地图……
- http:80 https:443,s代表安全的
两个时代:
- HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,然后会断开连接
- HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源
3.2请求
请求:客户端—发请求(Request)—服务器
1.百度中的包:
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get方法/post
Status Code: 200 OK 状态码:200
Remote Address: 220.181.38.150:443 远程地址
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
2.请求行:
- 请求行中的请求方式:get
- get:请求能够携带的参数较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效
- post:请求能够携带的参数没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但部高效
3.消息头
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式,GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成后是断开还是保持连接
HOST:主机
3.3响应
响应:服务器—响应(Response)—客户端
1.百度:
Cache-Control: private 缓存控制
Connection: keep-alive 连接
Content-Encoding: gzip 编码
Content-Type: text/html;charset=utf-8 类型
2.响应体:
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式,GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成后是断开还是保持连接
HOST:主机
Refresh:告诉客户端,多久刷新一次
Location:让网页重新定位
3.响应状态码:
- 200:请求响应成功
- 3xx:请求重定向
- 重定向:你重新到我给你的新位置去
- 4xx:找不到资源,资源不存在 404
- 5xx:服务器代码错误 500 502:网关错误
3.4面试题
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
- 域名解析
- 发起TCP的三次握手
- 建立起TCP连接后发起http请求
- 服务器响应http请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(css JavaScript 图片)
- 浏览器对页面进行渲染呈现
4.Maven
4.1概述
在Javaweb开发中,需要使用大量的jar包,需要我们手动去导入。如何能够让一个东西自动帮我们导入和配置这个jar包,由此Maven诞生了。
Maven项目架构管理工具:我们目前用就是方便导入jar包的。maven的高级之处是它会帮你导入这个jar包所依赖的其他jar包。
Maven核心思想:约定大于配置,Maven会规定好我们该如何去编写我们的代码,必须按照这个规范来。
4.2配置环境变量
在我们的系统环境中:
- M2_HOME:D:\c\apache-maven-3.6.1\bin
- MAVEN_HOME:D:\c\apache-maven-3.6.1
- path里配置:%MAVEN_HOME%\bin
4.3阿里云镜像
我的存放位置:D:\c\apache-maven-3.6.1\conf\setting.xml
镜像:是由于对外网的访问速度过慢,由此诞生镜像加速我们的下载。国内建议使用阿里云镜像(百度搜索即可得到很多阿里云镜像)。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
4.4本地仓库
本地仓库,远程仓库。
建立一个本地仓库:localRepository
<localRepository>D:\c\apache-maven-3.6.1\maven-repo</localRepository>
4.5在Idea中使用Maven
4.5.1创建和配置
1.创建一个Mavenweb项目
2.等待项目自动导入包
3.观察maven仓库多了什么
4.idea中的maven设置
注意:idea项目创建成功后,记得看一眼maven设置是否有问题
maven结构:
4.5.2创建简单的maven
4.5.3标记文件夹功能
4.6tomcat在idea中的配置
这里的报错是因为还没连接tomcat,点击configure(用tomcat8或9,10报错)
我们访问一个web网站,需要一个指定文件夹的名字
启动
4.7pom文件
pom.xml是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>org.example</groupId>
<artifactId>javaweb-01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!--packaging项目的打包方式:
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配置-->
<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>
4.8maven仓库的使用
maven仓库地址:https://mvnrepository.com
仓库的使用方法:将这段代码复制到我们的pom.xml的dependency里,并删掉作用域scope这行。
4.9会遇到的问题
1.版本问题
将maven默认文件里的web.xml换成和tomcat里的一样
2.maven由于它的约定大于配置,我们之后可能遇到我们写的配置文件,无法被导出或者生效的问题:
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>