小饶学编程之JAVA SE第二部分——Java Web 技术:12网络和Servlet

一、网络基础概念

互联网,英文是internet,又称国际网络。是网络与网络之间-所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一且巨大的全球化网络,在这个网络中有交换机、路由器等网络设备、各种不同的连接链路、种类繁多的服务器和数不尽的计算机、终端。使用互联网可以将信息瞬间发送到千里之外的人手中,它是信息社会的基础。

二、HTTP简介

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

2.1 HTTP请求报文

HTTP 报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。一 般一个HTTP请求报文由请求行、请求报头、空行和请求数据4个部分组成。如下图:

在这里插入图片描述

①请求行由请求方法、URL字段和HTTP协议的版本组成。
②请求报头通知服务器关于客户端请求的信息。
③空行
④请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。

2.2 HTTP响应报文

在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP 的响应报文由状态行、响应报头、空行、响应正文组成。

①状态行:一般由服务器HTTP协议的版本、服务器发回的响应状态码、状态码的文本描述等组成。
②响应报头:用于服务器传递自身信息的响应
③空行
④响应正文就是服务器返回的资源的内容。

三、B/S与C/S应用

B/S:浏览器与服务器应用。体验要求一般,加载资源少;升级方便、无需安装、维护便利、跨平台。比如淘宝页面。

C/S:客户端和服务器应用。体验要求极高,加载资源多;升级不方便、安装不方便、维护不方便、不跨平台。比如英雄联盟游戏

B/S开发模式也叫web开发。

四、连接的建立跟断开

4.1、连接的建立(3次握手)

在这里插入图片描述

过程:
①客户端对服务器说:我想连接你。(请求连接)
②服务器对客户端说:我知道了,可以连接。(同意连接)
③客户端对服务器说:我们连接吧。(确认连接)

三次握手的结果是:客户端和服务器都可以发送消息和接收消息,即可以数据传输。

①第一次握手:
客户端将标志位SYN置1,随机产生一个值seq=x,并将数据包发给服务器。然后客户端进入SYN_SENT状态,等待服务器确认。
②第二次握手:
服务器收到数据包后标志位SYN=1知道客服端请求建立连接,服务器将标志位SYN和ACK都置1,随机产生一个值,并将数据包发给客户端确认连接请求,服务器进入SYN_RCVD状态
③第三次握手:
客户端收到确认后若ACK为1,则将该数据包发送给服务器,服务器检查ACK为1则连接建立成功,客户端与服务器进入ESTABLISHED状态完成三次握手,可以传输数据。

4.2 断开连接(4次挥手)

在这里插入图片描述
过程:
①客户端对服务器说:我想断开。(请求断开)
②服务器对客户端说:我知道了,但是我还没准备好,请等待。(准备断开的工作)
③服务器对客户端说:数据发完了,可以断开。(关闭数据传送)
④客户端对服务器说:那我们断开吧。(确认断开)

客户端等待了2MSL后依然没有收到回复,则证明服务器已正常断开,客户端也断开连接。

四次挥手的结果是:客户端和服务端总共发送4个包确认连接的断开

①第一次挥手:
客户端发送一个FIN,用来关闭客户端到Server的数据传送,客户端进入FIN_WAIT_1状态。
②第二次挥手:
服务器收到FIN后,发送一个ACK给客户端,服务器进入CLOSE_WAIT状态。
③第三次挥手:
服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
④第四次挥手:
客户端收到FIN后,客户端进入TIME_WAIT状态,发送ACK给服务器,服务器收到之后进入CLOSED状态,完成四次握手。

五、服务器软件介绍

Tomcat是目前非常流行的一款开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。它和其它服务器软件类似,能将本地资源向外提供服务
常见Web应用服务器:Tomcat(Apache)、Weblogic( Oracle), WebSphere(IBM)和JBoss( Redhat)。

六、Tomcat下载、安装、及目录介绍

官网下载:http://tomcat.apache.org/ .默认端口号是8080
mysql的默认端口号:3306
安装:解压到任意目录(注意路径不要有中文和空格)

目录介绍:

bin:存放可执行文件
conf:存放配置文件
lib:存放第三方依赖包
logs:存放日志
temp:存放临时文件
webapps:存放应用程序
work:存放运行时的文件

七、Servlet

7.1、在IDEA中配置Tomcat

7.2、web项目的打包方式(war)

web项目的默认打包方式是war
java项目的默认打包方式是jar

7.3、Servlet简介

Servlet介绍和它的生命周期

servlet是运行在服务器上的应用程序。

7.4、Servlet使用步骤

  1. 创建web项目,编写web.xml
 <servlet>
   	<servlet-name>Index</servlet-name>
   	<servlet-class>com.blb.seven.IndexServlet</servlet-class>
   </servlet>

   <servlet-mapping>
   	<servlet-name>Index</servlet-name>
   	<url-pattern>/IndexServlet</url-pattern>
   </servlet-mapping>
  1. 编写Servlet

  2. 运行项目

  3. http://ip:端口号/项目名称/映射地址

7.5、Servlet实例

  • ①实现servlet接口
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


@WebServlet("/HelloServlet")
public class HelloServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

  • ②继承HttpServlet类(实现servlet接口)
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

Servlet是单实例多线程的。
一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。

7.6、Servlet生命周期

在这里插入图片描述

  • 加载跟实例化Servlet

    Servlet 通过调用 构造 方法进行实例化,构造方法必须为无参构造方法。默认是在第一次被访问的时候构造对象。也可以在web.xml中通过N配置Servlet被创建的时机。(N为一个整数表示优先级,>=0表示在web服务器启动的时候创建,<0表示第一次访问时创建)

  • Servlet 实例创建完毕后立马通过调用 init () 方法进行初始化,如果初始化失败抛出ServletException,Servlet对象将会被垃圾回收器回收。init初始化操作只会执行一次。初始化时机紧跟Servlet创建。

  • Servlet 调用 service() 方法来处理客户端的请求。

  • Servlet 通过调用 destroy() 方法终止(结束)。

  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

7.7、Servlet接收表单数据与返回数据

接收表单数据

request.getParameter("xxx");

返回数据

response.getWriter().write("xxx");

7.8、get请求与post请求

问题:get请求与post的请求的区别是什么?

get:
1,参数拼接在url,不安全
2,只能是字符串类型
3,大小有限制2kb,速度快
post:
1,参数封装到请求体,安全
2,还可以是非字符串类型比如文件
3,理论上大小没限制,速度慢

7.9、转发与重定向

7.9.1、转发

req.getRequestDispatcher("xxx").forward(req, res);

一次请求,返回200,地址栏没变化

7.9.2、重定向

res.sendRedirect("xxx");

二次请求,第一返回302,第二次请求会使用第一次请求响应中的Location头信息地址进行访问。第二次请求返回200或者304,地址栏会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值