• Servlet 运行原理


    一:servlet定义

    Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。

    二:简单servlet实例

    //导入所需的包

    import javax.servlet.http.*;

    import javax.servlet.*;

    import java.io.*;

    public class FirstServlet extends HttpServlet {

    //处理请求的方法

    public void doGet(HttpServletRequest req, HttpServletResponse resp)

    throws ServletException, java.io.IOException {

    //数据发送给客户端—>控制台方式输出

    //System.out.println(“Hello Servlet”);

    //数据发送给客户端—>HTML页面输出

    resp.setContentType(“text/html”);

    resp.getWriter().print(“<html>”);

    resp.getWriter().print(“<head>”);

    resp.getWriter().print(“</head>”);

    resp.getWriter().print(“<body>”);

    resp.getWriter().print(“Hello World”);

    resp.getWriter().print(“</body>”);

    resp.getWriter().print(“</html>”);

    }

    }

    三:servlet配置到Tomcat中去

    Tomcat是一个web容器,也叫web服务器。我们都知道J2EE有十三个标准,这些标准大部分都是接口,Tomcat只是实现了JSP 和 servlet 开发标准。实现了所有的开发标准,就是应用程序服务器,比如Jboss。

    编译好的servlet类只能运行在tomcat容器中,客户端浏览器不可以直接访问Servlet,需要在web.xml中配置一下

    <servlet>

    <servlet-name>FirstServlet</servlet-name>

    <servlet-class>FirstServlet</servlet-class>

    </servlet>

    <servlet-mapping>

    <servlet-name>FirstServlet</servlet-name>

    <url-pattern>/servlet/FirstServlet</url-pattern>

    </servlet-mapping>

    Tomcat启动成功后,在浏览器中输入:http://localhost:8080/abingtest/servlet/FirstServlet

    四:servlet运行原理

    当我们在浏览器中输入http://localhost:8080/abingtest/servlet/FirstServlet的时候,Tomcat是如何找到我们的servlet ,运行,并返回我们想看到的页面的呢。

    1. WebApplication的标准目录结构:

    WEB-INF/classes

    /lib

    Web.xml

    也就是一个完整的web应用程序目录下,必须包含以上的目录结构。

    Classes 文件夹下是项目中用到的类文件,均由JDK编译成了.class文件

    Lib文件夹是我们项目中引用的jar包

    Web.xml是整个web应用程序的配置文档。

    了解了这些,我们再来看Tomcat的工作流程。

    2. Tomcat解析URL

    a) 首先来看URL中包含的信息:”协议” + “端口号” + “路径(项目名称+文件路径)”

    Tomcat启动后,监听我们的8080端口,当有Url请求发过来之后,解析出项目名称 abingtest,然后到webapps目录下搜索到该项目文件夹。

    b) 项目文件找到后,开始寻找类文件。

    这个时候Tomcat去Web.xml文件中寻找<servlet-mapping> 配置节中包含”servlet/FirstServlet”字符串,进而找到该类文件所在的位置。

    3. Servelt中的doGet() 和 doPost() 方法

    我们写的FirstServlet 继承了HttpServlet ,重写了HttpServlet中的doGet() 方法,HttpServlet中还有一个doPost()方法。这两个方法都是用来处理Http请求的。Servlet会根据我们提交表单的方法(method=post/get)调用service方法来自动选择(我们在下一篇文章中来详细说明一下Service方法是如何自动调用FirstServlet中的doGet()方法的)

    4. Servlet如何接收数据

    import javax.servlet.http.*;

    import javax.servlet.*;

    import java.io.*;

    public class FirstServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, java.io.IOException {

    //获取表单数据

    String userName = request.getParameter(“userName”);

    }

    }

    Http协议会将网页中的所有内容包装成为一个request对象传递给servlet ,Servlet通过这个对象拿到表单中的所有数据,处理完成之后,通过Response对象返回给客户端浏览器。

    5. Servlet的生命周期

    Servlet的生命周期是由Tomcat容器管理的

    a) 客户发出请求—>Web 服务器转发到Web容器Tomcat;

    b) Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;

    c) 从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;

    d) Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;

    e) 假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里; Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。 从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步);调用init方法(对应3步);调用service()方法(对应4、5步);;调用destroy()方法(对应6步)。

    五:Servlet生命周期的各个阶段

  • 相关阅读:
    扩展当easyui datagrid无数据时,显示特定值。如:没有数据
    draggable datagrid columns
    easyui combobox 带 checkbox
    LightOJ1003---Drunk(拓扑排序判环)
    算法分析---回文数推断
    Android集成百度地图SDK
    BS一机双屏的解决方式
    myeclipse中更改web项目在tomcat中部署的路径
    Linux内核调试技术——jprobe使用与实现
    【Servlet】把文件写到Respond输出流里面供用户下载
  • 原文地址:https://www.cnblogs.com/a1280055207/p/2819699.html
Copyright © 2020-2023  润新知