理解javax.servlet.Servlet ---- JavaWeb三大组件(Servlet、Filter、Listener)

本文详细介绍了Tomcat服务器的启动过程,包括如何通过bin目录下的脚本启动Tomcat,解析server.xml文件,初始化容器,以及读取web.xml文件。同时,深入探讨了Servlet的生命周期,从初始化、业务执行到销毁的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaWEB三大组件加载顺序:listener -> filter -> servlet   (当读取web.xml文件的加载顺序)

在JAVA中有一款实现web端的技术叫Servlet ,Servlet是Java后面扩展的功能,属于javax的包下。要实现web页面数据与Java后台数据交互,这就是Servlet技术。

其他web服务器先不谈,我不是很清楚,但是Tomcat还是能说一说的,Tomcat的启动,我们都知道是在bin目录下运行start.bat 或者 start.sh  这两玩意就是一个脚本,然后这个脚本里面又让运行catalina.sh这个脚本,参数是start。 因为tomcat是Java编写的,所以那两个脚本其实就是让java运行main方法。

tomcat源码地址:https://github.com/apache/tomcat.git

最终 Bootstrap 类中的main方法启动。

public static void main(String args[]) {

    if (daemon == null) {
        // Don't set daemon until init() has completed
        Bootstrap bootstrap = new Bootstrap();
......

因为参数是start ,所以运行到下面

else if (command.equals("start")) {
    daemon.setAwait(true);
    daemon.load(args);
    daemon.start();
    if (null == daemon.getServer()) {
        System.exit(1);
    }
}

catalina 设置 await 属性为true 。await 方法,就是在一个指定的端 口上等待 HTTP 请求,处理它们并发送响应返回客户端。
运行 catalina 的 load 方法() 。该方法内部主要逻辑是解析server.xml文件,初始化容器(运行Servlet的init方法,读取web.xml文件) 。
运行 catalina 的 start 方法。也就是启动 tomcat 。

然后就是在tomcat启动的时候,会读取tomcat存放项目中的web.xml文件。

找到里面映射,利用反射找到对应的运行类。
<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.servlet.MyServlet</servlet-class>
</servlet>  
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

这里就开始有了Servlet的生命周期(简单的说一下): 

Servlet类中的方法:
tomcat启动的时候,初始化Servlet。
public void init(ServletConfig config) throws ServletException;
//public ServletConfig getServletConfig();  // 作用不大,先注释
业务执行的时候,运行service。
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
//public String getServletInfo();  // 作用不大,先注释
tomcat 关闭的时候。
public void destroy();

现在找到了,请求url对应的servlet类 , 在servlet 中

public class Demo extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        res.getWriter().println("hello http");
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res) {
        this.doGet(req, res);
    }
}

根据前端的method: 请求不同的方法,多数为post ,或者get方法。

其实不管是get、post、delete、等其他几个方法,都是servlet 创建的时候的一种规范,他们都可以实现数据传输,所以都是一样的。只是为了让我们更加容易区分。

然后通过HttpServletRequest(浏览器基本数据) 和父类ServletRequest(访问数据)  将浏览器端传入的参数,全部封装进来。

最后通过 HttpServletResponse 将数据传输到Servlet , tomcat 再将数据给tomcat ,传输到 浏览器客户端。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值