JavaWeb
基本概念
前言
web开发:
- web,网页的意思,www.baidu.com
- 静态web
- html,css
- 提供给所有人看的数据始终不会发生变化!
- 动态web
- 淘宝,几乎是所有的网站;
- 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同!
- 技术栈:Servlet/JSP,ASP,PHP;
在Java中,动态web资源开发的技术统称为JavaWeb;
C/S架构的概念
C/S架构(Client/Server,客户端/服务器模式),是一种比较早的软件体系结构,也是生活中很常见的结构。这种结构将需要处理的业务合理地分配到客户端和服务器端,客户端通常负责完成与用户的交互任务,服务器通常负责数据的管理。
C/S架构的主要优点如下:
客户端的界面和功能可以很丰富。
应用服务器的负荷较轻。
响应速度较快。
C/S架构的主要缺点如下:
适用面窄,用户群固定。
维护和升级的成本高,所有的客户端都需要更新版本。
B/S架构的概念
B/S架构(Browser/Server,浏览器/服务器模式),是互联网兴起后的软件体系结构,该结构将系统功能实现的主要业务逻辑集中到服务器端,极少数业务逻辑在浏览器实现,浏览器通常负责完成与用户的交互任务,服务器通常负责数据的管理。
B/S架构的主要优点如下:
无需安装客户端,只要有浏览器即可。
适用面广,用户群不固定。
通过权限控制实现多客户访问的目的,交互性较强。
维护和升级的成本低,无需更新所有客户端版本。
B/S架构的主要缺点如下:
应用服务器的负荷较重。
浏览器的界面和功能想要达到客户端的丰富程度需要花费大量的成本。
在跨浏览器上不尽如人意,适配比较麻烦。
web应用程序
web应用程序:可以提供浏览器访问的程序;
- a.html、b.html……多个web资源,这些web资源可以被外界访问,对外界提供服务;
- 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
- URL
- 这个统一的web资源会被放在同一个文件夹下,web应用程序–>Tomcat:服务器
- 一个web应用由多部分组成 (静态web,动态web)
- html,css,js
- jsp,servlet
- Java程序
- jar包
- 配置文件 (Properties)
web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理;
静态web
- *.htm, *.html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。通络;
- 静态web存在的缺点
- Web页面无法动态更新,所有用户看到都是同一个页面
- 轮播图,点击特效:伪动态
- JavaScript [实际开发中,它用的最多]
- VBScript
- 它无法和数据库交互(数据无法持久化,用户无法交互)
- Web页面无法动态更新,所有用户看到都是同一个页面
动态web
页面会动态展示: “Web的页面展示的效果因人而异”;
缺点:
加入服务器的动态web资源出现了错误,我们需要重新编写我们的
- 后台程序
- 重新发布
- 停机维护
优点:
- Web页面可以动态更新,所有用户看到都不是同一个页面
- 它可以与数据库交互 (数据持久化:注册,商品信息,用户信息……..)
web服务器
ASP:
微软:国内最早流行的就是ASP;
在HTML中嵌入了VB的脚本, ASP + COM;
在ASP开发中,基本一个页面都有几千行的业务代码,页面极其乱;
维护成本高!
C#
IIS
1
2
3
4
5
6
7
8
9
10
11
12
13<h1>
<h1><h1>
<h1>
<h1>
<h1>
<h1>
<%
System.out.println("hello")
%>
<h1>
<h1>
<h1><h1>
<h1>
php:
- PHP开发速度很快,功能很强大,跨平台,代码很简单 (70% , WP)
- 无法承载大访问量的情况(局限性)
**JSP/Servlet : **
B/S:浏览和服务器
C/S: 客户端和服务器
- sun公司主推的B/S架构
- 基于Java语言的 (所有的大公司,或者一些开源的组件,都是用Java写的)
- 可以承载三高问题带来的影响
- 语法像ASP , ASP–>JSP , 加强市场强度
Web Server
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息
IIS
微软的; ASP…,Windows中自带的
Tomcat
面向百度编程
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个Java初学web的人来说,它是最佳的选择
Tomcat 实际上运行JSP 页面和Servlet。
HTTP协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是由W3C(万维网联盟)组织制定的一种应用层协议,是用来规范浏览器与Web服务器之间如何通讯的数据格式,主要涉及浏览器的发请求格式和服务器的响应格式。
HTTP协议通常承载于TCP协议之上,而承载于TLS或SSL协议层之上的协议就是常说的HTTPS协议。
HTTP默认的端口号为80,HTTPS默认的端口号为443。
两个时代
- http1.0
- HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
- http2.0
- HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源。
HTTP请求格式
客户端发送一个HTTP请求到服务器的请求消息主要包括:请求行、请求头、空白行和请求体。
HTTP响应格式
通常情况下服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息,主要包括:响应行、响应头、空白行和响应体。
- 客户端—发请求(Request)—服务器
百度:
1 | Request URL:https://www.baidu.com/ 请求地址 |
请求行
请求行中的请求方式:GET
请求方式:
Get,Post,HEAD,DELETE,PUT,TRACT…
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效
- post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
消息头
1 | Accept:告诉浏览器,它所支持的数据类型 |
Http响应
- 服务器—响应—–客户端
百度:
1 | Cache-Control:private 缓存控制 |
响应体
1 | Accept:告诉浏览器,它所支持的数据类型 |
响应状态码
200:请求响应成功 200
3xx:请求重定向
- 重定向:你重新到我给你新位置去;
4xx:找不到资源 404
- 资源不存在;
5xx:服务器代码错误 500 502:网关错误
tomcat
安装tomcat
tomcat官网:http://tomcat.apache.org/
Tomcat启动和配置
bin: 主要存放二进制可执行文件和脚本。
conf: 主要存放各种配置文件。
lib: 主要用来存放Tomcat运行需要加载的jar包。
logs: 主要存放Tomcat在运行过程中产生的日志文件。
temp: 主要存放Tomcat在运行过程中产生的临时文件。
webapps: 主要存放应用程序,当Tomcat启动时会去加载该目录下的应用程序。
work: 主要存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
启动-关闭Tomcat
startup.bat: 启动
shutdown.bat: 关闭
可能遇到的问题:
- Java环境变量没有配置
- 闪退问题:需要配置兼容性
- 乱码问题:配置文件中设置
启动信息乱码的处理方式
apache-tomcat-8.5.68\conf下
logging.properties文件修改为
java.util.logging.ConsoleHandler.encoding = GBK
在IDEA中使用tomcat
1.添加新配置
- 添加Tomact Server
- 选择 tomcat 路径
- 添加 Artifact
- 添加 :war exploded
- 启动
maven
我为什么要学习这个技术?
在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
如何能够让一个东西自动帮我导入和配置这个jar包。
由此,Maven诞生了!
Maven项目架构管理工具
我们目前用来就是方便导入jar包的!
Maven的核心思想:约定大于配置
- 有约束,不要去违反。
Maven会规定好你该如何去编写我们的Java代码,必须要按照这个规范来;
Maven的作用
依赖管理
- 依赖指的就是是 我们项目中需要使用的第三方Jar包, 一个大一点的工程往往需要几十上百个 Jar包,按照我们之前的方式,每使用一种Jar,就需要导入到工程中,还要解决各种Jar冲突的问题.
- Maven可以对Jar包进行统一的管理,包括快速引入Jar包,以及对使用的 Jar包进行统一的版本控制
一键构建项目
- 之前我们创建项目,需要确定项目的目录结构,比如 src 存放Java源码, resources 存放配置文件,还要配置环境比如JDK的版本等等,如果有多个项目 那么就需要每次自己搞一套配置,十分麻烦
- Maven为我们提供了一个标准化的Java项目结构,我们可以通过Maven快速创建一个标准的 Java项目.
下载安装Maven
下载完成后,解压即可;
解压后目录结构:
bin:存放了 maven 的命令
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
配置环境变量
在我们的系统环境变量中
配置如下配置:
- MAVEN_HOME maven的目录
- 在系统的path中配置 %MAVEN_HOME%\bin
Maven 软件版本测试
打开命令行,输入 mvn –v命令,看到版本号,即为执行成功
Maven中的仓库是用来存放maven构建的项目和各种依赖的(Jar包)
本地仓库: 位于自己计算机中的仓库, 用来存储从远程仓库或中央仓库下载的插件和 jar 包,
远程仓库: 需要联网才可以使用的仓库,阿里提供了一个免费的maven 远程仓库。
中央仓库: 在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含 了世界上大部分流行的开源项目构件
Maven 本地仓库的配置
maven仓库默认是在 C盘 .m2 目录下,如果怕C盘满,可以在设置中配置
在maven安装目录中,进入 conf文件夹, 可以看到一个 settings.xml 文件中, 我们在这个文件中, 进行 本地仓库的配置打开 settings.xml文件,进行如下配置:
Maven 本地仓库的配置 打开 settings.xml找到 localRepository 标签,下面的内容复制到其中即可
1 | <localRepository>D:\Environment\apache-maven-3.6.2\maven-repo</localRepository> |
配置阿里云远程仓库 打开 settings.xml,找到
1 | <mirror> |
在IDEA中使用Maven
- 打开IDEA,新建项目
- 选择Jakarta EE ,Web appLication,下一步
- 选择Java EE 8,勾选 Web Profile,创建项目
- 项目创建完成,目录如下
- IDEA中的Maven设置,仓库位置,更改路径
pom核心配置文件
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的信息、项目依赖、引入插 件等等。
创建一个Servlet, 缺少jar包报错, 要解决问题,就是要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet的坐标,从而导入它的 jar
pom.xml 文件中引入依赖包的坐标
1 | <!--引入Servlet依赖--> |
使用插件,可以由插件启动tomcat
1 | <build> |
Maven的常用命令
命令 | 说明 |
---|---|
mvn compile | 完成编译操作,执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件 |
mvn clean | 执行完毕后,会将target目录删除 |
mvn clean | 执行完毕后,会在target目录中生成三个文件夹: surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件) |
mvn package | 完成打包操作,执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war |
mvn install | 执行mvn install命令,完成将打好的jar包安装到本地仓库的操作,执行完毕后 会在本地仓库中出现安装后的jar包,方便其他工程引用 |
Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。
Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态Web内容。
Servlet的编程步骤
- 建立一个Java Web Application项目并配置Tomcat服务器。
- 自定义类实现Servlet接口或继承 HttpServlet类(推荐) 并重写service方法。
- 将自定义类的信息配置到 web.xml文件并启动项目,配置方式如下
1 | //@WebServlet("/hello1") web.xml中不配置 使用注解 |
src.main.webapp.WEB-INF 下的 web.xml 中添加
1 | <!-- 配置Servlet --> |
在浏览器上访问的方式为:http://localhost:8080/工程路径/url-pattern的内容
Servlet接口
基本概念
- javax.servlet.Servlet接口用于定义所有servlet必须实现的方法。
常用的方法
方法介绍
void init(ServletConfig config) 由servlet容器调用,以向servlet指示servlet正在被放入服务中
void service(ServletRequest req,ServletResponse res) 由servlet容器调用,以允许servlet响应请求
ServletConfig getServletConfig() 返回ServletConfig对象,该对象包含此servlet的初始化和启动参数
String getServletInfo() 返回有关servlet的信息,如作者、版本和版权
void destroy() 由servlet容器调用,以向servlet指示该servlet正在退出服务
Servlet的生命周期
构造方法只被调用一次,当第一次请求Servlet时调用构造方法来创建Servlet的实例。
init方法只被调用一次,当创建好Servlet实例后立即调用该方法实现Servlet的初始化。
service方法被多次调用,每当有请求时都会调用service方法来用于请求的响应。
destroy方法只被调用一次,当该Servlet实例所在的Web应用被卸载前调用该方法来释放当前占用的资源。
GenericServlet类
基本概念
javax.servlet.GenericServlet类主要用于定义一个通用的、与协议无关的servlet,该类实现了Servlet接口。
若编写通用servlet,只需重写service抽象方法即可。
常用的方法
方法声明 | 功能介绍 |
---|---|
abstract void service(ServletRequest req,ServletResponse res) | 由servlet容器调用允许servlet响应请求 |
HttpServlet类
基本概念
javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet类。
用于创建适用于网站的HTTP Servlet,该类的子类必须至少重写一个方法。
常用的方法
void doGet(HttpServletRequest req,HttpServletResponse resp) 处理客户端的GET请求
void doPost(HttpServletRequest req,HttpServletResponse resp) 处理客户端的POST请求
void init() 进行初始化操作
void service(HttpServletRequest req,HttpServletResponse resp) 根据请求决定调用doGet还是doPost方法
void destroy() 删除实例时释放资源
GET请求
发出GET请求的主要方式:
(1)在浏览器输入URL按回车
(2)点击超链接
(3)点击submit按钮,提交