JavaWeb学习笔记:Servlet

一、Servlet 介绍

        Servlet是一个接口,定义了Java类被浏览器访问的规则,我们可以自己定义类实现Servlet接口,重写方法达到处理请求的需求。

二、Servlet 的使用

1、Servlet 的实现

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() {

    }
}

2、配置Servlet

使用 Servlet 必须要在 web.xml 文件里进行配置,给 Servlet 绑定相应的 url

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>web.servlet.myServlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

3、注解配置

//@WebServlet(name = "MyServlet", urlPatterns = "MyServlet")
//value 和 urlPatterns 的作用一样,但不能同时出现
//@WebServlet(urlPatterns = "MyServlet")//省略了name
@WebServlet("/MyServlet")//默认value
public class MyServlet implements Servlet {}
  • 一个 Servlet 可以定义多个访问路径:@WebServlet({"/AServlet","/BServlet","/CServlet"})
  • 支持多层路径:@WebServlet("/demo/MyStar")
  • 使用通配(任何目录):@WebServlet("/*")
  • 使用通配(带后缀):@WebServlet("*.do")

三、Servlet 的工作原理

  1. 当服务器接收到 Servlet 请求后,会解析它的 url 地址

  2. 到 web.xml 文件,匹配对应的<url-pattern>

  3. 如果<url-pattern>匹配成功后,通过name找到全类名

  4. Tomcat 将字节码文件加载进内存,并创建其对象

  5. 调用该方法

四、Servlet 的生命周期

1、被创建:执行 init 方法,只执行一次

  • 默认情况下,第一次被访问时,Servlet 会被创建

  • 因为init只执行一次,所以Servlet对象只有一个,是共享资源,所以是线程不安全的,尽量不要在Servlet中定义成员变量,即使定义了也不要对值进行修改

  • Servlet 创建时机可以在配置中用<load-on-startup>(负数第一次访问才创建,0或正数服务器启动就会创建)标签进行修改

2、提供服务:执行 server 方法,可以执行多次

  • 每次访问 Servlet 时,Servlet 方法都会被调用一次

3、被销毁:执行 destory 方法,只执行一次

  • Servlet 销毁时执行,只有服务器正常关闭时,才会执行 destory 方法

五、Servlet 应用

在实际开发中,我们一般不会直接去实现 Servlet 接口中的方法,而是选择继承Servlet 接口的抽象子类 GenericServlet 类或者 GenericServlet 的抽象子类 HttpServlet 类,实现 service() 方法的。

1、GenericServlet 类

        GenericServlet 类 将 Servlet 中除 service() 以外的方法都做了空实现,继承 GenericServlet 类只需要实现 service() 方法即可,但需要判断请求是 get 还是 post 方法。

2、HttpServlet 类

        HttpServlet 类继承于 GenericServlet 类,其目的就是为了简化 GenericServlet 类每次实现service() 方法时都需要判断请求方式的繁琐操作。HttpServlet 对 HTTP 协议进行了封装,操作者只需要根据请求方式重写 doGet 或 doPost 方法。

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //具体的逻辑代码
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //具体的逻辑代码
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值