文章目录
在Java中,动态Web资源开发的技术统称为JavaWeb
01 web基本概念
1.1 web 应用程序
web应用程序:可以提供浏览器访问的程序
-
a.html、b.html…多个web资源,这些web资源可以被外界访问,对外界提供服务;
-
你们能访问到的任何一个页面或者资源,都存在与这个世界的某一个角落的计算机上。
-
URL
-
这个统一的web资源会被放到同一个文件夹下,web应用程序—>Tomcat:服务器
-
一个web应用由多部分组成(静态web,动态web)
-
html,css,js
-
jsp,servlet
-
Java程序
-
jar包
-
配置文件(Properties)
web应用程序编写完毕后,若想提供给外界访问:需要提供一个服务器来统一管理;
-
1.2 静态web
- 静态web存在的缺点
- web页面无法动态更新,所有用户看到的都是同一个页面
- 轮播图,点击特效:伪动态
- JavaScript[实际开发中用的最多]
- VBScript
- 它无法和数据库交互(数据无法持久化,用户无法交互)
- web页面无法动态更新,所有用户看到的都是同一个页面
1.3 动态web
页面会动态展示:“web的页面展示的效果因人而异”
缺点
- 假如服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布
优点
-
web页面可以动态更新,所有用户看到的不是同一个页面
-
它可以与数据库交互(数据持久化:注册,商品信息,用户信息…)
02 web服务器
2.1 技术讲解
ASP
- 微软:国内最早流行的就是ASP;
- 在HTML中嵌入了VB的脚本,ASP+COM;
- 在ASP开发中,基本上一个页面都有几千行的业务代码,页面及其混乱
- 维护成本高!
- C#
- IIS
php
- PHP开发速度很快,功能很强大,跨平台,代码很简单(70%);
- 但无法承载大访问量的情况(局限性);
JSP/Servlet
B/S:浏览器和服务器
C/S:客户端和服务器
- sun公司主推的B/S架构;
- 基于Java语言(所有大公司或者一些开源组件,都是用Java写的);
- 可以承载三高带来的影响;
- 语法像ASP:ASP—>JSP, 加强市场的强度;
2.2 web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息;
IIS
微软的;ASP…,Windows自带的
Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为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服务器。目前Tomcat最新版本为9.0.37。
下载Tomcat:
1、安装 or 解压
2、了解配置文件及目录结构
3、这个东西的作用
03 Tomcat
3.1 官网下载解压后的文件夹信息
3.2 启动、关闭Tomcat
(bin中的startup shutdown)
访问测试:http://localhost:8080/
3.3 配置
服务器核心配置文件文件中进行端口号和主机名称的配置
可以配置启动的端口号
-
tomcat的默认端口号为:8080
-
mysql:3306
-
http: 80
-
https:443
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
可以配置主机的名称
- 默认的主机名为: localhost->127.0.0.1
- 默认的网站应用存放的位置为: webapps
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
高难度面试题
请你谈谈一个网站是如何进行访问的
1、输入一个域名:回车
2、检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射
-
有:直接返回对应的ip地址,这个地址中有我们需要访问的web程序,可以直接访问
127.0.0.1 www.qinjiang.com
-
没有:去DNS服务器(管理所有域名的地方),找到的话就返回,找不到就返回找不到网页
3.4 发布一个web网站
不会先模仿(复制webapps中的ROOT文件夹进行操作)
- 将自己写的网站,放到服务器(Tomcat)中指定的web应用文件夹(webapps)下,就可以访问了
网站应该有的结构
--webapps:Tomcat服务器的web目录
-ROOT
-LuluStudy:网站的目录名
-WEB-INF
-classes:java程序
-lib:web应用所依赖的jar包
-web.xml:网站配置文件
-index.html:默认的首页
-static
-css
-style.css
-js
-img
-......
04 Http讲解
4.1 什么是Http
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:HTML,字符串,~…
- 超文本:图片、音乐、视频、定位、地图…
- 默认的端口:80
Https:安全的
- 默认端口:443
4.2 两个时代
- http1.0
- HTTP/1.0:客户端与web服务器连接后,只能获得一个web资源,断开连接
- http2.0
- HTTP/1.1:客户端与web服务器连接后,只能获得多个web资源
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
- GET:请求携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效。
- POST:请求携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
(2)消息头
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
4.4 Http响应
- 服务器—>响应(Response)—>客户端
百度:
Cache-Control: private //缓存控制
Connection: keep-alive //连接:保持连接
Content-Encoding: gzip //编码
Content-Type: text/html;charset=utf-8 //类型,字符集
(1)响应体
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
Refresh:告诉客户端,多久刷新一次;
Location:让网页重新定位;
(2)响应状态码
200:请求响应成功,且完成相应处理
3XX:请求重定向 301
- 重定向:你重新到我给你的新位置中去
4XX:找不到资源 404
- 资源不存在
5XX:服务器代码错误 500
常见面试题:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
05 Maven
Why Maven?
1、在Javaweb开发中,需要使用大量的jar包,我们手动去导入
2、如何能够让一个东西自动帮我们导入和配置这个jar 包
由此,Maven诞生了!
5.1 Maven项目架构管理工具
我们目前用它来方便导入jar包
Maven的核心思想:约定大于配置!
- 有约束,不要去违反!
Maven会规定好你该如何去编写我们的Java代码,必须按照这个规范来。
5.2 安装与配置
完成解压与高级系统变量配置(M2_HOME,MAVEN_HOME,PATH)后,测试是否安装成功!
5.3 阿里云镜像
-
镜像:mirrors
- 作用:加速我们的下载
-
国内建议使用阿里云的镜像
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
5.4 本地仓库
建立一个本地仓库(在config\settings.xml中进行相应的配置)
<localRepository>D:\Maven\apache-maven-3.6.3\maven_repository</localRepository>
5.5 IDEA中Maven的操作
1、启动Maven
2、创建一个Maven Web项目
3、等待项目初始化完毕
4、观察Maven仓库中多了什么东西
5、IDEA中的Maven设置
IDEA项目创建成功后,看一眼Maven的配置
6、至此,Maven在IDEA中的配置和使用就OK了!
5.6 IDEA中Tomcat的配置
解除右下角fix警告
启动Tomcat
遇到错误如下
这显然是8080端口已被占用,解决方法如下所示:
1、cmd命令提示符:执行命令:netstat -ano
可见,占用8080端口的进程PID是6032
2、执行命令:tasklist或直接打开任务管理器查看详情列表
可见占用该8080端口的进程是java.exe
3、通过任务管理器,终止进程java.exe
4、重新启动Tomcat,即可正常启动
ps: 还有一种可能,你电脑已经通过bin/startup.bat启动了Tomcat服务器,解决方法就是把电脑打开的Tomcat命令行运行窗口关闭,再重新运行一下项目即可。
5.7 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>
<!--这里是我们在新建Maven项目时配置的GAV-->
<groupId>org.example</groupId>
<artifactId>javaweb-01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!--Package:项目的打包方式
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.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!-- 具体依赖的jar包
Maven的高级之处在于,它会帮你导入这个jar包所依赖的其他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>
Maven由于他的约定大于配置,我们之后可能遇到我们写的配置文件无法导出或者生效的问题(比如Mybatis学习),解决方案如下:
在build中配置resources,防止资源导出失败
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
5.7 IDEA操作