【Servlet】Javaweb中Tomcat基础之一

185 阅读3分钟

Servlet

1、Servlet是什么?

Servlet是与平台无关的服务器组件,绝大多情况下用来拓展基于HTTP协议的web服务器,它运行在Web服务器(也就是tomcat),负责与服务端进行通信。

2、Servlet的功能

主要的功能在于交互式浏览和修改数据,生产动态Web内容,简单说两点主要功能-创建并返回基于客户请求的动态HTML页面-与数据库进行通信。

3、Servlet的使用

Servlet本身是一组接口,自定义一个类,并且Servlet接口,这个类就具备了接受客户端请求以及做出相应的功能。

package com.code.servlet;

import javax.servlet.*;
import java.io.IOException;

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
             //用于初始化                   
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;//获取Servlet对象
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //进行服务与客户端通信
    }
    @Override
    public String getServletInfo() {
        return null;//返回一些Servlet信息
    }
    @Override
    public void destroy() {
        //卸载对象
    }
}
复制代码

写完之后还无法执行,浏览器不能直接访问Servlet文件,只能通过映射的方式来间接的访问Servlet,所以需要我们进行配置,主要有两种配置方式

  • 基于xml文件的配置方式,在WEB-INF文件夹中找到web.xml文件进行配置,将demo1与MyServlet进行映射,即在浏览器地址栏中直接访问demo就可以映射到MyServlet
 <servlet>
        <servlet-name>hello</servlet-name> //可以随意起个名字
        <servlet-class>com.code.servlet.MyServlet</servlet-class>
    </servlet> //需要填充路径
    
    <servlet-mapping>// 映射
        <servlet-name>hello</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
复制代码

1.png

@Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("我是Servlet,我已经接收到客户端请求");
        servletResponse.setContentType("text/html;charset=UTF-8");
        servletResponse.getWriter().write("客户端你好,我已接收到你的请求");
    }
复制代码

在MyServlet中的service添加代码演示。之后使用tomcat使用运行MyServlet即可。

QQ截图20230708141909.png首先我们会得到index.jsp里面的内容然后通过/demo即可跳转

3.png

  • 也可以使用注解的方式
@WebServlet("/demo1")
public class MyServlet implements Servlet {
  }
复制代码

得出的结果和xml配置时完全一致的

4、Servlet的生命周期

  • 当浏览器访问Servlet时,Tomcat会查询当前Servlet的实例化对象是否存在,如果不存在则通过反射机制动态创建对象->通过init方法对对象完成初始化操作->调用service方法完成有任务逻辑操作->最后关闭Tomcat时,会调用destory方法,释放当前对象所占用的资源。
  • 如果浏览器中存在Servlet的实例对象则直接执行service完成业务逻辑操作最后关闭
  • Servlet的生命周期创建对象使用的是无参构造函数(只会调用一次),初始化inti(只会调用一次),service服务(可以调用多次),destory(在关闭时调用一次)

5、从Servler->GenericServlet->HttpServlet

代码变得更为简单化,我们定义的Servlet类只需继承HttpServlet即可,重写doGet和doPost

package com.code.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("/test")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("get");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("post");
    }
}
复制代码

HTTP请求常用的四种类型(类似增删改查)

  • Get 读取
  • Post 保存
  • Put 修改
  • Delete 删除

GenericServlet实现Servlet接口,同时为他的子类屏蔽了不常用的方法,子类只需要重写service方法即可。

HttpServlet继承GenericServlet,根据请求类型进行分发处理,Get进入doGet方法,Post进入doPost方法。

总的来说即Servlet接口中的service方法中包括doGet,doPost,GenericServlet中包含了init,service,destory方法,HttpServlet继承时可以直接根据类型选择执行doGet,doPost,Put,Delete方法等。

第一次写博客,希望看到有错误的地方或有不同见解能指出