栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet详细介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet详细介绍

Servlet

    什么是servlet?
    Servlet是java web 开发的基石,与平台无关的服务器组件,它是运行在Servlet 容器/Web 应用服务器/Tomcat ,负责和客户端通信。

    servlet的功能?
    <1> 创建并返回基于客户请求的动态HTML页面
    <2>与数据库进行交互

    如何使用?

package com.lunan.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 {
        String id = servletRequest.getParameter("id");
        System.out.println("servletRequest = " + servletRequest);
        servletResponse.setContentType("text/html;charset=UTF-8");
        servletResponse.getWriter().write("我是服务端"+id);
    }

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

    @Override
    public void destroy() {

    }
}

浏览器不能直接返回servlet 文件,只有通过映射方式间接的访问,映射需要开发者手动来配置,有两种配置方式:

方式一:基于XML 文件配置


    MyServlet
    com.lunan.servlet.MyServlet


    MyServlet
    /myservlet

方式二:基于注解的方式

@WebServlet("/myservlet")
public class MyServlet implements Servlet {
}

以上两种方式完全一致,将MyServlet 和 myservlet进行映射,在浏览器中访问 myservlet 直接可以映射到MyServlet 文件中。

    servlet 生命周期?
    <1> 当浏览器访问servlet的时候,Tomcat 会查询当前Servlet的实例化对象是否存在,如果不存在的话,会通过反射机制动态创建对象,如果存在,直接执行第三步。
    <2> 调用init方法完成初始化操作
    <3> 调用service方法完成业务逻辑操作
    <4> 关闭tomcat时,会调用destroy方法,释放当前对象所占用的资源

    servlet 生命周期方法: 无参构造方法, init ,service, destory
    <1> 无参构造方法只调用一次,创建对象
    <2> init只调用一次,用来初始化对象
    <3> service调用N次,用来执行业务
    <4> destory只调用一次,用来卸载对象

    servletConfig
    该接口用来描述servlet 基本信息的
    <1> getServletName 方法,返回当前servlet对象全路径
    <2> getInitParameter 获取web.xml 文件中初始化参数

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println(servletConfig.getInitParameter("username"));//该值为admin
    }
}

    MyServlet
    com.lunan.servlet.MyServlet
    
        username
        admin
    


    MyServlet
    /myservlet

<3> getInitParameterNames 返回所有InitParameter的name 值,一般用作遍历初始化参数

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        Enumeration enumeration = servletConfig.getInitParameterNames();
        while (enumeration.hasMoreElements()){
            String element = enumeration.nextElement();
System.out.println(servletConfig.getInitParameter(element));
        }
    }
}
 
    MyServlet
    com.lunan.servlet.MyServlet
    
        username
        admin
    
    
        password
        123456
    
    
        realname
        admin
    


    MyServlet
    /myservlet

<4> getServletContext. 返回ServletContext对象,它是Servlet上下文,整个Servlet 的管理者

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        ServletContext servletContext = servletConfig.getServletContext();
        //路径 /lunan001
        System.out.println(servletContext.getContextPath());
        //Apache Tomcat/8.5.77
        System.out.println(servletContext.getServerInfo());
    }

<5> ServletConfig 和 ServletContext的区别

ServletConfig作用于某个Servlet实例,每个Servlet实例都有对应的ServletConfig;而ServletContext作用于整个web 应用,一个web 应用对应一个ServletContext,多个Servlet实例对应一个ServletContext。

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        ServletContext servletContext = servletConfig.getServletContext();
        //admin
        System.out.println(servletContext.getInitParameter("username"));
        //123456
        System.out.println(servletConfig.getInitParameter("username"));
    }
}

    username
    123456


    MyServlet
    com.lunan.servlet.MyServlet
    
        username
        admin
    

    Servlet 层次结构

Servlet => GenericServlet => HttpServlet

GET 获取
POST 保存
PUT 修改
DELETE 删除

GenericServlet 实现了Servlet 方法,同时为它的子类屏蔽了不常用的方法,子类只需要重写service 方法即可。
HttpServlet 继承了GenericServlet,根据请求类型进行分发处理。

开发自定义的Servlet 只需要继承HttpServlet 即可。然后重写 doGet ,doPost 等方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号