Javaweb学习之Servlet

发布时间:2024年01月22日

一、Servlet简介

二、简单实现一个Servlet

  1. 使用idea创建一个工程。
  2. 配置好Tomcat。
  3. 添加servlet-api.jar到工程,该jar包在Tomcat文件lib目录下

image.png

  1. 在src目录下创建代码的包和java文件,实现Servlet接口
package com.study.servlet;/*
@author Tmac
@version 1.0

*/

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

public class StudyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init() 方法被调用");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Service方法被调用");
    }

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

    @Override
    public void destroy() {

    }
}

  1. 在web.xml中配置StudyServlet,提供StudyServlet对外访问地址
 <servlet>
        <servlet-name>StudyServlet</servlet-name>
        <servlet-class>com.study.servlet.StudyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudyServlet</servlet-name>
        <url-pattern>/study</url-pattern>
    </servlet-mapping>

#servlet标签给Tomcat配置Servlet程序
#servlet-name标签是给Servlet程序起一个名字
#servlet-classServlet程序全类名
#servlet-mapping标签是给Servlet程序配置访问地址

  1. 浏览器访问配置好的URL地址

image.png

  1. 返回控制台,可看见方法被调用

image.png

三、Servlet流程

  • 如果是第一次请求
    • 查询web.xml
    • 查看请求的资源,web.xml里配置的url-pattern
    • 找到url-pattern得到Servlet-name
    • 查询该Servlet的实例
    • 如果没有查询到该Servlet对应的id,即没有这个Servlet实例
    • 根据Servlet-name得到Servlet-class:类的全路径
    • 使用反射,将Servlet实例化

四、Servlet生命周期

  • 主要有三个方法
    • init()初始化阶段
    • service()处理浏览器请求阶段
    • destroy()终止阶段

初始化阶段

Servlet 容器(比如: Tomcat)加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例 并调用 init()方法,init()方法只会调用一次, Servlet 容器在下面的情况装载 Servlet:

  • Servlet 容器(Tomcat)启动时自动装载某些 servlet,实现这个需要在 web.xml 文件中添加 1 1 表示装载的顺序
  • 在 Servlet 容器启动后,浏览器首次向 Servlet 发送请求
  • Servlet 重新装载时(比如 tomcat 进行 redeploy【redeploy 会销毁所有的 Servlet 实例】),浏览器再向 Servlet 发送请求的第 1 次

Service阶段

  • 每收到一个 http 请求,服务器就会产生一个新的线程去处理[线程]
  • 创建一个用于封装 HTTP 请求消息的 ServletRequest 对象和一个代表 HTTP 响应消息的 ServletResponse 对象
  • 然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去

destory终止阶段

  • 当 web 应用被终止,或者 Servlet 容器终止运行,或者 Servlet 类重新装载时,会调用 destroy()方法

五、GET和POST请求的分发处理

  • 开发 Servlet, 通常编写 doGet、doPost 方法。来对表单的 get 和 post 请求进行分发处理
public void service(ServletRequest servletRequest,
ServletResponse servletResponse) throws ServletException,
IOException {
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String method = httpServletRequest.getMethod();
if("GET".equals(method)) {
doGet(); //用 doGet() 处理 GET 请求 
} else if("POST".equals(method)) {
doPost(); //用 doPost() 处理 POST 请求 
}
}

public void doGet() { 
    System.out.println("doGet() 被调用..");
}
public void doPost() { 
    System.out.println("doPost() 被调用..");
}

文章来源:https://blog.csdn.net/weixin_45910629/article/details/135733510
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。