zoukankan      html  css  js  c++  java
  • 实例解析Servlet运行原理

    一、Servlet运行原理
    1、Web Application的标准目录结构:
            WEB-INF/classes——存放编译好的servlet,即由JDK编译好的类(.class)文件
                          /lib——该Web Application用到的依赖包
                          /Web.xml——该Web Application的配置文件
            一个完成的web应用程序的目录下,必须包含以上目录结构。
             Web Application可以直接放在Tomcat的webapps目录下面,也可以通过配置文件指定到其他目录:在server.xml文件中<host>标签中<Context path="/虚拟路径名称" docBase="Web application目录位置" debug="0" reloadable="true"/>
            了解完这些,我们看一下servlet到底是怎么在tomcat中运行的。
    2、Tomcat解析URL
            第一步:URL的一般形式:<URL的访问方式>://<主机>:<端口>/<路径>
            <端口>可以在tomcat中conf目录下的server.xml中设置,默认为8080。<路径>包含了项目名称和文件路径。tomcat启动后,监听8080端口,当有URL请求发过来之后,tomcat根据url解析出项目名称,然后到webapps目录下搜索到该项目文件夹。
            第二步:项目文件找到后,根据配置文件寻找类文件。配置文件web.xml起到信号中转的作用,用于将url中截取的文件路径和相应的文件匹配(这里相应的文件先以.class文件为例),以便tomcat运行时能够定位到所需的文件上。
    第三步:将.class文件加载到内存后,然后调用相应的方法。
            tomcat首先new一个servlet,而且仅仅创建一次。调用相应的方法时,tomcat首先调用Servlet的service方法,然后service方法再根据提交表单时的方法(method=post/get)调用doGet()或doPost()。
     
    二、下面举一实例说明Servlet运行原理
            建立项目test-servlet,建立FirstServlet并继承HttpServlet,然后覆盖doGet或doPost方法,此处覆盖doGet方法,代码如下:
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class FirstServlet extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		//输出到控制台
    		//System.out.println();
    		//输出到浏览器
    		resp.setContentType("text/html");
    		//resp.getWriter().print("HelloWorld");
    		resp.getWriter().println("<html>");
    		resp.getWriter().println("<head>");
    		resp.getWriter().println("</head>");
    		resp.getWriter().println("<body>");
    		resp.getWriter().print("HelloWorld");
    		resp.getWriter().println("</body>");
    		resp.getWriter().println("</html>");
    	}
    }
    

            将建立好的FirstServlet程序编译后,拷贝到web application中的classes目录中。
     
            在web.xml配置文件中进行配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4">
    	xmlns="http://java.sun.com/xml/ns/j2ee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    	
    	<servlet>
    		<servlet-name>fs</servlet-name>
    		<servlet-class>FirstServlet</servlet-class>
    		
    		<servlet-mapping>
    			<servlet-name>fs</servlet-name>
    			<url-pattern>/servlet/FirstServlet</url-pattern>
    		</servlet-mapping>
    	</servlet>
    </web-app>
      
            web配置过程解析:tomcat首先根据url地址找到<url-pattern>中的/servlet/FirstServlet,然后找到<servlet-mapping>中的<servlet-name>fs,然后根据<servlet-name>找到<servlet>标签中的<servlet-name>(所以这两个name应该是一致的,否则就找不到了),最后找到<servlet-class>中的class类文件,对class文件加载到内存中,创建一个servlet然后调用相应的.class方法。
     
            此servlet实例运行流程图:

     
  • 相关阅读:
    简单的react-dom.js react.js 中的源码手写
    回顾vue源码理解到哪记录到哪
    一道很有纪念意义的算法题之多维数组去重,不降维
    下载文件.xlsx .csv 或者下载压缩包
    koa+mysql简单实现查询功能
    幽灵空白节点解决方案,史上最明白
    useCallback,useMemo源码
    useContext源码解读
    useEffect源码
    Hadoop 学习笔记(二)Hadoop 本地运行环境搭建及简单应用
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663949.html
Copyright © 2011-2022 走看看