Java Web很重要,Servlet来报道。

一、什么是Servlet?

         Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

二、Servlet有哪些创建方式?

1、实现Servlet接口
            因为是实现 Servlet 接口,所以我们需要实现接口里的方法。

public class HelloServlet implements Servlet{    
		//继承Servlet类并实现该类当中的所有方法
		
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    	  System.out.println("xxxxxxxxx");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
         System.out.println("xxxxxxxxx");
    }

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

    @Override
    public void destroy() {
           System.out.println("xxxxxxxxx");
    }
}

2、继承 GenericServlet 类
            它实现了 Servlet 接口除了 service 的方法,不过这种方法我们极少用。

public class ServletDemo2 extends GenericServlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
            System.out.println("xxxxxxxxx");
    }
}

3、继承 HttpServlet 方法(重点)
            这种方法是我们经常要用的一种方法。

public class ServletDemo3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("xxxxxxxxxxxx");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
         System.out.println("xxxxxxxxxxxx");
        doGet(req,resp);
    }
}

三、Servlet 的生命周期

Servlet 的生命周期可以分为以下几个步骤:

  1. 首先,Servlet通过构造方法进行实例化,且构造方法必须使用无参构造(默认是在第一次被访问的时候构造对象。也可以在web.xml中通过N配置Servlet被创建的时机。(N为一个整数表示优先级,>=0表示在web服务器启动的时候创建,<0表示第一次访问时创建))
  2. Servlet进行初始化之后,会立即调用init()方法;若失败则会报ServletException异常
  3. Servlet 调用 service() 方法来处理客户端的请求。
  4. Servlet 销毁前调用 destroy() 方法。
  5. 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

@WebServlet("/HelloServlet")    //通过@WebServlet注解,设置默认的请求路径为/HelloServlet
public class HelloServlet implements Servlet{

    ServletConfig servletConfig;

    //HelloServlet 实例化
    public  HelloServlet(){
        System.out.println("Servlet 实例化。。。。。");
    }

	//调用init()方法进行初始化
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
        System.out.println("HelloServlet--->init");
        String name = servletConfig.getInitParameter("name");
        System.out.println(name);
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }
    
	//调用service()方法来处理客户端的请求,也是servlet中最主要的方法。
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello first servlet....");
    }

    @Override
    public String getServletInfo() {
        return "版权归张三所有";
    }

	//销毁前调用 destroy() 方法
    @Override
    public void destroy() {
        System.out.println("HelloServlet---->destroy");
    }
}

servlet是单实例多线程的

四、Servlet在xml文件中的配置

1.通过 xml文件创建请求路径

<?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">
         
        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/HelloServlet</url-pattern>
        </servlet-mapping>
</web-app>

servlet通过@WebServlet注解,设置默认的请求路径与通过 xml文件创建请求路径两者只能选其一用,不能共用。

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

接收表单数据

request.getParameter(“xxx”);

返回数据

response.getWriter().write(“xxx”);

六、转发与重定向

转发

request.getRequestDispatcher(“跳转页面”).forward(request,response);

重定向

res.sendRedirect(“跳转页面”);

问题:请求转发跟请求重定向的区别是什么?
1.请求转发:1次请求,地址栏不发生变化,返回200.

2.请求重定向:2次请求,地址栏发生改变,第一次返回302,第二次返回304或200.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、get请求与post请求

HTTP请求报文
在这里插入图片描述
get请求与post的请求的区别是什么?
get:
     1,参数拼接在url,不安全
     2,只能是字符串类型
     3,大小有限制2kb,速度快
post:
     1,参数封装到请求体,安全
     2,还可以是非字符串类型比如文件
     3,理论上大小没限制,速度慢

八、客户端与服务器之间连接的建立和断开

建立连接(3次握手)
在这里插入图片描述
第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。
第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。
第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。

断开连接(4次挥手)
在这里插入图片描述
第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值