首页 > 其他 > 详细

servlet的执行原理

时间:2020-07-10 20:49:04      阅读:72      评论:0      收藏:0      [点我收藏+]

Servlet(全名:serve applet)

一,要实现Servlet类

package web.servlet;
import javax.servlet.*;
import java.io.IOException;

public class ServletDemo01 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
      
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello,servlet");
        System.out.println("我在这里");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
     
    }
}

注意:service()方法是提供服务的地方

二,要写在web.xml文件中书写配置

在根标签web-app下添加下方的代码

<!--配置servlet-->
    <servlet>
        <servlet-name>demo01</servlet-name>
        <servlet-class>web.servlet.ServletDemo01</servlet-class>这是全类名。  
      
    </servlet>
    <servlet-mapping>
        <servlet-name>demo01</servlet-name>
        <url-pattern>/demo01</url-pattern>   此处是映射的访问目录
    </servlet-mapping>

当我们浏览器访问http://localhost:80/demo01时会走以下流程(demo01前面的是applicaton context路径在tomcat小结中有提到)

首先服务器接到请求后解析出URL路径,获取访问的Servlet的资源路径。
1, tomcat会在web.xml中找servlet-mapping 下的url-pattern标签体内容有没有资源路径的对应值。有的话就找出servlet-name
2,然后找出servlet 下的servlet-name 标签体内容和1中name相等的 servlet-class
3,*tomcat会将全类名对应的字节码文件加载到内存。Class.forName();得到类对象cls
   *创建对象 cls.newInstance()
   *调用方法 service

声明周期方法:
     init:  执行一次 说明是单例模式,内存中只会存在一个本类对象。
            *默认是在第一次访问时执行。但是可以自行配置执行时机->在<servlet>标签下配置
<load-on-startup>-1</load-on-startup> 本标签决定"init" 方法执行时机 不加此标签默认值为负数,
此时在第一次访问的时候执行,值为正数时在服务器启动时执行。
     service 在服务时执行可以执行多次。
            *在多人同时访问时,存在线程安全问题,
            *解决方案:尽量不定义成员变量,及时定义了也不要修改值。可以在方法中定义局部变量。
     destroy  在服务器被正常关闭时执行 ,一般用来释放资源。  

上述中是否觉得配置xml文件复杂的呢,所以在Servlet3.0后的版本引入了Annotation WebServlet 其最重要的属性String[] urlPatterns default{} 所以直接在类加WebServlet(urlPatterns="application Context") 可以简化为WebServlet("application context") 是不是相对简单了许多呢?

servlet的执行原理

原文:https://www.cnblogs.com/hellobeicheng/p/13280432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!