javaWeb学习之-2后端基础-3.ServletConfig&&ServletContext

3.ServletConfig&&ServletContext总览

在这里插入图片描述

javaWeb学习笔记思维导图

思维导图链接

参考狂神说javaweb教程笔记

参考尚硅谷javaWeb教程笔记

问题扩展与汇总:

4. ServletCofig类

4.1 何时创建

  • Servlet 程序默认是第一次访问的时候创建,

  • ServletConfig 是每个 Servlet 程序创建时, 就创建一个对应的 ServletConfig 对象。

4.2 一般完成的功能

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

  • 2、 获取初始化参数 init-param

  • 3、 获取 ServletContext 对象

web.xml配置文件

<servlet>
    <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
    <servlet-name>HelloServlet1</servlet-name>
    <!--servlet-class 是 Servlet 程序的全路径名-->
    <servlet-class>com.sheng.HelloServlet1</servlet-class>

    <init-param>
        <!--是参数名-->
        <param-name>username</param-name>
        <!--是参数值-->
        <param-value>sheng</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 中的代码:

public class HelloServlet1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 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());
    }

4.3 注意:继承的是Servlet接口init方法中的参数

  • 如果要是继承HttpSetvlet抽象类,重写Init方法时,要传入父接口的init方法中的ServletConfig对象

在这里插入图片描述

5. ServletContext类

1.是什么,何时创建

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

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

  • 3、 ServletContext 对象是一个域对象

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

什么是域对象?

  • 域对象, 是可以像 Map 一样存取数据的对象, 叫域对象。
  • 这里的域指的是存取数据的操作范围, 整个 web 工程。
在这里插入图片描述

2. 完成的功能:

2.1 共享数据 (像 Map 一样存取数据 )
  • 我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;

示例:注意顺序不能错了,先访问Servlet2,往ServlentContext中放数据,再访问Servlet3,读数据)

  • 在Servlet2中存数据
public class HelloServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 测试ServletContext
        String username = "sheng"; // 数据
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("username", username); // 将数据以map形式保存在servletContext中
    }
}
  • 创建Servlet3,在Servlet3中读取
public class HelloServlet3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        
        // 测试ServletContext
        ServletContext servletContext = this.getServletContext();
        writer.print(servletContext.getAttribute("username"));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
  • web.xml中注册,测试
在这里插入图片描述
2.2 获取初始化参数

与ServleConfig此功能的不同在于:

  • config只能是当前类拿到当前类配置中的初始化信息
  • 而context配置的初始化信息不依赖于某个类,故,所有web下的类都能拿到初始化信息

示例:

  • 初始化参数配置
<!--    初始化配置信息-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/test</param-value>
    </context-param>
  • Servlet2,Servlet3分别获取
// 测试ServletContext获取初始化信息的功能
writer.print(servletContext.getInitParameter("url"));
  • 测试结果:
在这里插入图片描述
2.3 请求转发

请求转发与重定向的区别:

  • 请求转发是A通过中间B获取C的信息
  • 重定向是三角关系,A请求B,B给了C的地址,让A去请求C
在这里插入图片描述

示例:

// 测试ServletContext的请求转发功能
System.out.println("进入了Servlet4!");
ServletContext servletContext = getServletConfig().getServletContext();
//RequestDispatcher requestDispatcher = context.getRequestDispatcher("/hello3"); 转发的请求路径
//requestDispatcher.forward(req,resp); 调用forward实现请求转发;
servletContext.getRequestDispatcher("/hello3").forward(req, resp); // 转发/hello3路径网页的请求
  • 测试结果:
在这里插入图片描述
2.4 读取资源文件

Properties

  • 在java目录下新建properties
    在resources目录下新建properties
  • 发现:都被打包到了同一个路径下:classes,我们俗称这个路径为classpath:
在这里插入图片描述

context可以获取路径:

示例:

// 测试ServletContext的读取配置文件功能
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/sheng/java.properties");
Properties prop = new Properties();
prop.load(is);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
PrintWriter writer = resp.getWriter();
writer.write(user+":"+pwd);
// 测试ServletContext的获取路径的功能
writer.write("当前工程路径: " + getServletContext().getContextPath());
writer.write("工程部署的路径是: " + getServletContext().getRealPath("/"));

测试结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值