Servlet对象

什么是servlet

  • Servlet其实就一个运行在web服务器上的小的Java程序,用于处理从web客户端发送的请求,并且对请求作出响应。

Servlet技术概述

JavaEE技术有13规范,其中之一就是Servlet规范,本质就是接口

Servlet是JavaEE技术平台的规范,Servlet 运行在服务端的Java小程序只能运行在WEB服务器(Tomcat).

Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),且最重要。

作用: 接收请求,进行响应

广义的Servlet: Servlet接口所有实现类

狭隘的Servlet: 专门指的是Servlet接口

Servlet程序快速入门

实现Servlet程序入门,Servlet成为Java服务器端程序,由客户端浏览器访问的.

  • 实现步骤:
    • 定义类实现接口Servlet
    • 重写接口中的全部抽象方法(5个)
    • 在web.xml中配置Servlet
下面是定义了一个QuickStartServlet类实现接口Servlet:
package com.ccc.servlet;
/*
 * 实现Servlet快速入门
 *   1、创建一个类实现Servlet接口(Tomcat)
 *   2、重写Servlet接口中的所有抽象方法(5个)
 *   3、在当前项目的web.xml文件中,对Servlet进行配置
 */
public class QuickStartServlet implements Servlet{
    /*
        service方法用于接收客户端的请求,给客户端进行响应
            ServletRequest:接收客户端的请求
            ServletResponse:给客户端进行响应
    */
     
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet快速入门");
        
        // 参数servletResponse方法getWriter()获取字符输出流
        Writer w = servletResponse.getWriter();
        
        //输出流的方法write,数据写到客户端浏览器
        w.write("hello world");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

在web.xml中配置这个类

<servlet>
	<!--quick这个名字随便起,但要跟下面的<servlet-name>内的名字对应-->
    <servlet-name>quick</servlet-name>
    <!--这个名字是前面那个实现接口Servlet的类的全路径-->
    <servlet-class>com.ccc.servlet.QuickStartServlet</servlet-class>
</servlet>

<servlet-mapping>
	<!--quick这个名字随便起,但要跟上面的<servlet-name>内的名字对应-->
    <servlet-name>quick</servlet-name>
    <!--使用浏览器访问Servlet的虚拟路径-->
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

访问servlet
http://localhost:8080/day01/hello
这个day01是package com.ccc.servlet这个包所属的模块名称。
在这里插入图片描述

Servlet程序执行原理(重要)

在这里插入图片描述

Servlet对象生命周期

Servlet生命周期:Servlet对象从创建到销毁的过程。

  • Servlet何时被创建又是何时被销毁的?

Servlet中有init,service,destroy方法,这几个方法称为是Servlet生命周期相关的方法。

  • init(ServletConfig config)Servlet对象的初始化方法,对象被创建的时候调用

    Servlet对象什么时候被创建

    • Servlet默认第一次访问的时候,对象被创建

    • Tomcat服务器启动的时候创建对象,需要修改web.xml (一般不配置)

        <!--
        	Tomcat服务器启动的时候,自动创建Servlet对象
        	配置的数字是设置启动的优先级
       	可以写任意的整数,数字越小,优先级越高
        -->
      <load-on-startup>5</load-on-startup>
      
  • service(request,response)客户端访问一次,执行一次

  • destory()Servlet对象销毁之前调用

  • Servlet对象什么时候被销毁

    • 停止Tomcat服务器
    • WEB项目从服务器移除

Servlet的Web.xml配置

<!--
  Servlet的详细配置
-->
<servlet>
    <!-- name,定义名字,随意-->
    <servlet-name>path</servlet-name>
    <!-- class 配置类的全名,反射-->
    <servlet-class>com.itheima.servlet.PathServlet</servlet-class>
</servlet>

<servlet-mapping>
    <!-- name 必须和上面name相同-->
    <servlet-name>path</servlet-name>
    <!-- url-pattern 配置的是浏览器访问的虚拟路径,需要最后将“\”后的名字输入到浏览器-->
    <url-pattern>/path</url-pattern>
</servlet-mapping>

url-pattern的配置

  • 1、完全匹配

    /abc : 浏览器地址栏必须写 /abc(abc只是方便为了举例)

    <url-pattern>/path</url-pattern>
    
  • 2、目录匹配

    /aaa/bbb/* : 浏览器地址栏可以写 /aaa/bbb/任意

  • 3、后缀名匹配

    *.abc : 浏览器地址栏可以写 任意.abc

    目录匹配和后缀名匹配不能同时使用

    ​ /aaa/bbb/*.abc 冲突

IDEA创建Servlet(重要)

在这里插入图片描述

public class MyServlet extends HttpServlet {
    /**
     *   doGet方法对应了客户端浏览器的提交方式GET
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().print("MyServlet run");
    }
    /**
     *   doPost方法对应了客户端浏览器的提交方式POST
     *   无论:是POST提交,还是GET,统一处理,都使用doGet
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用doGet
        doGet(request,response);
    }
}

继承HttpServlet原理

Servlet是JavaEE规范,Servlet接口中的标准方法 service方法
在这里插入图片描述

修改Servlet模版(了解)

在这里插入图片描述

ServletConfig对象

ServletConfig对象,表示的是Servlet配置对象

有一个Servlet程序,就会出现一个对应的ServletConfig对象

  • 获取ServletConfig对象

    • init方法参数(ServletConfig servletConfig),调用者是Tomcat引擎,ServletConfig对象是由Tomcat引擎创建
    • 父类中,定义了方法 ServletConfig getServletConfig()
  • 对象能做什么

    • 获取Servlet的名字,String getServletName()

         <servlet-name>config</servlet-name>
      
    • 获取Servlet的初始化参数,String getInitParameter(“键名”)

      <init-param>
                  <param-name>heima</param-name>
                  <param-value>java</param-value>
      </init-param>
      
      public class ConfigServlet extends HttpServlet {
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              /*
                  使用父类的方法getServletConfig()方法,获取ServletConfig对象
                  ServletConfig是接口 org.apache.catalina.core.StandardWrapperFacade
                  接口的实现类(Tomcat重写)
               */
              ServletConfig config = getServletConfig();
              System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@63b85cd
              //获取Servlet名字
              String servletName = config.getServletName();
              System.out.println(servletName);//config
              //获取Servlet初始化参数
              String value = config.getInitParameter("heima");
              System.out.println(value);//340
          }
      }
      

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/92012289
今日推荐