<7>ServletContext 类

本文介绍了ServletContext接口在Web应用中的核心作用,包括配置参数读取、工程路径获取、文件路径定位以及作为域对象的数据存储。通过示例展示了如何在Servlet中操作这些功能。

1.ServletContext 类简介

  • 1、ServletContext 是一个接口,它表示 Servlet 上下文对象
  • 2、一个 web 工程,只有一个 ServletContext 对象实例。
  • 3、ServletContext 对象是一个域对象。
  • 4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

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

2.ServletContext 类的四个作用

  • 1、获取 web.xml 中配置的上下文参数 context-param
  • 2、获取当前的工程路径,格式: /工程路径
  • 3、获取工程部署后在服务器硬盘上的绝对路径
  • 4、像 Map 一样存取数据

2.1 获取XML配置的上下文参数、文件工程路径、绝对路径

例如Servlet在XML中的配置为:

<!--context-param 是上下文参数(它属于整个 web 工程)-->
    <context-param>
        <param-name>username</param-name> 
        <param-value>abc</param-value>
    </context-param>

Servlet 中的代码:

public class HelloServlet03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = getServletConfig().getServletContext();
        // 1、获取 web.xml 中配置的上下文参数 context-param
        String username = context.getInitParameter("username");
        System.out.println("context-param 参数 username 的值是:" + username);

        // 2、获取当前的工程路径,格式: /工程路径
        System.out.println( "当前工程路径:" + context.getContextPath() );

        // 3、获取工程部署后在服务器硬盘上的绝对路径
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));

    }

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

    }
}

在这里插入图片描述

2.2 像 Map 一样存取数据

Servlet 中的代码:

public class HelloServlet03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = getServletConfig().getServletContext();
        // 1、获取 web.xml 中配置的上下文参数 context-param
        String username = context.getInitParameter("username");
        System.out.println("更改前的username:" + username);
		//2、设置 web.xml 中配置的上下文参数 context-param
        context.setAttribute("username", "edf");
        System.out.println("更改后的username:" + context.getAttribute("username"));

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

    }
}

实验结果:
在这里插入图片描述

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ssm</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>ssm</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>6.2.6</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.4.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.25</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.18</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.19.0</version> </dependency> </dependencies> </project> public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } } 为什么我的WebAppInitializer没加载上
06-21
messageForm.jsp <%@ page language="java" contentType="text/html; charset=utf-8"%> <html> <body> <% // 获取application中的访问计数器 Integer visitCount = (Integer) application.getAttribute("visitCount"); if(visitCount == null) visitCount = 0; visitCount++; application.setAttribute("visitCount", visitCount); %> <h2>留言板(总访问量:<%=visitCount%>)</h2> <form action="processMessage.jsp" method="post"> 姓名:<input type="text" name="username" /><br><br> 留言:<textarea name="message" rows="4" cols="50"></textarea><br><br> <input type="submit" value="提交留言" /> </form> </body> </html> processMessage.jsp <%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ page import="java.util.List, java.util.ArrayList" %> <html> <body> <% // 设置字符编码 request.setCharacterEncoding("utf-8"); // 使用request对象获取表单数据 String username = request.getParameter("username"); String message = request.getParameter("message"); // 验证数据 if(username == null || username.trim().equals("") || message == null || message.trim().equals("")) { // 使用response对象重定向 response.sendRedirect("messageForm.jsp"); return; } // 使用session对象存储用户信息 session.setAttribute("user", username); // 使用application对象存储留言 List<String> messages = (List<String>) application.getAttribute("messages"); if(messages == null) { messages = new ArrayList<String>(); } messages.add("[" + new java.util.Date() + "] " + username + ": " + message); application.setAttribute("messages", messages); %> <h2>留言提交成功!</h2> <p>3秒后自动跳转到留言列表...</p> <% // 设置自动跳转 response.setHeader("Refresh", "3;url=messageList.jsp"); %> </body> </html> messageList.jsp <%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ page import="java.util.List" %> <html> <head> <title>留言列表</title> </head> <body> <h2>留言列表</h2> <% // 使用application对象获取留言列表(指定泛型) List<String> messages = (List<String>) application.getAttribute("messages"); if(messages == null || messages.size() == 0) { // 使用out对象输出信息 out.println("<p>暂无留言</p>"); } else { // 使用增强for循环输出所有留言 out.println("<ul>"); for(String msg : messages) { out.println("<li>" + msg + "</li>"); } out.println("</ul>"); } %> <br> <a href="messageForm.jsp">返回留言板</a> </body> </html> 使用了哪些JSP对象
最新发布
09-27
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="MySqlConnString" connectionString="Database=falink300;Data Source=localhost;User ID=root;Password=8888" /> <add name="MyDBType" connectionString="mysql" /> <add name="MyXmlPathString" connectionString="D:\config\File\" /> </connectionStrings> <appSettings> <add key="version" value="4.4.2"></add> <add key="IsLaunchComServer" value="False" /> <add key="FAServiceName" value="FAServer" /> <add key="IsWindowsService" value="False" /> <add key="IsLaunchRemotingServer" value="True" /> <add key="FAConfigurationURL" value="" /> <add key="ConsoleRemotingURL" value="" /> <add key="RecipeApproveLevel" value="1" /> <add key="ctcserver" value="A"></add> <add key="faserver" value="A"></add> <add key="bridgeport" value="9002"></add> <add key="bridgeserver" value="bridgeserver"></add> <add key="RecipeApproveLevel" value="2"></add> <add key="bindTo" value="127.0.0.1"></add> <add key="pjobType" value="default"></add> <add key="Fix2971" value="False"></add> <add key="SubstrateProcessStateOffset" value="1"></add> <add key="commandtype" value="1"></add> <add key="CheckDeviceID" value="False"></add> <add key="ConnectWithoutS1F13" value="False"></add> <add key="EventFireToCTC" value="False"></add> <add key="SpoolMsg" value="6:1,11;"></add> <add key="MaxSpooledCount" value="50"></add> <add key="Heartbeat" value="LinkTest"></add> <add key="EstablishByHeartbeat" value="False"></add> <add key="DownloadRecipeFormat" value="string"></add> <!--<add key="seteventidoffset" value="400000000"></add>--> <!--Chinese: utf-8; English: us-ascii--> <add key="ChineseEncoding" value="us-ascii"></add> <add key="ThreadPoolMinCount" value="30"></add> <add key="S1F3DelayTime" value="1000"></add> <add key="nicid" value="1"></add> <add key="00000000-0000-0000-0000-000000000001" value="3"></add> <add key="00000000-0000-0000-0000-000000000002" value="3"></add> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /> </startup> </configuration>解释这个配置文件,每一行的作用
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值