Servlet 是运行在 Web 服务器上的 Java 小程序,能够接收并响应客户端发来的 HTTP 请求。Java Web 开发中,JSP 页面在编译之后也是生成 Servlet,而编译的过程在用户第一次访问页面时进行。通常情况下,我们使用 Tomcat 运行 Servlet。
javax.servlet.Servlet 接口定义了 Servlet 必须实现的 5 个方法:
destroy :Servlet 容器卸载 Servlet 时调用此方法释放 Servlet 占用的资源;
getServletConfig :返回 Servlet 配置信息,如初始化和启动参数等;
getServletInfo :返回 Servlet 信息,如作者、版本等;
init :Servlet 容器调用此方法初始化 Servlet;
service :Servlet 容器调用此方法处理客户端请求。
可以通过继承 javax.servlet.GenericServlet 或者 javax.servlet.http.HttpServlet 来实现自己的 Servlet 程序。
GenericServlet 抽象类实现了 Servlet 和 ServletConfig 接口,定义了生命周期的 init 方法和 destroy 方法,与应用层协议无关。继承 GenericServlet 类型后,只需要实现 service 方法即可。
HttpServlet 抽象类继承了 GenericServlet 类型,在 service 方法中把标准 HTTP 请求分发到相应的 doXXX 方法进行处理。HttpServlet 的子类必须覆盖 doGet、doPost、doPut、doDelete、init、destroy 或者 getServletInfo 方法中的一个或多个。
由于 Servlet 通常运行在多线程的容器中,因此在 Servlet 中处理客户端请求时必须考虑共享资源的同步互斥问题。
在 webapp 的 web.xml 配置文件中,配置 Servlet 的相关内容。在如下的配置中,servlet 节点配置了一个名为 invoker 的 Servlet,它的实现类是 InvokerServlet,init-param 节点定义了一些参数键值对;在 servlet-mapping 节点中,配置了 invoker 映射的 URL。客户端访问任何 URL 时,Tomcat 便能把这个请求交给 InvokerServlet 类进行处理。
Servlet 的生命周期由 Tomcat 负责管理。在 Tomcat 启动时,读取 web.xml 中配置的 Servlet 配置生成 ServletConfig 对象,然后加载 Servlet 的实现类,创建 Servlet 的实例,再调用 init 方法传入 ServletConfig 对象完成初始化。Servlet 的 init 方法在整个生命周期中只被调用一次。
Tomcat 调用 Servlet 处理 http 请求的过程可以用下图表示。每次 Tomcat 接收到一个 Servlet 请求时,会产生一个新的线程,创建 HttpServletRequest 实例 request 和 HttpServletResponse 实例 response,然后调用 service 方法并传入 request、response 实例来处理客户端请求。
在 service 方法中,Servlet 能够读取 request 中的请求参数,处理完后把相应的返回内容设置到 response 中。service 方法返回后,Tomcat 再根据 response 的内容,返回给客户端。
当 Tomcat 关闭或重启时,需要卸载 Servlet,这时调用 Servlet 的 destroy 方法,释放 Servlet 占用的资源,然后退出。destroy 方法只能调用一次,调用之后 Servlet 对象就可以被 GC 回收。
本文来源:程序之心,转载请注明出处!
主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加载库,以及用户应用等。书中提供了大量实际操作,可以帮助读者更好地理解程序执行的方式,改进程序的执行效率。此书以程序员的视角全面讲解了计算机系统,深入浅出地介绍了处理器、编译器、操作系统和网络环境,是这一领域的权威之作。
最新内容
© 2016 - 2024 chengxuzhixin.com All Rights Reserved.