零基础入门JavaWeb——Servlet知识

一、Servlet的概念

1.1 什么是Servlet?

Servlet是运行在服务端的Java小程序,是SUN公司提供一套定义动态资源规范。

1.2 Servlet的作用

用来接收、处理客户端请求、响应给浏览器的动态资源。在整个Web应用中,Servlet主要负责处理请求、协调调度功能。可以把Servlet称为Web应用中的控制器

1.3 Servlet入门

目标

在页面上点击超链接,由Servlet处理请求,并返回一个响应字符串:Hello,T am Servlet。

实现步骤

1、 创建Web module
2、 创建html页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <a href="http://localhost:8080/web05/demo01">访问ServletDemo01</a>
</body>
</html>
3、创建ServletDemo01类
public class ServletDemo01 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("ServletDemo01对象被创建");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("ServletDemo01接收到了客户端的请求...");

        // 向客户端响应一个字符串
        servletResponse.getWriter().write("Hello,T am Servlet");
    }

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

    @Override
    public void destroy() {
        System.out.println("ServletDemo01对象被销毁");
    }
}

4、在web.xml中配置ServletDemo01
<!--    配置ServletDemo01的映射路径-->
    <servlet>
<!--        给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写-->
        <servlet-name>servletDemo01</servlet-name>
<!--        要进行配置的Servlet的全限定名-->
        <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class>
<!--        配置它提前到服务器启动的时候创建,数字只代表优先级-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
<!--        和上面的Servlet-name是一致的-->
        <servlet-name>servletDemo01</servlet-name>
<!--        就是要给ServletDemo01配置的映射路径-->
<!--        一定要加/-->
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>

二、Servlet的生命周期

Servlet的生命周期就是Servlet从创建到销毁的过程。

**创建:**默认情况下是在第一次有请求访问该Servlet实例的时候才会创建该Servlet对象。

**销毁:**在服务器关闭,或者当前项目从服务器中移除的时候会销毁当前项目中的所有Servlet对象。

2.1 Servlet的生命周期方法

在Servlet的生命周期中必然会经历的方法称之为Servlet的生命周期方法,总共包含三个方法:init、service、destory。

2.1.1 init方法

该方法会在Servlet实例对象被创建出来之后执行,可以在该方法中获取当前Servlet的初始化参数,以及进行一些读取配置文件之类的操作。

2.1.2 service方法

该方法会在Servlet实例对象每次接收到请求的时候均执行,可以在该方法中接收、处理请求,以及将客户端需要的数据响应给客户端。

2.1.3 destroy方法

该方法会在Servlet实例对象销毁之前执行,可以在该方法中做一些资源回收、释放、关闭等等操作。

2.2 配置Servlet提前创建

有时候需要在Servlet创建的时候做一些资源加载等等耗时操作,所以如果Servlet在第一次接收请求的时候才创建的话必然会影响用户的访问速度,所以此时需要让Servlet提前创建,将Servlet的创建提前到服务器启动的时候。

通过修改web.xml中Servlet的配置可以实现:

<!--    配置ServletDemo01的映射路径-->
    <servlet>
<!--        给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写-->
        <servlet-name>servletDemo01</servlet-name>
<!--        要进行配置的Servlet的全限定名-->
        <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class>
<!--        配置它提前到服务器启动的时候创建,数字只代表优先级-->
        <load-on-startup>1</load-on-startup>
    </servlet>

2.3 ServletConfig的介绍

2.3.1 接口方法介绍

方法名作用
getServletName()获取<servlet-name>HelloServlet</servlet-name>定义的Servlet名称
getServletContext()获取ServletContext对象
getInitParameter()获取配置Servlet时设置的初始化参数,根据名字获取值
getInitParameterNames()获取所有初始化参数名组成的Enumeration对象

2.3.2 获取Servlet的初始化参数

可以在web.xml中对Servlet配置初始化参数,可以在Servlet的init方法中获取配置的初始化参数的值。

代码如下:

<!--    配置ServletDemo01的映射路径-->
    <servlet>
<!--        给要配置的Servlet去一个别名,一般建议就是当前Servlet的名字首字母小写-->
        <servlet-name>servletDemo01</servlet-name>
<!--        要进行配置的Servlet的全限定名-->
        <servlet-class>com.hxl.servlet.ServletDemo01</servlet-class>

<!--        添加一个初始化参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>huangxinglin</param-value>
        </init-param>

<!--        配置它提前到服务器启动的时候创建,数字只代表优先级-->
        <load-on-startup>1</load-on-startup>
    </servlet>
package com.hxl.servlet;

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

/**
 * 使用Servlet的时候可能会遇到一个问题:没有可以使用的Servlet接口
 *  因为Servlet接口不是JDK中的,需要导入额外的jar包才能使用Servlet
 *
 *  编写Servlet的步骤:
 *   1. 编写一个类实现Servlet接口,并重写service()方法接收和处理请求
 *   2. 给Servlet配置映射路径:
 *      2.1 方式一:使用xml配置(重点掌握)
 *      2.2 方式二:使用注解配置(了解)
 *
 *   3. Servlet的生命周期
 *      3.1 创建:Tomcat在第一次接收到访问该Servlet的请求的时候,会创建出该Servlet的对象
 *      3.2 销毁:Tomcat服务器关闭的时候销毁它里面所有的Servlet
 *
 *   4. Servlet的生命周期方法:
 *      4.1 init()方法:该方法会在Servlet对象被创建出来之后执行;通常在该方法中做一些初始化工作或者耗时工作
 *      4.2 service()方法:该方法会在该Servlet每次接收到请求的时候执行;
 *      4.3 destroy()方法:该方法会在该Servlet对象被销毁之前执行
 *
 *   5. 将Servlet的创建时机提前到服务器启动的时候,在web.xml中配置
 */

public class ServletDemo01 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        // 使用ServletConfig对象读取初始化参数
        String username = servletConfig.getInitParameter("username");
        System.out.println("读取到的username是:"+username);

        System.out.println("ServletDemo01对象被创建");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("ServletDemo01接收到了客户端的请求...");
    }

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

    @Override
    public void destroy() {
        System.out.println("ServletDemo01对象被销毁");
    }
}

2.4 Servlet的三种映射路径配置

Servlet的映射路径是提供一个让别人能够访问该Servlet的路径,里如Servlet的映射路径是"/test",那么在浏览器上访问该Servlet的路径就是http://localhost:8080/项目部署名/test

一个Servlet可以配置多个映射路径,但是多个Servlet不能配置相同的映射路径

2.4.1 映射路径的分类

1、完全路径匹配

访问当前Servlet的路径需要和配置的映射路径完全一致。

例如:Servlet的配置是/demo1,访问该Servlet的时候的路径也必须是http://localhost:8080/项目部署名/demo1才可以访问到。

2、目录匹配

以/开始需要以*结束。

例如:
配置/*,访问的路径可以写成/任意字符串

配置/aa/*,访问的路径可写成/aa/任意字符串

3、 扩展名匹配

*开头,以.扩展名结束,能够匹配所有以.相同扩展名结尾的请求路径。

例如:
*.action:访问路径可以是任意字符串.action

三、ServletContext

服务器为其部署的每一个应用(项目)都创建了一个ServletContext对象。ServletContext属于整个项目,项目中的所有Servlet都可以共享同一个ServletContext对象。

3.1 、获取ServletContext的API

        // 获取ServletContext对象
        // 第一种获取ServletContext对象的方法
        ServletContext servletContext = getServletContext();

        // 第二种获取ServletContext对象的方法
        ServletContext servletContext1 = getServletConfig().getServletContext();

3.2、 ServletContext获取全局的初始化参数

1、在web.xml中配置Web应用级别的初始化参数
    <context-param>
        <param-name>username</param-name>
        <param-value>machao</param-value>
    </context-param>
2、在Servlet的doGet方法中获取全局参数
        // ServletContext的作用一:获取全局的初始化参数
        // 获取全局的初始化参数
        String username = getServletContext().getInitParameter("username");
        System.out.println("在ServletDemo04中获取全局的初始化参数username=" + username);

3.3、ServletContext作为全局的域对象

域对象就是在一定的作用域范围内进行数据共享的对象,ServletContext作为全局域对象可以在整个项目的所有动态资源中进行数据共享。

示例如下:

		ServletContext servletContext = getServletContext();
        String str ="刘备";
        // 将str存储到ServletContext中
        servletContext.setAttribute("str",str);
        // 获取域对象ServletContext中存放的数据
        String str = (String) getServletContext().getAttribute("str");
        System.out.println("在ServletDemo03中获取域对象中的str="+str);

3.4、 获取资源的真实路径

        String realPath = servletContext.getRealPath("img/前端.jpeg");

        System.out.println(realPath);

是要使用了ServletContext

学海无涯苦作舟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值