Java Servlet 运行原理分析

1 Servlet基本执行过程

Web容器(如Tomcat)判断当前请求是否第一次请求Servlet程序 。

如果是第一次,则Web容器执行以下任务:

  • 加载Servlet类。
  • 实例化Servlet类。
  • 调用init方法并传入ServletConfig对象

如果不第一次执行,则:

  • 调用service方法,并传入request和response对象

Web容器在需要删除Servlet时(例如,在停止服务器或重新部署项目时)将调用destroy方法。

2 Web容器如何处理Servlet请求

Web容器负责处理请求。让我们看看它如何处理请求。

  • 将用户请求与web.xml文件中的Servlet进行映射。
  • 创建请求和响应对象
  • 创建新的线程,并在该线程上调用Servlet的service方法
  • 在public的service方法内部调用protected的service方法
  • protected的service方法根据请求的类型调用doGet方法。
  • doGet方法生成响应并将其传递给客户端。
  • 发送响应后,Web容器将删除请求和响应对象。该线程是继续留在线程池中还是被删除取决于服务器实现。

3 public的service方法部分源码

public的service方法将ServletRequest对象转换为HttpServletRequest类型,而ServletResponse对象转换为HttpServletResponse类型。然后,调用传递这些对象的服务方法。让我们看一下内部代码:

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);
} 

4 protected的service方法部分源码

protected的service方法判断请求的类型,如果请求类型为GET,则调用doGet方法,如果请求类型为POST,则调用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);
    }
....
//rest of the code
  }
}

以上就是Java Servlet 运行原理分析的详细内容,更多关于Java Servlet 运行原理的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java ServletContext对象原理及功能解析

    概念 代表整个web应用,可以和程序的容器(服务器)来通信 获取 1.通过request对象获取 request.getServletContext(); 2.通过HttpServlet获取 this.getServletContext(); 功能 1.获取MIME类型: MIME类型: 在互联网通信过程中定义的一种文件数据类型 格式: 大类型/小类型 text/html image/jpeg 获取: String getMimeType(String file) 2.域对象:共享数据 Serv

  • Java Servlet输出中文乱码问题解决方案

    1.现象:字节流向浏览器输出中文,可能会乱码(IE低版本) private void byteMethod(HttpServletResponse response) throws IOException, UnsupportedEncodingException { String date = "你好"; ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(date.get

  • java中Servlet监听器的工作原理及示例详解

    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器原理 监听原理 1.存在事件源 2.提供监听器 3.为事件源注册监听器 4.操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法 监听器典型案例:监听window窗口的事件监听器 例如:swing开发首先制造Frame**窗体**,窗体本身也是一个显示空间,对窗体提供监听器,监听窗体方法调用或者属性改变:

  • Java基于ServletContextListener实现UDP监听

    这篇文章主要介绍了Java基于ServletContextListener实现UDP监听,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用spring boot实现项目启动时的监听, UDPListener import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.DatagramPacket; import java.ne

  • JAVA WEB中Servlet和Servlet容器的区别

    Servlet 很多同学可能跟我一样始终没有搞清楚到底什么是 Servlet,什么是 Servlet 容器.网上看了很多帖子,或许人家说的很清楚,但是自己的那个弯弯就是拐不过来. 想了很久说一下自己的理解. Java web 开发中为啥要有 Servlet 呢?是否可以不要. web开发的本质就一句话:客户端和服务器交换数据.于是你使用 Java 的 Socket 套接字进行编程,去处理客户端来的 tcp 请求,经过编解码处理读取请求体,获取请求行,然后找到请求行对应的处理逻辑步入服务器的处理中

  • Servlet开发JavaWeb工程示例详解

    一.什么是Servlet? Servlet是在服务器上运行的小程序,也就是一个Java类,但比较特殊,不需要new,自动就可以运行.也有创建.垃圾回收和销毁过程.Servlet是JavaWeb的三大组件之一(Servlet.Filter.Listener),它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: 接收请求数据: 处理请求: 完成响应. 例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完

  • JavaWeb项目Servlet无法访问问题解决

    这篇文章主要介绍了JavaWeb项目Servlet无法访问问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.创建Servlet 2.在jsp中用ajax调用 $.post("<%=request.getContextPath()%>/AjaxValidationServlet",{"userName":userName},function(message){ alert(message); }

  • JavaWeb servlet实现下载与上传功能的方法详解

    本文实例讲述了JavaWeb servlet实现下载与上传功能的方法.分享给大家供大家参考,具体如下: 本文内容: servlet实现下载功能 servlet实现上传功能 首发日期:2018-07-21 servlet实现下载功能 实现流程 1.首先制作一个jsp页面,主要是用来触发下载的.这里可以根据你的想法来做,当然servlet那边就要相应的更改了.我这里使用一个简单的a标签来触发. 2.设置响应信息,告诉浏览器要将传过来的数据识别成下载:根据提交上来的数据找到对应文件,转成流,返回给浏览

  • 使用Java servlet实现自动登录退出功能

    UserDao.java从数据库中查询用户名与密码 //登录 public User login(User user) throws SQLException { QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select from user where username = ? and password = ?"; return qr.query(sql, new Be

  • IntelliJ IDEA里找不到javax.servlet的jar包的解决方法

    今天在复习Java Web时,因为初次使用 IntelliJ IDEA 中, 当使用javax.servlet包下的类时(例:javax.servlet.http.HttpServletRequest), 你会发现在IntelliJ IDEA里无法成功编译这个程序. 问题解决: 办法1:使用Project Structure 在弹出的窗口中选择tomcat所在的目录,进入里面的lib目录,寻找servlet-api.jar这个jar包(如果JSP页面也有相关的JavaWeb对象,则还要寻找jsp

随机推荐