(7)Servlet技术的使用(上篇)

1,Servlet 技术

2,ServletConfig 类

3,ServletContext 类

Servlet 技术

1,什么是 Servlet?

①、Servlet 是 JavaEE 规范之一。规范就是接口

②、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

③、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端

2,手动实现 Servlet 程序

①、编写一个类去实现 Servlet 接口

②、实现 service 方法,处理请求,并响应数据

③、到 web.xml 中去配置 servlet 程序的访问地址

  • 实现Servlet类需要准备的jar包 :
    在这里插入图片描述
  • Servlet 程序的示例代码:
public class ServletDemo implements Servlet {
    
    /**
     * service 方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet Demo 被访问了");
    }
  • web.xml
<!-- servlet标签给Tomcat配置Servlet程序 -->
<servlet>
    <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
    <servlet-name>ServletDemo</servlet-name>
    <!--servlet-class 是 Servlet 程序的全类名 -->
    <servlet-class>com.ServletDemo</servlet-class>
</servlet>
<!--servlet-mapping 标签给 servlet 程序配置访问地址 -->
<servlet-mapping>
    <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用 -->
    <servlet-name>ServletDemo</servlet-name>
    <!--url-pattern 标签配置访问地址 <br/>
    / 斜杠在服务器解析的时候,表示地址为: http://ip:port/ 工程路径 <br/>
    /demo 表示地址为: http://ip:port/ 工程路径 /demo <br/>
    -->
    <url-pattern>/demo</url-pattern>
</servlet-mapping>
  • 启动如下,便是成功
    在这里插入图片描述
  • 输入响应地址 http://localhost:8080/ServletTest/demo,成功被访问

在这里插入图片描述

3,Servlet 的生命周期

①、执行 Servlet 构造器方法

②、执行 init 初始化方法,第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。

③、执行 service 方法,第三步,每次访问都会调用。

④、执行 destroy 销毁方法,第四步,在 web 工程停止的时候调用。

  • Servlet加载——>实例化——>服务——>销毁

4,GET 和 和 POST 请求的分发处理

public class ServletDemo implements Servlet {

    /**
     * service 方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet Demo 被访问了");
        // 类型转换(因为它有 getMethod() 方法)
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取请求的方式
        String method = httpServletRequest.getMethod();
        if ("GET".equals(method)) {
            doGet();
        } else if ("POST".equals(method)) {
            doPost();
        }
    }

    public void doGet(){
        System.out.println("get  请求");
    }

    public void doPost(){
        System.out.println("post  请求");
    }

5, 通过继承 HttpServlet 实现 Servlet 程序

  • 一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

①、编写一个类去继承 HttpServlet 类

②、根据业务需要重写 doGet 或 doPost 方法

③、到 web.xml 中的配置 Servlet 程序的访问地址

  • Servlet 类的代码:
public class ServletDemo 2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
        System.out.println("HelloServlet2 的 的 doGet  方法");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
        System.out.println("HelloServlet2 的 的 doPost  方法");
    }
  • web.xml 中的配置:
    <servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>com.ServletDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/demo2</url-pattern>
    </servlet-mapping>

6, Servlet 类的继承体系

在这里插入图片描述

ServletConfig 类

1, ServletConfig 类的概述

  • ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
  • Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
  • Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。

2, ServletConfig 类的三大作用

①、可以获取 Servlet 程序的别名 servlet-name 的值

②、获取初始化参数 init-param

③、获取 ServletContext 对象

  • web.xml 中的配置:
<servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>com.ServletDemo</servlet-class>
    <!--init-param 是初始化参数 -->
    <init-param>
        <!-- 是参数名 -->
        <param-name>username</param-name>
        <!-- 是参数值 -->
        <param-value>root</param-value>
    </init-param>
    <!--init-param 是初始化参数 -->
    <init-param>
        <!-- 是参数名 -->
        <param-name>url</param-name>
        <!-- 是参数值 -->
        <param-value>jdbc:mysql://localhost:3306/test</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/demo</url-pattern>
</servlet-mapping>
  • ServletDemo类
public class ServletDemo extends HttpServlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init  初始化方法");
        // 1 、可以获取 Servlet 程序的别名 servlet-name 的值
        System.out.println("HelloServlet  程序的别名是:" + servletConfig.getServletName());
        // 2 、获取初始化参数 init-param
        System.out.println(" 初始化参数 username  的值是;" + servletConfig.getInitParameter("username"));
        System.out.println(" 初始化参数 url  的值是;" + servletConfig.getInitParameter("url"));
        // 3 、获取 ServletContext 对象
        System.out.println(servletConfig.getServletContext());
    }

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("重写init  初始化方法做了新的工作");
    }
ServletContext 类

1, 什么是 ServletContext?

①、ServletContext 是一个接口,它表示 Servlet 上下文对象

②、一个 web 工程,只有一个 ServletContext 对象实例。

③、ServletContext 对象是一个域对象。

④、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

  • 什么是域对象?
    域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。
 存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()

2,ServletContext 类的四个作用

①、获取 web.xml 中配置的上下文参数 context-param

②、获取当前的工程路径,格式: /工程路径

③、获取工程部署后在服务器硬盘上的绝对路径

④、像 Map 一样存取数据

ServletDemo :

public class ServletDemo extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 、获取 web.xml 中配置的上下文参数 context-param
        ServletContext context = getServletConfig().getServletContext();
        String username = context.getInitParameter("username");
        System.out.println("context-param  参数 username  的值是:" + username);
        System.out.println("context-param  参数 password  的值是:" + context.getInitParameter("password"));
        // 2 、获取当前的工程路径,格式 : / 工程路径
        System.out.println( " 当前工程路径:" + context.getContextPath() );
        // 3 、获取工程部署后在服务器硬盘上的绝对路径
        /**
         * / 斜杠被服务器解析地址为 :http://ip:port/ 工程名 / 映射到 IDEA 代码的 web 目录 <br/>
        */
        System.out.println(" 工程部署的路径是:" + context.getRealPath("/"));
        System.out.println(" 工程下 css  目录的绝对路径是:" + context.getRealPath("/css"));
    }
  • web.xml 中的配置:
<!--context-param 是上下文参数 ( 它属于整个 web 工程 )-->
<context-param>
    <param-name>username</param-name>
    <param-value>context</param-value>
</context-param>
<!--context-param 是上下文参数 ( 它属于整个 web 工程 )-->
<context-param>
    <param-name>password</param-name>
    <param-value>root</param-value>
</context-param>
  • ServletContext 像 Map 一样存取数据,ContextServlet1 代码:
public class ContextServlet1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取 ServletContext 对象
        ServletContext context = getServletContext();
        System.out.println(context);
        System.out.println(" 保存之前: Context1 取 获取 key1  的值是:"+ context.getAttribute("key1"));
        context.setAttribute("key1", "value1");
        System.out.println("Context1  中获取域数据 key1  的值是:"+ context.getAttribute("key1"));
    }

下一章,(8)Servlet技术的使用(下篇)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值