Servlet是什么

什么是servlet?

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

 Servlet的功能:

        1.创建并返回基于客户端请求的动态HTML页面。

        2.与数据库进行通信。

 如何使用Servlet?

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

public class MyServlet implements Servlet {
    //做一些初始化操作
    @Override
    public void init(ServletConfig config) throws ServletException {

    }

    //用来获取一些Servlet的一些信息
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    //操作
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        String id = req.getParameter("id");//接收前端传来的参数
        System.out.println("我是Servlet,我已经接收到客户端发来的请求,参数是:" + id);
//        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html;charset=UTF-8");//处理返回给前端数据乱码的问题
        res.getWriter().write("客户端你好,我已接收到你的请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }
    //销毁
    @Override
    public void destroy() {

    }
}

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

    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>MyServlet</servlet-name>
        <servlet-class>com.atxu.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
</web-app>

 2.基于注解的方式配置

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

Servlet的生命周期

        1.当浏览器访问Servlet的时候,Tomcat会查询当前Servlet的实例对象是否存在,如果不存在,则通过反射机制动态创建对象,如果出存在,直接执行第3步。

        2.调用init方法完成初始化操作。

        3.调用Service完成业务逻辑操作

        4.关闭Tomcat时,会调用destory方法,释放当前对象所占用的资源。

Servlet的生命周期方法:无参构造函数、init、service、destory

        1.无参构造函数只调用一次,创建对象

        2.init 只调用一次,初始化对象。

        3.service 调用N次,执行业务方法。

        4.destory 值调用一次,卸载对象。

ServletConfig

        该接口是用来描述Servlet的基本信息的。

        getServletName() 返回Servlet的名称,全类名(带着包名的类名)

        getInitParameter(String key) 获取init参数的值(web.xml)

    getInitParameterNames() 返回所有的initParameter的name值,一般用作遍历初始化参数      

    getServletContext() 返回ServletContext对象,它是Servlet的上下文,整个Servlet的管理者

        ServletConfig 和 ServletContext的区别:

                ServletConfig作用于某个Servlet实例,每个Servlet都有对应的ServletConfig,

ServletContext作用于整个Web应用,一个Web应用对应一个ServletContext,多个Servlet实例对应一个ServletContext。

                config是局部对象,context是全局对象

Servlet的层次结构(Servlet是一组接口)

        Servlet----->  GenericServlet------->  HtppServlet

Http请求有很多种,常用的有四种: GET(读取)  POST(保存)  PUT(修改)  DELETE (删除)

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

        HttpServlet继承GenericServlet,根据请求类型进行分发处理,GET进入doGET方法,POST进入doPOST方法。

        开发者自定义的Servlet类只需要继承HttpServlet即可,重新doGET和doPOST。

package com.atxu.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("/demo2")
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");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_55371011

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

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

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

打赏作者

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

抵扣说明:

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

余额充值