美文网首页
Servlet笔记

Servlet笔记

作者: Zig_Zag | 来源:发表于2020-05-27 17:50 被阅读0次

    什么是Servlet?

    Servlet 是 Java web 开发的基石,是与平台无关的服务器组件,它是运行在 Servlet 容器/web 应用服务器(Tomcat是其中一种具体的实现形式),负责与客户端进行通信。

    Servlet 的功能

    1. 创建并返回基于客户请求的动态HTML页面(客服发送请求到 Servlet , Servlet 按照请求结果给出特定的 HTML 界面,比如正确的界面或者有错误的界面,同时可以更新界面上的数据等)。
    2. 与数据库进行通信。

    如何使用 Servlet ?

    Servlet 本身是 javax 包提供的一组接口,自定义一个类,让这个类实现 Servlet 接口,这个类就具备了接收客户端请求及作出响应的功能。

    Step 1:

    编写一个类,实现 javax.servlet.Servlet 接口(如果没有这个类,需要把 Tomcat library 引入,有 jsp-api。jar 和 servlet-api.jar 两个 jar 包),然后复写五个方法。主要业务代码是写在 servlet() 方法中。

    package com.xn.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;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            //最核心方法,业务逻辑写在这里
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    Step 2:

    网页中输入主机号(默认是localhost)端口号加资源地址按理说是可以访问到 Servlet 类的,但是由于浏览器权限等限制,这个是不允许的,浏览器只能访问到 web 包下的根目录的那些 .jsp 文件,想访问到 src 包下的 Servlet 实现类,需要在通过映射的方式间接访问,同时映射需要开发者手动配置,有两种配置方式:

    1. 基于web/WEB-INF/web.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>MyServlet</servlet-name>
            <servlet-class>com.xn.servlet.MyServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/myservlet</url-pattern>
        </servlet-mapping>
    
    </web-app>
    

    其中映射是靠 servlet-name 实现,servlet-class 是需要映射的 Servlet 实现类的相对路径,url-pattern 是在访问时,跟在端口号后面的资源访问路径。

    1. 基于注解的方式(推荐)
      直接在 Servlet 类上加上@WebServlet注解,同时将 url 补充,最终效果与方法1完全一样。
    ~~~
    @WebServlet("/myservlet")
    public class MyServlet implements Servlet {
    
    }
    ~~~
    

    有了以上的映射,那在启动 tomcat 以后,在浏览器里键入
    http://localhost:端口号/myservlet
    就可以访问到Servlet 实现类了(此时浏览器界面是空白的但是不会报错),如果在 service 方法中有其他操作,此时就会执行。
    之所以是空白界面,是因为以上操作,servlet 只是接收到了请求,但是没有做出响应。简单实现一个响应:

    浏览器输入:
    http://localhost:端口号/myservlet?id=10086

    ~~~
    @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            //最核心方法,业务逻辑写在这里
            System.out.println("接收到客服端的请求");
            String id = servletRequest.getParameter("id");
            servletResponse.setContentType("text/html;charset=UTF-8");
            servletResponse.getWriter().write("客户端已接收到 id 为 " + id + "的请求");
        }
    ~~~
    

    此时重新启动,键入上面的地址,此时界面上会显示出
    客户端已接收到 id 为 10086的请求
    的中文文字信息。

    Servlet 的生命周期

    1. 当浏览器访问 Servlet 的时候,Tomcat 会查询当前 Servlet 的实例化是否存在,如果不存在,则通过反射机制动态创建对象,如果存在,直接执行第3步。
    2. 调用 init 方法完成初始化操作(生命周期中只会调用一次,浏览器刷新的时候,不走这个方法)
    3. 调用 service 方法完成业务逻辑操作。
    4. 关闭 Tomcat 时,会调用 destroy 方法,释放当前对象所占用的资源。

    Servlet 的生命周期方法:无参构造方法、inti、service、destroy

    1. 无参构造方法只调用一次,创建对象。
    2. inti只调用一次,初始化对象。
    3. service 调用 N 次,执行业务方法。
    4. destroy 只调用一次,卸载对象。

    相关文章

      网友评论

          本文标题:Servlet笔记

          本文链接:https://www.haomeiwen.com/subject/xxmvahtx.html