JavaWeb
1、基本概念
静态网页无法与人工交互
动态网页可以人工交互
技术栈:Servlet、JSP、PHP
简介:在Java中,动态web资源开发的技术统称为JavaWeb.
2、web应用
web应用程序“可以提供浏览器访问的程序。
注意:网上可以访问的资源,都是储存在摸个计算机(服务器)上。通过URL(地址)去访问这个地址。
这个统一的web资源会被放置在同一个文件夹上,web应用程序–>Tomcat(服务器),将web应用部署在服务器上。
web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来同意管理。
3、组成部分
包括(静态web,动态web):
- 网页前端:html javaScript CSS
- 技术栈:JSP Servlet
- java程序
- jar包
- 配置文件
3.1、静态web
静态网页存在的缺点:
1.web页面无法动态更新,所有用户看到的都是同一个页面
2.无法和数据库交互(数据无法持久化,用户无法交互)
3.伪动态(轮播图,点击特效)
Javascript[实际开发用的最多]
VBScript
3.2、动态web
- 客户端发送请求到服务端
- 服务端经过webServer 插件过滤请求
- webServer Plugin分别处理动态资源与静态资源
- 其中静态资源由webServer来处理请求
- 动态资源则由Servlet/JSP来处理,再发送给webServer,WebServer再处理请求,病发送响应给客户端
缺点:
1.加入服务器的动态web资源出现错误时,后台就需要修改,重新发布。----停机维护
优点:
1.动态更新,所有用户看到的不是同一个
2.人工交互
3.数据库交互
4、Web服务器
4.1、技术讲解
ASP:
-
微软:国内最早流行的是ASP
-
在HTML中嵌套VB脚本,ASP+COM
-
在ASP开发中,页面比较乱,维护成本高
-
在ASP中使用是C#
-
IIS
PHP
- PHP开发速度快,功能强大,跨平台,代码简单(WP,中国70%网站使用)
- 无法承载大访问量的情况(局限性)
JSP/Servlet
B/S:浏览器和服务器
C/S:客户端和服务器
- sun公司主推的B/S架构
- 基于Java语言的
- 可以承载三高问题(高并发,高可用,高高性能)
- 语法像ASP,ASP–>JSP,加强市场强度
4.2、Web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
4.2.1、IIS(暂时了解)
微软的:windows中自带的
4.2.2、Tomcat
对初学者来说,不错的选择;
可用尝试手写Tomcat;
下载Tomcat
1.解压或者安装
2.了解配置文件及目录结构
3.了解这个东西的作用
注意:同样适用于其他软件(包括Java以及其他)
rt.jar是Java的核心jar包
Tomcat
1、启动Tomcat
- 选择Tomcat文件夹中bin目录下的startup.bat启动
- 选择Tomcat文件夹中bin目录下的shutdown.bat启动
访问测试:http://localhost:8080/
可能遇到的问题:
1.Java环境变量没有配置
2.闪退问题:需要配置兼容性
3.乱码问题:配置文件中设置
2、配置Tomcat
Tomcat—>conf—>server.xml(服务器核心配置文件)
server.xml用处:
1.可以配置启动的端口号
Tomcat的默认端口号:8080
MySQL:3306
HTTP:80
https:443
<Connector port="8081" redirectPort="8443" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="utf-8"/>
2.可以配置主机的名称
默认主机名为:localhost->127.0.0.1
默认网站应用存放的位置为:webapps
<Host name="localhost" unpackWARs="true" autoDeploy="true" appBase="webapps">
3、发布一个网站
3.1、猴版
将自己写的网站,放置到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了。
步骤一、准备启动Tomcat
步骤二、打开服务器
步骤三、测试是否打开服务器
步骤四、成功打开服务器
步骤五、进入webapps准备建立猴版网站
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DYxjbgPy-1614861455676)(https://img.imgdb.cn/item/6040d0d8360785be54699746.png)]
步骤六、复制一份项目
步骤七、建立项目
步骤八、删除不必要文件
步骤九、配置文件
步骤十、配置成功
步骤十一、测试新建项目
步骤十二、意外惊喜
步骤十三、关闭服务器
3.2、网站应该有的结构
--webapps:Tomcat服务器的web目录
-zhangtaoStudy:网站的目录名(项目的名称)
- WEB-INF:放置网站程序的
-classes:java程序
-lib:web应用所依赖的jar包
-web.xml
- index.html:默认的首页
- static:其他文件夹
-css
-js
-img
........
4、HTTP
4.1、什么是HTTP
HTTP(超文本传输协议)是一个简单的请求-响应协议,他通常运行在TCP上。
- 文本:html,字符串,、、、
- 超文本:图片,音乐,视频,定位,地图…
- 默认端口:80
- HTTPS默认端口:443
4.2、两个时代
http1.0
HTTP/1.0:客户端可以与服务端连接后,只能获得一个web资源,断开后无法再连接
http2.0
HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源。
4.3、HTTP请求
客户端—>发送请求(request)—>服务器
eg:baidu
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get方法/post方法
Status Code: 200 OK 状态码:200
Remote Address: 36.152.44.95:443
Referrer Policy: strict-origin-when-cross-origin
Accept:text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;
Cache-Control:max-age=0
Connection: keep-alive
1.请求行
- 请求行中的请求方式:GET
- 请求方式:GET,POST(重点),head,delete,put,tract…
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据,不安全。但是比较高效率、
- post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据,安全。但是不高效
2.消息头
Accept 告诉浏览器,它所支持的数据类型
Accept-Encoding 支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language 告诉浏览器,它的语言环境
Cache-Control 缓存控制
Connection 告诉浏览器,请求完成是断开还是保持连接
HOST:主机......
4.4、HTTP响应
服务器—>发送响应(response)—>客户端
baidu 响应
Cache-Control: private 缓存控制
Connection: keep-alive 连接:保持连接
Content-Encoding: gzip 编码
Content-Type: text/html;类型
charset=utf-8
1.响应体
Accept 告诉浏览器,它所支持的数据类型
Accept-Encoding 支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language 告诉浏览器,它的语言环境
Cache-Control 缓存控制
Connection 告诉浏览器,请求完成是断开还是保持连接
HOST:主机......
Refresh:告诉客户端,多久刷新一次
Location:让网页重新定位
2.响应状态码
200:表示响应请求成功
3**:请求重定向(重新到新的位置上)
404:表示网页不存在,找不到资源
5**:服务器代码错误 500 502:网关错误
5、Maven
5.1、为什么需要学习Maven
1.在Javaweb开发中,需要使用大量的jar包,我们手动导入。
2.如何能够让一个东西自动帮我导入和配置这个jar包。
目前用来就是方便导入jar包
3.Maven 的高级之处在于,他会帮你导入这个jar包所依赖的其他jar包
5.2、Maven项目架构管理工具
Maven的核心思想:约定大于配置
有约束,不要去违反。
Maven会规定如何去编写Java代码,必须按照这个规范来。
5.3、maven配置
5.4、maven阿里云镜像
镜像作用:加速我们的下载
国内建议使用阿里云镜像:
<mirror>
<!--This sends everything else to /public -->
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
5.5、本地仓库
https://blog.csdn.net/CDW2328/article/details/90113194
建立一个本地仓库:localRepository
<localRepository>F:\Maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\maven-repo</localRepository>
5.6、在IDEA中创建Maven项目
虚拟路径映射
5.7、pom.xml文件
pom.xml文件是Maven的核心配置文件。
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>
项目打包方式:
-
jar:java 应用
-
war:Javaweb应用
<?xml version="1.0" encoding="UTF-8"?> <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> <groupId>org.example</groupId> <artifactId>MavenDemo1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>MavenDemo1 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> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>MavenDemo1</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>
5.8、Maven配置时候可能遇到的问题:
1.Maven由于约定大于配置,所以我们之后可能遇到我们写的配置文件无法被导出或生效的问题:
解决方案: Maven资源导出配出
2.Tomcat闪退问题
3.IDEA中每次都重复配置Maven
解决方案:在IDEA的全局配置中进行配置,设置中找到Maven进行默认配置
4.Maven项目中Tomcat无法配置
5.9、Maven使用过程中可能遇到的问题:
1、无法导入
(兼容性问题)—unable to import Maven
大概原因:Maven版本问题和JDK的兼容性
目前解决方法:将版本降低一个版本
2、Tomcat闪退问题
jdk以及jre问题
3、IDEA中每次都重复配置Maven
全局配置以及项目配置
在全局配置中,以后就不用再修改
https://blog.csdn.net/weixin_44494373/article/details/108932403?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160925339716780261984035%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160925339716780261984035&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-108932403.pc_search_result_cache&utm_term=IDEA%E4%B8%ADMaven%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E5%9C%A8%E5%93%AA%E9%87%8C
4、Maven项目中Tomcat无法配置
没有artifact文件
https://blog.csdn.net/weixin_44494373/article/details/108932403?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160925339716780261984035%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160925339716780261984035&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-108932403.pc_search_result_cache&utm_term=IDEA%E4%B8%ADMaven%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E5%9C%A8%E5%93%AA%E9%87%8C
个人建议:多刷新几次
5、Maven默认web项目中web.xml版本过老
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
<!--版本过老-->
使用Tomcat的头文件版本:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
个人建议:直接在文件中附加一个note.md在这个笔记里面添加所需要的文件(包括web.xml等等)
6、新建文件夹
- 在src–>main的目录下面新建Java文件夹以及resource文件夹。
- IDEA会自动配置文件夹类型,直接新建即可。
7、Maven仓库的使用
https://mvnrepository.com/
官方的Maven的jar包仓库
eg:搜索Servlet的jar
其中标签代表的是作用域的意思,删除掉。代表在任何地方都可以使用。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!--作用域-->
<scope>test</scope>
</dependency>
</dependencies>
Servlet
Sun在API中提供了一个接口叫做Servlet,如果想要开发一个Servlet程序,只需要完成两个小步骤:
1.编写一个类,实现Servlet接口
2.把开发好的Java类部署到web服务器上
把实现Servlet接口的Java程序叫做Servlet
1、HelloServlet
Servlet接口SUN公司有两个默认的实现类:HttpServlet/GenericServlet
1.1、创建一个普通的Maven项目
删除SRC目录,之后直接建立模块。这个空的工程就是主工程Maven。
在这个Maven的pom.xml中导入依赖
<!-- 导入依赖-->