ServletContext

ServletContext,第1张

一、简介

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 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);
    }
}

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中配置初始化参数


  <context-param>
    <param-name>urlparam-name>
    <param-value>localhost:8080/massimoparam-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>RequestForwardingservlet-name>
    <servlet-class>com.massimo.charpter11.RequestForwardingservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>RequestForwardingservlet-name>
    <url-pattern>/forwardurl-pattern>
  servlet-mapping>
  
  <servlet>
    <servlet-name>Pageservlet-name>
    <servlet-class>com.massimo.charpter11.Pageservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>Pageservlet-name>
    <url-pattern>/pageurl-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/javadirectory>
      <includes>
        <include>**/*.ymlinclude>
        <include>**/*.propertiesinclude>
        <include>**/*.xmlinclude>
      includes>
      <filtering>falsefiltering>
    resource>
    <resource>
      <directory>src/main/resourcesdirectory>
      <includes>
        <include>**/*.ymlinclude>
        <include>**/*.propertiesinclude>
        <include>**/*.xmlinclude>
        <include>**/*.confinclude>
      includes>
      <filtering>falsefiltering>
    resource>
    <resource>
      <directory>libdirectory>
      <includes>
        <include>**/*.jarinclude>
      includes>
    resource>
  resources>
build>

3.步骤三:注册Servlet,运行程序

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/923091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存