JavaWeb

Java Web

1. 基本概念

1.1 前言

web开发

  • web网页
  • 静态web
  • html、css、JavaScript
  • 提供给所有人看的数据适中不会发生变化
  • 动态Web
  • 淘宝、几乎是所有的网站
  • 提供给所有人看的数据始终会发生变化,每个人在不同的时间、不同的地点看到的信息各不相同
  • 技术栈:Servlet、JSP、ASP、PHP

在Java中,动态web资源开发的技术统称为JavaWeb

1.2 web应用程序

web应用程序:可以提供浏览器访问的程序

  • a.html、b.html等多个web资源,这些web资源可以被外界访问,对外界提供服务
  • 能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
  • URL
  • 这个同意的web资源会被放在同一个文件夹下,web应用程序–>Tomcat:服务器
  • 一个web应用由多部分组成(静态web、动态web)
  • html、css、JavaScript
  • jsp、servlet
  • java程序
  • jar包
  • 配置文件(Properties)

web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来同意管理

1.3 静态web

  • *.htm、.html这些都是网页的后缀,如果服务器上一直存在这些东西,就可以直接进行读取、通信
  • 一次请求:Request,一次相应:Response
  • 静态web存在的缺点
  • web页面无法动态更新,所有用户看到都是同一个页面
  • 轮播图、点击特效:伪动态
  • JavaScript【实际开发中,它用的最多】
  • VBScript
  • 无法和数据库交互(数据无法持久化,用户无法交互)

1.4 动态Web

页面会动态展示:”Web 的页面展示的效果因人而异“

Plugin插件

JAVA快速打开 java咋打开_JAVA快速打开

 

 

 

缺点:

  • 加入服务器的动态Web资源出现了错误,需要重新编写后台程序重新发布。
  • 停机维护

优点:

  • web页面可以动态更新,所有用户看到都不是同一个页面
  • 可以和数据库交互(数据持久化:注册、商品消息、用户信息)

JAVA快速打开 java咋打开_maven_02

 

 

 

2. web服务器

2.1 技术讲解

ASP:

  • 微软:国内最早流行的就是ASP;
  • 在HTML中嵌入了VB的版本,ASP+COM;
  • 在ASP开发中,基本一个页面都有几千行的业务代码,页面极其混乱

C#

IIS

JSP/Servlet

  • sun公司主推的B/S架构(浏览器和服务器)
  • 基于Java语言的(所有的大公司、或者一些开源的组件,都是用Java写的)
  • 可以承载三高问题带来的影响(高并发、高可用、高性能)
  • 语法像ASP,方便ASP转型,加强市场转型

php

  • PHP开发速度很快,功能很强大,跨平台,代码很简单(70%网站)
  • 无法承载大访问量的情况(局限性)

……

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 程序的首选。对于一个Java初学Web者来说,是最佳选择。

Tomcat 实际上运行JSP 页面和Servlet。目前Tomcat最新版本为10.0.5

下载Tomcat:

  1. 安装 or 解压
  2. 了解配置文件及目录结构
  3. 作用

3. Tomcat

3.1 Tomcat官网

下载:https://tomcat.apache.org/download-90.cgi

JAVA快速打开 java咋打开_服务器_03

 

 

 

解压后文件夹作用

JAVA快速打开 java咋打开_服务器_04

 

 

 

3.2 Tomcat启动关闭

启动Tomcat

bin文件夹的startup.bat双击

浏览器地址输入localhost:8080,进入Tomcat页面

访问测试:http://localhost:8080/

可能遇到的问题:

  1. Java环境变量没有配置
  2. 闪退问题:需要配置兼容性
  3. 乱码问题:配置文件设置

关闭

bin文件夹的shutdown.bat双击

3.3 Tomcat配置

配置环境变量

apache-tomcat-9.0.45\webapps\ROOT\index.jsp 里有登录Tomcat界面的html代码

apache-tomcat-9.0.45\conf\server.xml 里有配置信息(包括启动的默认端口号8080、主机的名称localhost)

默认的主机名为localhost->127.0.0.1

默认网站应用存放的位置为:webapps

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" />
<Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">

 

mysql端口号3306

http:80

https:443

面试题:

网站是如何进行访问的?

  1. 输入一个域名:回车
  2. 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射
  1. 有:直接返回对应的ip地址,这个地址中没有需要的web程序,可以直接访问
  2. 没有:去DNS服务器找,找到的话就返回,找不到就返回找不到
    DNS全世界的域名都在这里管理

3.4 发布一个web网站

  • 将自己写的网站(不会写就模仿),放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问网站了
  • 网站应该有的结构
--webapps:Tomcat服务器的web目录
     --ROOT
     --xxx:网站的目录名
         --WEB-INF
             -classes:java程序
             -lib:web应用锁依赖的jar包
             -web.xml:网站配置文件
         -index.html 默认的首页
         -static
             -css
                 -style.css
             -js
             -img
         -......

4. HTTP

4.1 HTTP

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。

  • 文本:html,字符串
  • 超文本:图片,音乐,视频,定位,地图
  • 端口号:80

HTTPS:安全的Security

端口号:443

4.2 两个时代

  • http1.0
  • HTTP/1.0:客户端可以与web服务器连接,只能获得一个web资源
  • http2.0
  • HTTP/1.1:客户端可以与web服务器连接,可以获得多个web资源

4.3 HTTP请求

客户端–发请求(Request)–服务器

抓包:打开开发人员工具

JAVA快速打开 java咋打开_maven_05

 

 

 

Request URL: https://www.baidu.com/
 Request Method: GET
 Status Code: 200 OK
 Remote Address: 163.177.151.110:443 远程地址
 Referrer Policy: no-referrer-when-downgrade

百度:

Cache-Control: private          缓存控制
 Connection: keep-alive          保持连接
 Content-Encoding: gzip          编码
 Content-Type: text/html;charset=utf-8       类型
 Server: BWS/1.1
 Transfer-Encoding: chunked
 X-Ua-Compatible: IE=Edge,chrome=1
  1. 请求行
  • 请求行中的请求方式:GET
  • 请求方式:GET/POST、HEAD、DELETE、PUT、TRACT
  • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效
  • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,很不高效
  1. 消息头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
 告诉浏览器,它所支持的数据类型
 Accept-Encoding: gzip, deflate, br
 支持哪种编码格式GBK、UTF-8、GB2312、ISO8859-1
 Accept-Language: zh-CN,zh;q=0.9             语言环境
 Connection: keep-alive                      请求完成是断开还是保持连接
 HOST:               主机

4.4 HTTP响应

服务器-响应-客户端

百度:

Cache-Control: private          缓存控制
 Connection: keep-alive          保持连接
 Content-Encoding: gzip          编码
 Content-Type: text/html;charset=utf-8       类型
 Server: BWS/1.1
 Transfer-Encoding: chunked
 X-Ua-Compatible: IE=Edge,chrome=1
  1. 响应体
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
 告诉浏览器,它所支持的数据类型
 Accept-Encoding: gzip, deflate, br
 支持哪种编码格式GBK、UTF-8、GB2312、ISO8859-1
 Accept-Language: zh-CN,zh;q=0.9             语言环境
 Connection: keep-alive                      请求完成是断开还是保持连接
 HOST:               主机
 Refresh:            告诉客户端,多久刷新一次
 Location:           让网页重新定位
  1. 响应状态码
    200:请求响应成功200
    3**:请求重定向,重新直到提供新位置
    4**:找不到资源404资源不存在
    5**:服务器代码错误500502网关错误

5. Maven

为什么要学习这个技术?

  1. 在JavaWeb开发中,需要使用大量的jar包,需要手动导入
  2. 需要一个东西自动导入和配置这个jar包

5.1 Maven架构管理工具

方便导入jar包

Maven的核心思想:约定大于配置

  • 有约束,不要去违反

Maven规定好如何编写Java代码,必须按照规范

5.2 下载

https://maven.apache.org/download.cgi

建议:电脑上的所有环境都放在一个文件夹下,方便管理

5.3 配置环境变量

M2_HOME:maven目录下的bin目录

MAVEN_HOME:maven的目录

在系统的path中配置MAVEN_HOME

配置成功效果:输入mvn -version

JAVA快速打开 java咋打开_maven_06

 

 

 

测试Maven是否安装成功,保证必须配置完毕

5.4 阿里云镜像

镜像:mirrors

作用:加速我们的下载

国内建议使用阿里云的镜像

1    <!-- mirrors
 2     | This is a list of mirrors to be used in downloading artifacts from remote repositories.
 3     |
 4     | It works like this: a POM may declare a repository to use in resolving certain artifacts.
 5     | However, this repository may have problems with heavy traffic at times, so people have mirrored
 6     | it to several places.
 7     |
 8     | That repository definition will have a unique id, so we can create a mirror reference for that
 9     | repository, to be used as an alternate download site. The mirror site will be the preferred
10     | server for that repository.
11     镜像:方便下载使用
12     Maven是国外的,国内有墙,访问外网会会非常慢,FQ需要VPN
13     |-->
14    <mirrors>
15      <!-- mirror
16       | Specifies a repository mirror site to use instead of a given repository. The repository that
17       | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
18       | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
19       |
20      <mirror>
21        <id>mirrorId</id>
22        <mirrorOf>repositoryId</mirrorOf>
23        <name>Human Readable Name for this Mirror.</name>
24        <url>http://my.repository.com/repo/path</url>
25      </mirror>
26       -->
27      <mirror>
28        <id>alimaven</id>
29        <mirrorOf>central</mirrorOf>
30        <name>aliyun maven</name>
31        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
32      </mirror>
33    </mirrors>

 

5.5 本地仓库

在本地的仓库和远程的仓库

建立一个本地仓库:localRepository

<!-- localRepository
             本地仓库
    | The path to the local repository maven will use to store artifacts.
    |
    | Default: ${user.home}/.m2/repository
   <localRepository>/path/to/local/repo</localRepository>
   -->
   <localRepository>C:\Users\88534\Desktop\Java入门\JavaWeb\apache-maven-3.8.1\maven-repo</localRepository>

 

5.6 在IDEA中使用Maven

  1. 启动IDEA,创建一个Maven的Web项目
    使用了Maven的Web模板

JAVA快速打开 java咋打开_maven_07

 

 

 

  1. 设置名字和路径

JAVA快速打开 java咋打开_maven_08

 

 

 

  1. 选择路径:

JAVA快速打开 java咋打开_JAVA快速打开_09

 

 

 

之后会开始下载一些需要的文件,显示此输出结果表示搭建项目完成

[INFO] ----------------------------------------------------------------------------
 [INFO] Using following parameters for creating project from Archetype: maven-archetype-webapp:RELEASE
 [INFO] ----------------------------------------------------------------------------
 [INFO] Parameter: groupId, Value: com.zhou
 [INFO] Parameter: artifactId, Value: JavaWeb-maven
 [INFO] Parameter: version, Value: 1.0-SNAPSHOT
 [INFO] Parameter: package, Value: com.zhou
 [INFO] Parameter: packageInPathFormat, Value: com/zhou
 [INFO] Parameter: package, Value: com.zhou
 [INFO] Parameter: version, Value: 1.0-SNAPSHOT
 [INFO] Parameter: groupId, Value: com.zhou
 [INFO] Parameter: artifactId, Value: JavaWeb-maven
 [INFO] Project created from Archetype in dir: C:\Users\88534\AppData\Local\Temp\archetypetmp\JavaWeb-maven
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time:  04:01 min
 [INFO] Finished at: 2021-05-19T00:06:02+08:00
 [INFO] ------------------------------------------------------------------------
  1. 仓库repo增加了一些下载好的东西
  2. IDEA中的Maven配置

注意IDEA项目创建完成后,看一眼Maven的配置

JAVA快速打开 java咋打开_html_10

 

 

 

  1. 完成配置

  2. 创建一个Maven空项目(不需要模板)

JAVA快速打开 java咋打开_maven_11

 

 

 

  1. 在main下添加目录java和resource

JAVA快速打开 java咋打开_服务器_12

 

 

 

5.7 在IDEA中配置Tomcat

访问一个网站,需要指定一个文件夹名字

JAVA快速打开 java咋打开_maven_13

 

 

JAVA快速打开 java咋打开_服务器_14

 

 

点击Artifact后选择第一个JavaWeb-maven:war,解决了警告问题

JAVA快速打开 java咋打开_html_15

 

 

对应路径映射影响输入网址的localhost:8080/…后半部分进入内容

配置完成后,可以开启运行键启动

JAVA快速打开 java咋打开_JAVA快速打开_16

 

 

自动弹出Hello World!网页

点击右侧Maven目录,查看

JAVA快速打开 java咋打开_html_17

 

 

 

5.8 pom文件

maven的核心配置pom.xml

1  <?xml version="1.0" encoding="UTF-8"?>
 2  <!--Maven版本和头文件-->
 3  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5    <modelVersion>4.0.0</modelVersion>
 6  <!--配置的GAV-->
 7    <groupId>com.zhou</groupId>
 8    <artifactId>JavaWeb-maven</artifactId>
 9    <version>1.0-SNAPSHOT</version>
10  <!--  package项目的打包方式
11  jar:Java应用
12  war:JavaWeb应用-->
13    <packaging>war</packaging>
14  
15    <name>JavaWeb-maven Maven Webapp</name>
16    <!-- FIXME change it to the project's website -->
17    <url>http://www.example.com</url>
18  <!--配置-->
19    <properties>
20  <!--    项目的默认构建编码-->
21      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22  <!--    编码版本-->
23      <maven.compiler.source>1.7</maven.compiler.source>
24      <maven.compiler.target>1.7</maven.compiler.target>
25    </properties>
26  <!--项目依赖-->
27    <dependencies>
28  <!--    具体依赖的jar包配置文件,可在IDEA左侧Project工具栏中External Libraries中找到-->
29        <!--    下载地址在https://mvnrepository.com/-->
30        <!--    Maven的高级之处在于帮你导入这和个jar包所依赖的其他jar-->
31      <dependency>
32        <groupId>junit</groupId>
33        <artifactId>junit</artifactId>
34        <version>4.11</version>
35        <scope>test</scope>
36      </dependency>
37    </dependencies>
38  <!--项目构建用的东西-->
39      <!--  在build中配置resources,来防止资源导出失败-->
40    <build>
41      <finalName>JavaWeb-maven</finalName>
42      <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
43        <plugins>
44          <plugin>
45            <artifactId>maven-clean-plugin</artifactId>
46            <version>3.1.0</version>
47          </plugin>
48          <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
49          <plugin>
50            <artifactId>maven-resources-plugin</artifactId>
51            <version>3.0.2</version>
52          </plugin>
53          <plugin>
54            <artifactId>maven-compiler-plugin</artifactId>
55            <version>3.8.0</version>
56          </plugin>
57          <plugin>
58            <artifactId>maven-surefire-plugin</artifactId>
59            <version>2.22.1</version>
60          </plugin>
61          <plugin>
62            <artifactId>maven-war-plugin</artifactId>
63            <version>3.2.2</version>
64          </plugin>
65          <plugin>
66            <artifactId>maven-install-plugin</artifactId>
67            <version>2.5.2</version>
68          </plugin>
69          <plugin>
70            <artifactId>maven-deploy-plugin</artifactId>
71            <version>2.8.2</version>
72          </plugin>
73        </plugins>
74      </pluginManagement>
75    </build>
76  </project>

 

maven由于他的约定大于配置,我们之后可能会遇到写出的配置文件,无法被导出或者生效,需要配置resources

1 <build>
 2      <resources>
 3        <resource>
 4          <directory>
 5            src/main/resources
 6          </directory>
 7          <excludes>
 8            <exclude>**/*.properties</exclude>
 9            <exclude>**/*.xml</exclude>
10          </excludes>
11          <filtering>false</filtering>
12        </resource>
13        <resource>
14          <directory>
15            src/main/java
16          </directory>
17          <excludes>
18            <exclude>**/*.properties</exclude>
19            <exclude>**/*.xml</exclude>
20          </excludes>
21          <filtering>false</filtering>
22        </resource>
23      </resources>
24  </build>