ServletContext对象的使用

ServletContext对象在web容器启动时为每个web应用创建,用于数据共享、获取初始化参数、请求转发和读取资源文件。例如,Servlet之间可以通过它来传递数据,获取如数据库连接URL的初始化参数,实现请求从一个Servlet到另一个Servlet的转发,并能读取类路径下的配置文件,如da.properties,从而获取用户名和密码等信息。

ServletContext对象的应用

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

1. 共享数据
我在这个Servlet当中的数据可以在另一个Servlet当中拿到

当前Servlet放的数据

//this.getServletContext():Servlet上下文
        ServletContext context = this.getServletContext();
        String username = "胡某人";
        context.setAttribute("username",username);

需要拿数据的另一个Servlet

ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字:"+username);

2. 获取初始化参数
配置的web应用的初始化参数

<context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>

在servlet中拿到web应用中的初始化参数

 ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        resp.getWriter().print(url);

结果为

在这里插入图片描述

3. 请求转发
Servlet将请求转发给另一个Servlet

需要请求转发的Servlet

 ServletContext context = this.getServletContext();
        //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/serv");//参数为要转发到的servlet路径
        //requestDispatcher.forward(req,resp);//调用forward实现请求转发
        context.getRequestDispatcher("/serv").forward(req,resp);

4. 读取资源文件 Properties

  • 在Java目录下新建properties
  • 在resources目录下新建properties

发现都被打包到了同一路径下:classes,俗称类路径classpath

需要一个文件流

//在target的web应用的classes里找到配置文件
InputStream asStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/da.properties");
Properties prop = new Properties();
prop.load(asStream);
String user = prop.getProperty("username");
String pwd =  prop.getProperty("password");
resp.getWriter().print(user+":"+pwd);

配置文件

username=root
password=123456

结果

在这里插入图片描述

### ServletContext对象的定义与作用 #### 1. 定义 ServletContext对象代表一个Web应用的全局上下文环境,它封装了整个Web应用的信息。在一个Web应用中,无论存在多少个Servlet实例,都只有一个ServletContext对象实例[^1]。 #### 2. 功能与作用 - **获取Web应用配置参数**:通过`getInitParameter(String name)`方法可以获取在`web.xml`文件中为整个Web应用配置的初始化参数。 - **共享数据**:多个Servlet可以通过ServletContext对象共享数据。例如,使用`setAttribute(String name, Object value)`方法存储数据,并通过`getAttribute(String name)`方法获取数据[^3]。 - **资源访问**:提供对Web应用中的资源(如HTML文件、图片、配置文件等)的访问支持。例如,使用`getResource(String path)`或`getResourceAsStream(String path)`方法读取资源文件。 - **日志记录**:通过`log(String message)`方法记录日志信息,便于调试和监控应用运行状态。 - **应用生命周期管理**:ServletContext对象可以感知Web应用的启动和关闭事件,从而执行相应的初始化或清理操作。 #### 3. 获取方式 可以通过以下两种方式获取ServletContext对象: ```java // 通过request对象获取 ServletContext sc1 = request.getServletContext(); // 通过HttpServlet类获取 ServletContext sc2 = this.getServletContext(); ``` 这两种方式获取的ServletContext对象是同一个实例[^3]。 #### 4. 示例代码 以下是一个简单的示例,展示如何使用ServletContext对象获取Web应用的初始化参数并存储共享数据: ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取ServletContext对象 ServletContext context = getServletContext(); // 获取Web应用的初始化参数 String loginId = context.getInitParameter("loginid"); String loginPwd = context.getInitParameter("loginpwd"); // 输出初始化参数 resp.getWriter().println("Login ID: " + loginId); resp.getWriter().println("Login Password: " + loginPwd); // 存储共享数据 context.setAttribute("msg", "登录成功!"); // 获取共享数据 String msg = (String) context.getAttribute("msg"); resp.getWriter().println("Message: " + msg); } } ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值