Web开发相关

OSI模型

在计算机网络中,存在不同厂商、不同结构的网络产品。这些网络产品在进行互联时会遇到不兼容的问题。

国际标准化组织ISO 提出了 OSI(Open System Interconnection)开放系统互联的参考模型,为异构系统互联提供了概念性的框架。

OSI 网络模型 ,将网络分为七个层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

TCP/IP 协议对 OSI网络模型中的一些层进行了合并,将应用层、表示层、会话层,合并为应用层。传输层不变。网络层变成了网络互联层,数据链路层和物理层合并为网络接口层。

端口,就是应用程序用于数据交互的通道,用于实现程序间的通信。每个应用程序都有固定的端口。

注意 :两个应用程序如果使用同一个端口,那么会抛出端口异常冲突java.net.BindException。

常见端口:

tel 协议 --- 23

smtp 协议 --- 25

ftp 协议 --- 21

http 协议 --- 80

数据传输由 TCP/IP 分层模型中的传输层负责,该层包含 TCP 和 UDP 两种协议。

TCP 协议是一种比较可靠的传输协议,提供三次握手机制。信息在传输过程中,有遗失,有损耗,会要求发送方重新发送,从而保证信息的完整性。

UDP 协议是一种不可靠的传输协议,信息在传输过程中,有遗失,有损耗,不会要求发送方重新发送。特点是速度快。

html

超文本标记语言。超文本的意思是在html中不仅仅包含文本数据,而且可以通过一系列标记,链接各式各样的资源(图片、音频、视频、css、js等)。客户端在显示html网页,不仅仅需要下载文本数据,还需要发出一系列请求,将该网页链接资源一一下载。

http协议

HTTP 协议称为超文本传输协议,是客户端与服务器通信的一种标准。客户端和服务器都遵循HTTP 协议,就能从彼此发送的信息中提取自己想要的数据。

http协议的特点:

1、http协议遵循的是请求/响应模型

2、http协议是一种无状态的协议

当请求/响应完成以后,客户端和服务器的连接会断开。所以,服务器无法知道两次请求的用户是否为同一个用户。

3、http协议占用 80 端口

http协议的工作流程:

1、客户端和服务器建立连接

2、客户端发送 http 请求

3、服务器产生 http 响应

4、关闭连接

http协议的请求信息

http协议的请求信息分为:请求行、请求头、空行、消息体。

请求行:描述请求方式,请求URL路径、http协议版本

请求头:以键值对方式描述客户端相关的信息

空行:标识请求头的结束

消息体:(POST)描述客户端请求的表单数据

http协议请求方式有8种:

GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT

其中 GET、POST 是最常用的两种。

GET请求:1、浏览器输入URL路径为GET请求

2、用户点击超链接为GET请求

3、用户提交表单,默认为GET请求,method属性为GET时,也就是GET请求

POST请求:<form method="post" action="/land">

GET和POST的区别

1、流格式的区别

GET请求,只有请求行,请求头,空行。会将表单数据附加在URL后面。

POST请求,有请求行、请求头、空行、消息体。在消息体中附加表单数据。

2、传输性能的区别

GET 请求,不能传输大数据,只能传输小文本数据。

POST 请求,可以传输大数据,同时可以传输文本数据,以及二进制数据。数据的传输相对安全。

3、用户的区别

GET 请求用于服务器的资源查找。POST请求用于数据的传输。

http协议的响应信息

http协议的响应信息分为四个部分:状态行、响应头、空行、消息体。

状态行:描述http协议的版本、状态码、响应描述。

响应头:以键值对方式描述服务器相关的信息。

空行:标识响应头的结束。

消息体:服务器发送给客户端的具体数据。

http协议的状态码有五种

100 - 199 表示客户端请求服务器在进行中。

200 - 299 表示客户端请求成功

300 - 399 表示资源移走,请求新的地址

400 - 499 表示客户端引发的错误

500 - 599 表示服务器端引发的错误

MIME 类型

MIME 类型用于服务器端发送数据给客户端时,告诉客户端浏览器以什么格式来解析响应信息体内容。

常见的 MIME 类型:

text/html:html网页数据

image/jpeg:JPG 图片数据

application/json:json 格式数据

text/xml:xml格式数据

传统 的web服务器的缺陷

传统的web服务器在接收到客户端请求后,只能将静态的html信息发送给客户端,极大的影响了响应信息的灵活性。

解决方案是,在传统的web服务器接受到客户端请求后,交由辅助应用进行处理。辅助应用可以利用数据库作为存储介质,将请求信息进行处理后,动态的产生响应信息。

java 利用 web 容器 + Servlet 方式作为辅助应用解决方案的。

WEB容器

在java中, web容器完成底层操作。预留 Servlet 接口,交给开发者书写业务操作。WEB 容器调用 servlet 业务方法,动态产生响应信息。

WEB容器的作用

1、通讯支持

WEB 容器,需要将请求信息和响应信息封装成请求对象和响应对象,以便更好的接受和发送数据。

2、Servlet生命周期管理

Servlet是web容器预留给开发者的接口。开发者实现了 Servlet 接口后,可以书写相关的业务处理操作。Servlet实现类对象的产生、销毁、方法调用,全部由 web 容器管理。

3、线程支持

由于服务器需要接受多个客户端的同时访问,那么web容器采用多线程来进行多任务处理。线程的创建、运行、启动、同步等,都由web容器管理。

4、JSP 支持

主要由 web 容器编写 jsp 引擎对 jsp 页面进行翻译。

5、处理安全性

tomcat

tomcat 源自于 apache 软件基金会 jakkarta 项目。tomcat 是一款免费的、开源的、性能稳定、技术成熟的WEB容器产品

在maven 工程中,导入tomcat

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.36</version>
</dependency>

Servlet 的API 结构

在Servlet 规范中,Servlet 是业务接口,预留 service 方法,交给开发者书写业务操作。ServletConfig为配置接口。GenericServlet 同时实现了Servlet、ServletConfig 两个接口,并重写了大部分方法,但是没有实现service()。该方法应该由GenericServlet 的子类,根据协议的特点分别实现。HttpServlet 继承了 GenericServlet,根据Http 协议的特点,重写了service(),根据不同的请求方式调用doXX();

创建Servlet

public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req,
 HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

​    @Override
​    protected void doPost(HttpServletRequest req,
 HttpServletResponse resp) throws ServletException, IOException {
​        //设置请求信息编码集,只对POST有效
​        req.setCharacterEncoding("utf-8");
​        //设置响应信息的MIME类型和编码集
​        resp.setContentType("text/html;charset=utf-8");
​        //根据表单名,得到表单值
​        String userName = req.getParameter("userName");

​        //向客户端输出文本信息
​        resp.getWriter().print("hello." + userName);
​    }

创建并启动tomcat,并注册Servlet

public class Main {
    public Main(){
        Tomcat tomcat = new Tomcat();
        //设置tomcat端口
        tomcat.setPort(8088);
        //引导http引擎
        tomcat.getConnector();

​        //定义上下文
​        Context context = tomcat.addContext("",null);
​        //注册servlet,第一个参数为上下文对象,
        //            第二个参数为servlet的名称,
        //            第三个参数为servlet实现类对象
​        Wrapper wp = Tomcat.addServlet(context,"test",new TestServlet());
​        //容器一启动就初始化
​        wp.setLoadOnStartup(1);
​        //配置servlet的访问路径
​        wp.addMapping("/abc");

​        try {
​            //启动tomcat
​            tomcat.start();
​        } catch (LifecycleException e) {
​            e.printStackTrace();
​        }
​    }

​    public static void main(String[] args) {
​        new Main();
​    }
}

servlet 映射路径有三种:

精确映射:/add 表示客户端以/add路径请求,就能找到对应的servlet

扩展映射:*.do 表示客户端以.do结尾的请求都能找到servlet

路径映射:/abc/* 表示客户端以/abc/路径的请求,都能找到对应的servlet

得到表单数据

//根据表单名,得到表单值

String value = req.getParameter(“表单名”)

//得到多个同名键值对的值,返回数组

String[ ] value = req.getParameterValues(“表单名”)

//得到表单数据中的表单名枚举

Enumeration<String> em = req.getParameterNames();

Servlet 的生命周期

1、容器加载并实例化 Servlet;

2、调用init(),完成初始化。loadOnStartup为0或者正数,表示容器一启动就初始化。如果为负数或不写,表示第一次访问容器再做初始化。

3、当请求到达,调用service()方法,处理请求,产生响应

4、销毁阶段,调用destoy()完成清理。

在整个生命周期中,1、2、4都只做一次。只有3步,才是每次请求都会执行。而servlet对象也是单实例多线程的对象。

web容器向客户端发送数据

有两种方式

1、向客户端发送文本数据

response.getWriter().print("hello");

2、向客户端发送二进制数据

OutputStream out = response.getOutputStream();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值