`
zhangcxy
  • 浏览: 42936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet处理请求全过程

    博客分类:
  • JAVA
阅读更多

       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()方法。

待续...

 

 

 

 

  • 大小: 157.9 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    servlet编写、部署、运行全过程

    ### Servlet编写、部署、运行全过程详解 #### 一、Servlet基础知识概述 在开始详细介绍Servlet的编写、部署与运行过程之前,我们首先需要了解一些基本概念。 - **Servlet**:Servlet是一种Java技术,它用于扩展...

    手工编写Servlet的详细过程+实例

    动手实践是最好的学习方式,通过这个实例,你可以亲自体验从编写Servlet到运行的全过程,从而加深对Servlet的理解。 总的来说,Servlet是Java Web开发的基础,熟练掌握Servlet的编写和配置对于理解和构建Web应用...

    Servlet基础知识总结

    3. **检查Servlet实例**:Web容器会检查是否已经创建了处理该请求所需的Servlet实例。如果尚未创建,则执行以下步骤;如果已经创建,则直接跳到第5步。 4. **创建Servlet实例**:Web容器创建一个Servlet实例。 5. **...

    servlet技术初步入门

    6. Servlet处理完请求后,通过ServletResponse对象向客户端发送响应。 7. 当Servlet不再需要时,容器会调用destroy()方法释放资源,然后销毁Servlet实例。 三、Servlet配置 在Web应用的web.xml文件中,可以通过...

    Servlet技术入门教学

    4. **Servlet请求和响应处理**: Servlet通过继承`HttpServlet`类,重写`doGet()`和`doPost()`方法来处理HTTP GET和POST请求。这些方法接收`HttpServletRequest`和`HttpServletResponse`对象作为参数,分别用于获取...

    jsp servlet+sqlserver简单登录注册

    - Servlet是Java Web应用中的服务器端组件,用于处理HTTP请求并生成响应。 - 在本项目中,Servlet可能用于处理用户的登录和注册请求,例如验证用户名和密码,或者将新用户的信息保存到数据库。 - 通过`doGet`或`...

    JSP Servlet学习资料--全套PPT

    JSP文件在服务器上被编译为Servlet,然后由Servlet处理HTTP请求和响应。JSP的主要优点在于它将内容的展示和业务逻辑分离,提高了开发效率和代码可维护性。 **Servlet** 则是Java编写的一种服务器端程序,用于扩展...

    学生请假系统Jsp+servlet+mssql

    《基于Jsp、Servlet与Mssql的学生请假系统详解》 在信息技术日新月异的今天,学生...对于学习Java Web开发的初学者来说,这是一个极好的实践案例,可以帮助他们理解前后端交互、数据库操作以及业务逻辑处理的全过程。

    手动编译Servlet.zip

    在IT行业中,Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理HTTP请求并返回响应。手动编译Servlet通常涉及到Java开发环境的配置、Servlet API的导入以及使用Java命令行工具进行编译。接下来,...

    servlet全套教程

    除此之外,Servlet 生命周期中的其他关键方法包括初始化(`init`)、服务(`service`)、销毁(`destroy`)和加载(`load`),它们分别对应于 Servlet 的创建、处理请求、释放资源和被服务器卸载的过程。 在实际...

    Servlet+JSP实现简单购物车

    在Servlet处理请求时,通过HttpServletRequest的`getCookies()`方法获取所有Cookie,然后找到对应的Cookie,反序列化其值以恢复购物车数据。 3. **更新Cookie** 操作购物车后,创建新的Cookie实例,设置相同名称...

    简单的AJAX示例(JSP+servlet)

    这里,`&lt;servlet-class&gt;`指定了Servlet类的全限定名,而`&lt;url-pattern&gt;`则定义了访问Servlet的URL。 **servlet.jar** `servlet.jar`是Servlet API的实现,它包含了处理HTTP请求和响应所需的所有类和接口。在Java ...

    用Servlet获得界面中用户填写的信息

    然后,对于每个后续请求,Servlet都会处理服务方法,即`doGet`或`doPost`。 4. **处理POST请求**: 在`YourServlet`类中,我们需要重写`doPost`方法,这是处理POST请求的地方。`HttpServletRequest`对象用于获取...

    java-servlet学习笔记

    Java Servlet是Java Web开发中的核心组件之一,它用于构建动态网站和Web应用程序。...学习笔记中可能包含了从基础概念到实践操作的全过程,通过不断复习和实践,可以逐步提升对Servlet的理解和运用能力。

    韩顺平servlet和jsp课堂笔记

    1. **Servlet简介**:Servlet是Java编程语言中的一个接口,用于扩展服务器的功能,处理HTTP请求。它为开发者提供了对服务器端数据处理的强大能力。 2. **生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁...

    全套Servlet培训教程

    当你访问一个Servlet时,服务器会创建Servlet实例,调用其服务方法来处理请求,并通过响应方法返回结果。 2. **Servlet生命周期**: Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。初始化是通过`init()...

    JavaServlet程序设计初步

    这里,`servlet-name`是Servlet的唯一标识,`servlet-class`是Servlet类的全限定名,`url-pattern`定义了访问Servlet的URL路径。 四、Servlet容器 Servlet的运行离不开Servlet容器,如Tomcat、Jetty等。容器管理...

    利用servlet实现一个简单的聊天室

    2. **Servlet配置**:在web.xml文件中,我们需要为Servlet定义映射,这样服务器才能知道何时调用哪个Servlet来处理请求。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;ChatServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;...

Global site tag (gtag.js) - Google Analytics