ServletContext

一、简介

Web容器在启动的时候,它会为每个Web程序都创建一个对应的ServletContext对象,它代表了当前的Web应用。

二、作用

共享数据:在这个Servlet中保存的数据,可以在另外一个Servlet中拿到。
在这里插入图片描述

三、实例

3.1、通过ServletContext对象实现不同的Servlet的数据存取

1.步骤一:编写Store类实现数据的存放

package com.massimo.charpter11;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Store extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得Servlet上下文
        ServletContext context = this.getServletContext();

        //将一个数据保存在了ServletContext中,名字为userName,值“马西莫”
        context.setAttribute("userName","马西莫");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}


2.步骤二:编写Get类取出Store类存放的数据

package com.massimo.charpter11;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Get extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //取出数据
        String userName = (String)context.getAttribute("userName");
        System.out.println(userName);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.步骤三:在web.xml中注册Servlet

4.步骤四:配置Tomcat,运行程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、使用ServletContext对象获取初始化参数

1.步骤一:在web.xml中配置初始化参数

<!-- 在web-app中配置初始化参数-->
  <context-param>
    <param-name>url</param-name>
    <param-value>localhost:8080/massimo</param-value>
  </context-param>

2.步骤二:编写GetInitParameter类获取初始化参数

package com.massimo.charpter11;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class GetInitParameter extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //获取初始化参数
        String url = context.getInitParameter("url");
        PrintWriter writer = resp.getWriter();
        writer.println(url);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.步骤三:注册Servlet,运行程序
在这里插入图片描述

3.3、实现请求转发

1.步骤一:编写RequestForwarding类,实现转发

package com.massimo.charpter11;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestForwarding extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入了RequestForwarding");
        ServletContext context = this.getServletContext();
        //  /page是转发的路径,然后调用forward实现请求转发
        context.getRequestDispatcher("/page").forward(req , resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2.步骤二:编写Page类,作为转发的目的地

package com.massimo.charpter11;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class Page extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("转发成功!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.步骤三:注册Servlet

<servlet>
    <servlet-name>RequestForwarding</servlet-name>
    <servlet-class>com.massimo.charpter11.RequestForwarding</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RequestForwarding</servlet-name>
    <url-pattern>/forward</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>Page</servlet-name>
    <servlet-class>com.massimo.charpter11.Page</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Page</servlet-name>
    <url-pattern>/page</url-pattern>
  </servlet-mapping>

4.步骤四:运行程序
在这里插入图片描述
在这里插入图片描述

3.4、读取资源文件

1.步骤一:建立properties文件,要求不能超出main目录,应为代码就在main目录下
在这里插入图片描述
2.步骤二:创建GetPropertiesFile类读取资源文件

package com.massimo.charpter11;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class GetPropertiesFile extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //通过context获取输入流对象
        InputStream in = context.getResourceAsStream("/WEB-INF/classes/bb.properties");
        //创建Properties对象
        Properties prop = new Properties();
        //通过prop对象加载输入流
        prop.load(in);
        //获取Properties文件数据
        String userName = prop.getProperty("userName");
        String password = prop.getProperty("password");
        resp.getWriter().println(userName + ":" + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注意:getResourceAsStream()的参数是文件的相对路径,具体路径参照下图。
在这里插入图片描述
可能出现的问题: 项目src下的配置文件没有同步至target。

解决方法:在文件都标明的情况下,在pom.xml中添加如下标签。

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.yml</include>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.yml</include>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
        <include>**/*.conf</include>
      </includes>
      <filtering>false</filtering>
    </resource>
    <resource>
      <directory>lib</directory>
      <includes>
        <include>**/*.jar</include>
      </includes>
    </resource>
  </resources>
</build>

3.步骤三:注册Servlet,运行程序
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值