Servlet是运行在web服务器端的java程序,可以生成动态的web页面,属于客户与服务器响应的中间层。实际上jsp的底层就是servle。学习它有助于了解底层的细节,毕竟servlet是一个java类。常见的servlet的写法有两种,一种就是extends HttpServlet;另一种是覆盖原有的service方法。在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet或是doPost方法,
原代码:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if(method.equals("GET")) { long lastModified = getLastModified(req); if(lastModified == -1L) { doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader("If-Modified-Since"); if(ifModifiedSince < (lastModified / 1000L) * 1000L) { maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(304); } } } else if(method.equals("HEAD")) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(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); else if(method.equals("OPTIONS")) doOptions(req, resp); else if(method.equals("TRACE")) { doTrace(req, resp); } else { String errMsg = lStrings.getString("http.method_not_implemented"); Object errArgs[] = new Object[1]; errArgs[0] = method; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } }
由源代码可以看出service只是用来转向,但如果servlet类中覆盖了service方法,比如:
public class HelloServlet extends HttpServlet{ public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ //设置一个消息头,告诉客户端(即浏览器)服务器 //返回的数据类型。 response.setContentType("text/html"); //通过response获得输出流。 PrintWriter out = response.getWriter(); out.println( "<div style='color:red;font-size:30px;'>" + "Hello World</div>"); out.close(); } }
这时service用来做业务处理,不论客户端是用pos还是get来请求此servlet都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。
那么一次http请求,servlet内部是怎么处理并执行的呢?看下面这张图:
画的很抽象是吧,凑合看吧!不过挺有手感的。这就是servlet执行的全过程。
事实上,客户端对servlet发送一个请求,服务器就会开启一个线程,该线程会调用service方法,service方法会根据就收到的客户端的请求类型来决定是调用doGet还是doPost。
servlet的生命周期如下图:
这张看着还舒服点,当客户端向web服务器发送第一次servlet请求时,web服务器会实例化一个servlet,并调用init()方法;如果web服务器已经存在一个servlet实例,将直接调用次实例;然后调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX方法;当servlet从web武器中消亡时,web服务器会调用servlet的destroy()方法。
待续...
相关推荐
### Servlet编写、部署、运行全过程详解 #### 一、Servlet基础知识概述 在开始详细介绍Servlet的编写、部署与运行过程之前,我们首先需要了解一些基本概念。 - **Servlet**:Servlet是一种Java技术,它用于扩展...
### 第一个Servlet开发全过程 #### 一、概述 本文将详细介绍如何使用Oracle的JDeveloper工具来开发一个简单的Servlet应用程序,并通过一系列步骤展示整个过程。Servlet技术是Java Web开发中的核心组成部分之一,它...
动手实践是最好的学习方式,通过这个实例,你可以亲自体验从编写Servlet到运行的全过程,从而加深对Servlet的理解。 总的来说,Servlet是Java Web开发的基础,熟练掌握Servlet的编写和配置对于理解和构建Web应用...
3. **检查Servlet实例**:Web容器会检查是否已经创建了处理该请求所需的Servlet实例。如果尚未创建,则执行以下步骤;如果已经创建,则直接跳到第5步。 4. **创建Servlet实例**:Web容器创建一个Servlet实例。 5. **...
6. Servlet处理完请求后,通过ServletResponse对象向客户端发送响应。 7. 当Servlet不再需要时,容器会调用destroy()方法释放资源,然后销毁Servlet实例。 三、Servlet配置 在Web应用的web.xml文件中,可以通过...
4. **Servlet请求和响应处理**: Servlet通过继承`HttpServlet`类,重写`doGet()`和`doPost()`方法来处理HTTP GET和POST请求。这些方法接收`HttpServletRequest`和`HttpServletResponse`对象作为参数,分别用于获取...
- Servlet是Java Web应用中的服务器端组件,用于处理HTTP请求并生成响应。 - 在本项目中,Servlet可能用于处理用户的登录和注册请求,例如验证用户名和密码,或者将新用户的信息保存到数据库。 - 通过`doGet`或`...
JSP文件在服务器上被编译为Servlet,然后由Servlet处理HTTP请求和响应。JSP的主要优点在于它将内容的展示和业务逻辑分离,提高了开发效率和代码可维护性。 **Servlet** 则是Java编写的一种服务器端程序,用于扩展...
《基于Jsp、Servlet与Mssql的学生请假系统详解》 在信息技术日新月异的今天,学生...对于学习Java Web开发的初学者来说,这是一个极好的实践案例,可以帮助他们理解前后端交互、数据库操作以及业务逻辑处理的全过程。
在IT行业中,Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理HTTP请求并返回响应。手动编译Servlet通常涉及到Java开发环境的配置、Servlet API的导入以及使用Java命令行工具进行编译。接下来,...
除此之外,Servlet 生命周期中的其他关键方法包括初始化(`init`)、服务(`service`)、销毁(`destroy`)和加载(`load`),它们分别对应于 Servlet 的创建、处理请求、释放资源和被服务器卸载的过程。 在实际...
在Servlet处理请求时,通过HttpServletRequest的`getCookies()`方法获取所有Cookie,然后找到对应的Cookie,反序列化其值以恢复购物车数据。 3. **更新Cookie** 操作购物车后,创建新的Cookie实例,设置相同名称...
这里,`<servlet-class>`指定了Servlet类的全限定名,而`<url-pattern>`则定义了访问Servlet的URL。 **servlet.jar** `servlet.jar`是Servlet API的实现,它包含了处理HTTP请求和响应所需的所有类和接口。在Java ...
然后,对于每个后续请求,Servlet都会处理服务方法,即`doGet`或`doPost`。 4. **处理POST请求**: 在`YourServlet`类中,我们需要重写`doPost`方法,这是处理POST请求的地方。`HttpServletRequest`对象用于获取...
Java Servlet是Java Web开发中的核心组件之一,它用于构建动态网站和Web应用程序。...学习笔记中可能包含了从基础概念到实践操作的全过程,通过不断复习和实践,可以逐步提升对Servlet的理解和运用能力。
1. **Servlet简介**:Servlet是Java编程语言中的一个接口,用于扩展服务器的功能,处理HTTP请求。它为开发者提供了对服务器端数据处理的强大能力。 2. **生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁...
当你访问一个Servlet时,服务器会创建Servlet实例,调用其服务方法来处理请求,并通过响应方法返回结果。 2. **Servlet生命周期**: Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。初始化是通过`init()...
这里,`servlet-name`是Servlet的唯一标识,`servlet-class`是Servlet类的全限定名,`url-pattern`定义了访问Servlet的URL路径。 四、Servlet容器 Servlet的运行离不开Servlet容器,如Tomcat、Jetty等。容器管理...
2. **Servlet配置**:在web.xml文件中,我们需要为Servlet定义映射,这样服务器才能知道何时调用哪个Servlet来处理请求。例如: ```xml <servlet> <servlet-name>ChatServlet</servlet-name> <servlet-class>...