这篇文章主要为大家详细介绍了Java的Tomcat和Servlet,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
从前,如果你想运行一个Java代码,你必须实现main方法,这是程序的入口。当您第一次遇到Servlet时,您发现程序在没有main方法的情况下被成功调用,并且您可以在浏览器中看到想要的结果。为什么?
其实main方法在Tomcat里面,Servlet程序用Tomcat运行,所以Tomcat有main方法,会拖动Servlet运行。
Servlet是Tomcat提供的一组API,所以它的代码是基于Tomcat的。Tomcat通过HTTP协议与浏览器进行交互,交互主要分为请求接收、请求处理和响应返回三个步骤。
一、客户端(浏览器)与服务器之间的交互
请求接收:
1.当用户在浏览器中输入URL时,浏览器将构造一个HTTP请求。
2.HTTP请求会通过各种手段转换成光电信号传输给服务器(具体转换涉及通信知识)
3.服务器主机收到这些光电信号后,进行分析,还原成原来的HTTP请求,交给Tomcat处理。
4.Tomcat解析HTTP请求,并将其交给Servlet代码进行处理。
处理请求:
1.Tomcat会通过Content Path和Servlet Path确定某个webapp的某个类,并根据请求的方法(doXXX方法)确定调用该类的具体方法。代码中的HttpServletRequest对象包含了HTTP请求的细节,结果是根据代码计算出来的。
回应:
1.Servlet根据代码计算生成一个响应对象(HttpServletResponse)。
2.Tomcat将响应对象构造成HTTP响应,通过光电信号传输给浏览器主机。
3.浏览器主机对光电信号进行分析,还原成原来的HTTP响应,交给浏览器进行处理。
4.浏览器解析HTTP响应并在界面上显示数据。
二、Tomcat启动过程
1.首先,我们实现的Servlet代码只是创建Servlet类。如果我们想真正使用这些类,我们需要Tomcat来实例化它们。Tomcat将根据@WebServlet注释获取需要实例化的类,通过反射创建实例,并将它们集中在一个数组中。
2.2之后。Tomcat持有Servlet实例,它需要调用Servlet中的init()方法进行初始化(仅一次)
3.然后绑定端口号并创建一个线程池来并发处理请求。
4.在服务器操作结束之前,将调用Servlet对象中的destroy()方法来回收资源。
三、Tomcat处理请求过程
1.收到请求后,Tomcat会按照HTTP协议的格式将其构造成一个HTTP servlet请求对象。
2.Tomcat判断请求是否为静态资源(如图片、HTML文件等。)根据网址。如果是,就直接返回静态资源,如果是动态资源,就执行下一个Servlet部分。
3.根据内容路径和Servlet路径找到请求的Servlet对象,调用Servlet中的服务方法判断请求类型,调用程序员自己编写的doXXX方法。
四、Servlet的service方法
伪代码:
class Servlet { public void service(HttpServletRequest req, HttpServletResponse resp) { String method = req.getMethod(); if (method.equals("GET")) { doGet(req, resp); } else if (method.equals("POST")) { doPost(req, resp); } else if (method.equals("PUT")) { doPut(req, resp); } else if (method.equals("DELETE")) { doDelete(req, resp); } ...... }}
服务将根据请求的方法调用相应的方法。当doXXX方法被调用时,多态性机制将被触发,程序员编写的代码将被执行。
程序员写的Servlet类继承自HttpServlet类,HttpServlet类继承自Servlet类,所以程序员写的类是Servlet的子类。如前所述,Tomcat在启动时会把所有需要实例化的类放在Servlet数组中,所以实际上我们是通过对父类的引用来获得实例化的类,从而触发多态性。
类似
Servlet ins = new HelloServlet();//HelloServlet 类是程序员自己实现的类的类名ins.doGet(req,resp);
总结
本文到此为止。希望能帮到你
精彩评论