1 Web开发概述
1.1 web基础
1 Web(互联网总称)
web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。
Java Web,是用Java技术来解决相关web互联网领域的技术总和。
2 Java Web开发中的资源:
- 静态web资源
- HTML
- CSS
- JS
- 动态web资源
- Servlet
- JSP
3 URL 请求路径:
URL (Uniform Resource Locator) ,统一资源定位符是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。
协议://域名:端口号/资源位置?参数=值
* 协议,http、https、ftp等
* 域名,域名或IP地址,都可以访问WEB资源
* 端口号,程序必须使用端口号,才可以让另一个计算机访问。http协议的默认端:80
* 资源位置,用于描述WEB资源在服务器上的位置。
* 参数=值,浏览器和服务器交互传递的数据
例如:
常见路径(访问 京东-笔记本电脑)
https://list.jd.com/list.html?cat=670,671,672
常见路径(访问 京东秒杀-电脑办公)
https://miaosha.jd.com/category.html?cate_id=29
1.2 软件开发的结构分类
CS结构的软件
- CS:Client/Server 客户端和服务器,这种软件往往需要安装。比如QQ、迅雷、播放器。
- 优缺点:
- 优点:
- 可以减轻服务器端压力,将部分代码写到客户端。
- 界面很美观。
- 缺点:
- 一旦服务器更新了,客户端也需要更新。
- 分布式开发比较弱。
- 优点:
BS结构的软件
- BS:Browser/Server 浏览器和服务器,这种软件不需要安装,只需要通过浏览器就可以访问。
- 优缺点:
- 优点:
- 服务器一旦更新,不需要更新客户端,因为客户端就是浏览器
- 比较强的分布式能力
- 缺点:
- 服务器端压力会比较大。
- 界面效果不如CS结构软件。
- 优点:
1.3 web服务器
常见的WEB服务器:
- Tomcat:Apache组织提供的一个开源的免费的web服务器。满足EE的Servlet和JSP的规范。
- WebSphere :IBM公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
- WebLogic:BEA公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
1.4 Tomcat服务器
- Tomcat就是一个web的服务器,用来发布web项目。
- tomcat 目前存在很多版本,希望大家了解tomcat的版本,从而知道自己的创建的项目使用的是几版本规范,不同版 本的规范技术可能不同。这里使用的是JavaEE 7.0,Servlet规范3.1,tomcat至少使用8.5版本。
- 官网地址:http://tomcat.apache.org
Tomcat版本 | Servlet版本 | JavaEE版本 |
---|---|---|
9.0.x | 4.0 | 8.0 |
8.5.x | 3.1 | 8.0 |
8.0.x | 3.1 | 7.0 |
7.0.x | 3.0 | 6.0 |
6.0.x | 2.5 | 5.0 |
注:Tomcat的安装启动,见装机必备
Tomcat的目录结构:
webapps下默认运行的是root目录
2 HTTP协议
2.1 HTTP协议概述
HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。用于定义WEB浏览器与WEB服务器之间交换数据的过程。
Http协议的版本
- HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。
- HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开。
HTTP协议有两种报文格式:
- 请求报文:由客户端向服务器端发出的报文。
- 响应报文:从服务端到客户端的报文。
2.2 Http请求报文详解
HTTP请求报文:由客户端向服务器端发出的报文。
HTTP请求报文格式:包含请求行、请求头、空行、请求体 四个部分
请求行
例如:POST /web01/login.html HTTP/1.1
请求行必须在HTTP请求格式的第一行。
请求行格式:请求方式 资源路径 协议/版本
请求方式:协议规定7种,常用两种:GET和POST
GET请求:
将请求参数追加在URL后面,不安全。例如:login.html?username=tom&password=1234
URL长度限制GET请求方式的数据大小。
没有请求体
POST请求
请求参数显示请求体处,较安全。
请求数据大小没有显示。
只有表单设置为method=”post”才是post请求.其他的都是get请求。
常见GET请求:地址栏直接访问、<a href=””>、<img src=””> 等
请求头
请求头: 描述了客户端向服务器发送请求时使用的http协议类型,所使用的编码,以及发送内容的长度,referer,等等。
请求头也是用的键值对key:value
常见请求头 | 描述 |
---|---|
Referer | 浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链 |
Cookie | 与会话有关技术,用于存放浏览器缓存的cookie信息。 |
User-Agent | 浏览器通知服务器,客户端浏览器与操作系统相关信息 |
请求体
通常情况下,只有post请求方式才会使用到请求体,请求体中都是用户表单提交的数据,每一项数据都使用键值对key=value,多组值使用&相连。
例如;username=tom&password=1234
举个例子:
get抓包数据
POST请求抓包数据:
2.3 Http响应报文详解
响应报文:从服务端到客户端的报文。
HTTP响应报文格式:响应行、响应头、空行、响应体 四个部分
响应行
例如:HTTP/1.1 200 OK
格式:协议/版本 状态码 状态码描述
状态码:服务器与浏览器用于确定状态的固定数字号码
200 :请求成功。
302 :请求重定向。
304 :请求资源没有改变,访问本地缓存。
404 :请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。
500 :服务器内部错误。通常程序抛异常。
响应头
响应头: 用来描述服务器回给客户端浏览器的content的一些描述,例如: 我是什么服务器,我返回的是啥编码,我返回的内容有多长等等
响应头也是用的键值对 key:value
常见请求头 | 描述 |
---|---|
Location | 指定响应的路径,需要与状态码302配合使用,完成跳转。 |
Content-Disposition | 文件下载的时候使用。通过浏览器以下载方式解析正文 |
Set-Cookie | 与会话相关技术。服务器向浏览器写入cookie |
Refresh | 定时刷新 |
响应体
响应体,就是服务器发送给浏览器的正文。
举个例子:
Http响应报文演示
3 Servlet
3.1 Servlet概述
- Servlet(Server Applet)是Java Servlet的简称,称为服务器端小程序,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
- 狭义的Servlet是指Java语言实现的一个接口
- 广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
总结:
* Servlet技术快速入门
* 运行在服务器端的程序,称为Servlet, 必须在服务器中运行 Tomcat
* 等待客户端访问,连接
*
* Servlet技术,客户端交互技术,请求和响应
*
* Sun公司,JavaEE平台上的十三个规范之一
*
* 定义接口: javax.servlet.Servlet
使用Servlet:
- 编写一个Java类实现Servlet的接口
- 在web.xml中,配置Servlet
3.2 Servlet快速入门之小案例
步骤一:创建包和类, 实现servlet的接口
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 定义接口: javax.servlet.Servlet
*
* Servlet技术快速入门:
* 1: 创建类,实现接口Servlet
* 2: 重写抽象方法,5个 (关注一个方法 service )
* 3: 编写核心配置文件
*/
public class HelloServlet implements Servlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet快速入门");
servletResponse.getWriter().write("welcome to ");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
步骤二:在web.xml中配置这个类
<!--配置servlet-->
<servlet>
<!--配置servlet名称-->
<servlet-name>hello</servlet-name>
<!--配置servlet类的全路径-->
<servlet-class>com.he.servlet.HelloServlet</servlet-class>
</servlet>
<!--配置servlet映射关系-->
<servlet-mapping>
<!--配置关联的servlet名称-->
<servlet-name>hello</servlet-name>
<!--配置 访问路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
步骤三:访问servlet
http://localhost:8080/web01/hello
3.3 Servlet的执行原理
Tomcat引擎执行的操作
- 接受并解析客户端浏览器的请求 “/web01/hello”
- 创建2个对象 request, response
- 在webapps找访问的资源 “com.he.servlet.HelloServlet”
- 反射技术创建Servlet实现类的对象
- 调用对象中的方法 service, 传递参数 request, response
- 数据写在了 reponse对象的缓冲区中
- service方法结束后,数据从response对象的缓冲区取出,组装成HTTP的响应信息, 回传给浏览器
3.4 Servlet生命周期
Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。
* Servlet对象的生命周期
* 对象什么时候生,什么时候死
* 什么时候被创建,什么时候被销毁
*
* 1: 对象创建
* Servlet对象什么时候被创建
* 默认: 在客户端第一次访问的时候,对象会被创建
* Servlet中有方法 init(),对象创建的时候,会调用init()方法
* Tomcat引擎调用方法init()传递参数ServletConfig
*
* 在Tomcat启动的时候创建!! web.xml <load-on-startup>整数越小,启动优先级越高</load-on-startup>
*
* 2: 客户端访问
* 客户端每次请求Servlet,都会执行方法service
* 只要有1个请求,就会执行一次
*
* 3: 对象销毁
* Tomcat服务器关闭的时候,销毁对象
* Tomcat引擎调用方法 destroy()
*
* LifeServlet类对象,对象销毁前调用
*
* 将你的web项目,从Tomcat的 webapps中移除
3.5 Servlet的访问路径配置
url-pattern的配置
url-pattern配置方式共有三种:完全匹配、目录匹配、扩展名匹配
web.xml配置:
<!--mapping 映射 ,配置Servlet的映射关系-->
<servlet-mapping>
<servlet-name>config</servlet-name>
<!--
<url-pattern></url-pattern> 浏览器的访问路径 (虚拟路径)
1: 完全匹配方式,绝对匹配 (Servlet的最常用配置)
/路径
2: 目录匹配
/aaa/bbb/* 浏览器必须输入 /aaa/bbb/任意
3: 后缀名匹配
*.qqq 浏览器必须驶入 任意.qqq
注意: 目录匹配和后缀名匹配不能同时使用
-->
<url-pattern>/config</url-pattern>
</servlet-mapping>
注意:目录匹配和后缀名匹配不可以同时使用
3.6 Tomcat引擎的全局web.xml
tomcat目录中/conf/web.xml 是全局配置文件,所有的WEB项目都使用
自己的写web.xml只有你自己的项目使用
当全局配置web.xml和自己的web.xml冲突了,听自己的
4 HttpServlet
4.1 HttpServlet概述
Servlet接口
|
|
GenericServlet类 通用的Servlet,是一个与协议无关的Servlet
|
|
HttpServlet类 Http协议专用的Servlet
HTTPServlet继承自GenericServlet类,GenericServlet实现了Servlet接口
HttpServlet是一个与HTTP协议相关的Servlet,专门用来处理HTTP协议的请求响应。
- 在HttpServlet类的service方法内部,根据HTTP协议请求方式不同,执行不同的doXXX的方法(get请求执行doGet方法,如果是post请求就会执行doPost方法)。
- 继承了父类HttpServlet之后不需要重写service方法,只需要重写doGet和doPost方法即可。(父类中的service()调用回到我们自己定义实现类的方法doGet())
4.2 HttpServlet执行原理
HTTPServlet如何实现调用service方法:
HttpServlet分别重载和重写了service方法,我们实现类重写doGet方法和doPost方法,父类HTTPServlet的service方法会调用我们的doGet和doPost方法
4.3 案例介绍
/**
* IDEA工具创建出的Servlet
* 包含2个方法
* doPost : 处理客户端的POST请求方式
* doGet : 处理客户端的GET请求方式
*
* Servlet接口,是Sun公司标准
* Tomcat引擎调用该接口实现类的方法 service
*
* MyHttpServlet肯定是Servlet接口实现类
* MyHttpServlet继承HttpServlet
* HttpServlet继承GenericServlet
* GenericServlet实现接口Servlet
*
* 结论:
* 客户端请求服务器的时候,Tomcat引擎创建MyHttpServlet对象,调用方法service()
* 来自于父类的继承,而父类中的service()调用回到我们自己的方法doGet()
*
*
* 无论什么请求方式,都用一个方法来处理
*/
public class MyHttpServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用doGet()
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("GET");
}
}
5 注解开发取代web.xml
Servlet版本 | JavaEE版本 |
---|---|
4.0 | 8.0 |
3.1 | 8.0 |
3.1 | 7.0 |
3.0 | 6.0 |
2.5 | 5.0 |
- Servlet 2.5版本时
- Servlet、过滤器(Filter)和监听器(Listener)的声明都必须使用web.xml
- Servlet 3.0版本时
- 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 文件从该版本开始不再是必选的了
@WebServlet, 注解添加到自己定义的Servlet中的类声明上即可, 注解的属性 urlPatterns,属性值就是浏览器的访问地址
//创建servlet,在@WebServlet注解中添加urlPatterns= "/test",作为请求路径
@WebServlet(urlPatterns = "/test")
- 注解servlet模板修改
- doPost方法内, 添加
doGet(request, response);
- 修改注解小括号内容为
(urlPatterns = "/${Entity_Name}")
- doPost方法内, 添加
创建注解Servlet
总结
* Servlet程序的注解开发
* 注解取代配置
* Servlet版本3.0以后,有的注解开发
* 注解 @WebServlet 写在类上
* 注解属性 String[] urlPatterns() default {};
* 数组赋值一个
*
* 原理: Tomcat引擎启动的时候,读取 web.xml
* 并且还会扫描你的所有Servlet接口实现类,获取类上的注解,通过反射建立对象
* 获取注解值 /annotation,浏览器的访问地址