Servlet Servlet(Server Applet),即服务程序。Servlet是一种用Java技术构建的动态Web应用服务程序,运行在容器中(如Tomcat、Jetty服务器等),容器提供了执行Servlet的运行时环境和支持,负责接收HTTP请求,根据请求路径将其分配给对应的Servlet进行处理,并将响应发送回客户端。这样就实现了动态的页面内容。
以下从请求到响应来梳理整个Servlet执行流程和生命周期。
1.Servlet执行流程1.1 客户端发送Http请求客户端发送Http请求消息,如用户可以在浏览器地址栏输入URL,按下回车发送GET请求(从服务端获取资源),或者以提交表单的方式发送POST请求(服务端发送数据)。
1.2 加载和初始化当Servlet容器收到请求,会根据请求的URL找到对应的Servlet对象(由容器创建),并调用servlet中的init()方法进行初始化操作,如数据连接创建、加载配置文件等。其实初始化操作可以在开启服务器时,在请求到来之前进行,这样可以降低响应的时间。
1.3 请求处理初始化后容器可以调用对象中的service()方法进行http请求的处理了。每次请求Servlet时,容器都会调用Servlet中的service()方法对请求进行处理,在service()方法中再根据请求的类型(GET、POST、PUT等)调用doGet()、doPost()等方法接收请求对象,这些方法是就是我们用来处理具体的业务逻辑。我们可以从HttpServletRequest请求对象中获取请求的参数、Cookie、会话(Session)等信息,并在方法中通过HttpServletResponse对象生成响应内容传出给客户端。
1.4 服务终止,结束流程当该连接下所有的请求和响应都处理之后,关闭容器时,Servlet容器就会调用servlet对象中的destroy()方法进行清理操作(destroy()也可以显式调用),释放资源,如关闭数据库连接、删除文件并销毁Servlet实例等,实例随后被垃圾收集器回收。
需要注意的一点是,Servlet容器会在第一次请求时加载Servlet对象,并在以后的请求中复用已加载的Servlet对象,以提高性能和效率。其次是每个请求都由一个独立的线程来处理,多个请求可能是同一个对象来处理,所以Servlet开发必须注意线程安全的。
2.Servlet生命周期根据执行流程就可以知道Servlet的生命周期,包括由容器加载和实例化,初始化配置信息,处理客户端的请求,销毁。所有可以知道每个Servlet实例通常只有一个init()方法调用,一个destroy()方法调用,但service()方法可能会被多次调用处理不同的请求(service()再根据请求的类型内部调用GET、POST或者PUT等请求)。
3.编写一个Servlet讲完大概的流程后,如何写一个Servlet,可以发送请求得到想要的响应呢?
要编写一个Servlet,可以按照以下步骤进行:
3.1 项目创建和基础的修改和配置这里我用IDEA创建Maven项目的方式构建web应用程序。
这里设置项目的名称以及项目坐标的GAV(保证项目唯一性),测试用坐标不配也行。
这里我已经在本地下载了maven并创建了本地仓库,用IDEA上自带的也行。
在main目录下创建以下两个资源目录