• Servlet的三种创建方式


    什么是Servlet

    Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

    • 接收请求数据;
    • 处理请求;
    • 完成响应。

      例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

    Servlet的生命周期

    所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:

    • void init(ServletConfig);
    • void service(ServletRequest,ServletResponse);
    • void destroy();

    Servlet在第一次请求的时候,由Tomcat来创建, 马上调用init()方法, 用户每请求一次,都会调用一次service(),

    当服务器关闭之前, 先销毁Servlet, 在销毁Servlet之前,调用destroy()方法.

    实现Servlet有三种方式:

    1. 实现javax.servlet.Servlet接口;
    2. 继承javax.servlet.GenericServlet类;
    3. 继承javax.servlet.http.HttpServlet类;(推荐

    第一种方式: 实现javax.servlet.Servlet接口

      1) 编写一个类实现Servlet接口

      2) 在web.xml文件中,对Servlet进行配置, 绑定url

      3)  访问:http://服务器ip:服务器端口/项目名/servlet的url

    访问这个servlet的url:http://localhost:8888/les02/hello

    Servlet是一个线程不安全, Tomcat会为每一次请求创建一个线程, 我们web项目是一个多线程的项目

    默认情况:  Servlet的创建是在第一次请求这个Servlet的时候,创建, 为了Tomcat启动快, 从用户角度来看: 第一个访问的用户耗时多一点, 耗费创建Servlet的时间,  第一次惩罚

        Tomcat:第一步判断这个Servlet类有没有创建对象如果对象。
        直接通过这个类的对象调用service0方法处理用户请求
        如果没有: Tomcat先创建这个类的对象,然后通过对象调用service()

    第二种方式: 继承GenericServlet类

       GenericServlet这个类是Servlet的一个实现类, 它是一个抽象类, service()没有重写

    第三种方式: 继承HttpServlet类 (推荐)

      HttpServlet是GenericServlet的子类, 也是一个抽象类

    1) 编写一个类继承HttpServlet, 重写doGet()以及doPost()

        doGet() 处理Get请求

           doPost() 处理Post请求

    2) 在web.xml中配置Servlet

    Servlet接口相关类型

    在Servlet接口中还存在三个我们不熟悉的类型:

    • ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
    • ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;
    • ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素

    ServletRequest对象常用的方法: getParamenter(String name)    获取请求参数, 通过请求参数名获取请求参数的值

    ServletResponse对象常用的方法: getWriter()  /  getOutputStream() 响应对象方法: 后台把数据响应给前端, 使用输出流 (两个流只能选一个)

    ServletConfig对象常用的方法: 获取指定的Servlet的配置信息,每一个Servlet都有自己的配置信息,

    @Override
        public void service(ServletRequest req, ServletResponse res)
                throws ServletException, IOException {
            //获取请求参数
            String name = req.getParameter("name");
            System.out.println("前端传递的参数name的值:"+name);
            //给客户端响应:  响应到客户端浏览器上   类似于js,  document.write()
            //得到响应输出流
            res.getWriter().write("<h1>hello client</h1>");
    
            //获取Servlet初始化参数
                    String servletName = config.getServletName();
            String encoding = config.getInitParameter("encoding");
            String age = config.getInitParameter("age");        
            res.getWriter().print("<h1>"+servletName+","+encoding+","+age+"</h1>");
        }        
    View Code

     

    • getServletContext() :获取ServletContext对象  
    • getServletName() : 获取Servlet的name
    • getInitParament(String name) : 获取Servlet的初始化参数(在<servlet>中配置的参数)
    • getInitParaments() : 获取Servlet请求参数所有的name的值,返回的是一个集合, 

    HttpServlet调用源码分析

     三种创建方式的关系可用下图表示:

  • 相关阅读:
    [BZOJ2127]happiness(最小割)
    [网络流24题]餐巾计划问题(费用流/有上下界的费用流)
    SQL注入-数据库判断
    Web渗透实验:基于Weblogic的一系列漏洞
    使用nmap 验证多种漏洞
    smb(ms17-010)远程命令执行之msf
    ashx后门
    Windows Server 2008 R2入门之用户管理
    windows2008,命令行远程登录
    利用jspx解决jsp后缀被限制拿shell
  • 原文地址:https://www.cnblogs.com/64Byte/p/12803905.html
Copyright © 2020-2023  润新知