`
gotothework
  • 浏览: 83272 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
最近访客 更多访客>>
社区版块
存档分类
最新评论

HttpServlet分析

阅读更多
在Servlet技术中,HttpServlet可谓是一个核心类,在熟练运用的同时,我们还要透彻的分析其底层的工作原理,这样对于我们的实际中的开发,和日后的学习,都有非常大的帮助。HttpServlet是一个继承了GenericServlet的抽象类。主要是应用于Http协议的请求和响应。当容器接收到一个针对HttpServlet对象的请求时,调用该对象的方法顺序如下:
1.公共的service();

2.在公共的service(ServletRequest req, ServletResponse res)方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,然后再调用受保护的service(HttpServletRequest req, HttpServletResponse resp)方法,并将转换后的参数传递进去。

*注意,我用红体标注的这两个方法,在HttpServlet中有两个service()方法,其中一个是最先调用的公共的public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException,然以,在参数转换完以后会调用protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException。千万不要弄混!!

3.在执行受保护的service()方法时,HttpServletRequest对象会先调用getMethod()方法,来获得你提交请求的方式(例如,POST,GET),通过判断后会调用响应的doXXX()方法。在方法中的请求方式的判断其实就是对字符串的判断,下面我贴出部分源代码,你会发现,servlet的源代码中,不外乎就是java的基础代码,所以,Java基础非常重要。


公共的service():
public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException
    {
        HttpServletRequest request;
        HttpServletResponse response;
        try
        {
            request = (HttpServletRequest)req;
            response = (HttpServletResponse)res;
        }
        catch(ClassCastException e)
        {
            throw new ServletException("non-HTTP request or response");
        }
        service(request, response);
    }

    static Class class$(String x0)
    {
        return Class.forName(x0);
        ClassNotFoundException x1;
        x1;
        throw new NoClassDefFoundError(x1.getMessage());
    }

}

受保护的service():
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);
        }
    }

这就是HttpServlet在容器中运行时的基本步骤,随后我还会发其他的关于serlvet的文章,JSP和Servlet是J2EE的核心,熟练的掌握和运用这两项技术,我们才能子今后的学习与工作中更加的得心应手。
分享到:
评论

相关推荐

    Servlet&GenericServlet&HttpServlet源码分析.zip_GenericServle_httpser

    总之,这个压缩包提供的源码分析对于学习Servlet、GenericServlet和HttpServlet的工作原理极其有价值,能够帮助你深入理解Java Web开发的核心机制,提高你的编程和调试能力。通过细致的阅读和实践,你将能够更加熟练...

    详解 问题:HttpServlet cannot be resolved to a type

    在开发Java Web应用程序时,你可能会遇到一个常见的错误:“HttpServlet cannot be resolved to a type”。...同时,保持开发环境的整洁和更新,以及对错误信息的仔细分析,都是避免和解决这类问题的关键。

    Hadoop源码分析(完整版)

    HTTP模块提供了基于Jetty的HTTPServlet,使得用户可以通过浏览器访问文件系统状态信息和日志。 Hadoop的源码分析涉及对整个系统的拆解和理解,是一个复杂且细致的工作。通过对Hadoop源码的分析,开发者可以深入理解...

    看透springMvc源代码分析与实践

    6.3 HttpServlet41 第7章 Tomcat分析44 7.1 Tomcat的顶层结构及启动过程44 7.1.1 Tomcat的顶层结构44 7.1.2 Bootstrap的启动过程45 7.1.3 Catalina的启动过程47 7.1.4 Server的启动过程48 7.1.5 Service的...

    servlet源码解析.txt

    通过对`HttpServlet`源码的分析,我们了解到`HttpServlet`不仅继承了`GenericServlet`的基本功能,还针对HTTP协议进行了扩展,支持多种HTTP请求方法,并提供了默认的处理方式。在实际开发过程中,开发者通常会继承`...

    Hadoop源代码分析

    14. **`http`**:基于Jetty的HTTPServlet,允许用户通过浏览器查看文件系统状态和日志。 15. **`log`**:提供HTTP访问日志的记录功能。 #### 三、HDFS设计:NameNode与DataNode的角色 HDFS的核心组件包括NameNode...

    解决idea导入不了servlet类(1).docx

    #### 二、问题分析 出现无法导入Servlet类的情况,通常有以下几个原因: 1. **Tomcat版本问题**:如果使用的Tomcat版本较低或者缺少必要的JAR文件,可能会导致Servlet类无法被识别。 2. **项目配置错误**:项目中...

    Hadoop源代码分析完整版

    - **http**:基于Jetty的HTTPServlet,提供文件系统状态信息和日志的浏览器查看功能。 - **log**:提供HTTP访问日志记录功能。 #### 五、Hadoop序列化机制 Hadoop采用了自定义的序列化机制,而不是Java内置的序列...

    HttpServletResponse

    public class HttpServletResquseDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置响应内容类型...

    超市账单管理系统

    超市账单管理系统是一款基于HttpServlet技术开发的软件应用,它主要用于帮助超市进行日常运营中的账单管理,包括销售记录、库存统计、成本核算以及利润分析等多个方面。在这个系统中,Oracle数据库被选为数据存储的...

    SpringMVC源码分析.md

    - `DispatcherServlet`继承自`FrameworkServlet`,而`FrameworkServlet`又继承自`HttpServlet`,因此它具有处理HTTP请求的能力。 - 在`FrameworkServlet`中有`service`方法,它是处理HTTP请求的核心入口。 2. **`...

    用servlet写的九九乘法表

    解压后,我们可以查看源代码,进一步学习和分析其实现方式。 总之,这个项目是一个实践Servlet基本功能的好例子,通过它我们可以学习到Servlet的生命周期、HTTP请求处理,以及如何生成动态HTML内容。同时,它也让...

    Service.rar

    【Service.rar】是一个压缩包,其中包含了使用MyEclipse 10开发的Web服务器项目的源代码。这个项目可能是一个简单的示例,旨在帮助用户理解...通过实际操作和分析源代码,可以进一步提升对Web开发的理解和实践能力。

    java代码审计-Turbomail未授权接口访问分析

    对 MailMain 做审计,可以发现 MailMain 继承自 HttpServlet 类,且会接收一个名为 type 的请求参数。当“type.equals(“pm”)”时,会调用 PMAdmin 的 show 方法。对 PMAdmin 的 show 方法进行审计,可以发现如下...

    JavaWeb session 原理分析

    - **类创建**:在`src`目录下创建包`com.xtedu.javaweb.servlet`,并在其中创建类`HelloServlet`继承自`HttpServlet`。 - **方法实现**:实现`doGet`方法,设置响应类型为"text/html",并通过`PrintWriter`输出HTML...

    Hadoop源代码分析(完整版).pdf

    Hadoop使用了Jetty框架提供的HTTPServlet来支持HTTP服务,使得用户可以通过浏览器观察文件系统状态和日志。 Hadoop的包功能分析还包括记录(record)的自动生成机制,它们根据DDL来创建相应的编解码函数。对于网络...

    基于UML的毕业设计管理系统的分析与设计.docx

    通常情况下,开发者会选择继承自GenericServlet或HttpServlet类来进行开发,Rose通过特定的版型(《Http_Servlet》或《Generic_Servlet》)来表示这两种类型的Servlet。 - **Web建模与UML扩展机制**:Web建模是UML...

    Hadoop 源代码分析 [完整版]

    为了进一步操作数据,Hadoop还支持通过DDL自动生成编解码函数,并提供了基于Jetty的HTTPServlet来通过浏览器监控文件系统状态和日志。 Hadoop源代码中自定义了Writable接口,它类似于Java序列化中的Serializable...

    servlet与Struts action线程安全问题分析

    public class ConcurrentTest extends HttpServlet { PrintWriter output; public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String ...

Global site tag (gtag.js) - Google Analytics