JavaWeb学习-Servlet系列-8-ServletContext作为域对象和获取全局配置信息

继续学习Servlet的知识,这篇来学习ServletContext接口。在一个web服务器中,一个应用只能有一个ServletContext对象,这个对象就代表当前整个应用。ServletContext主要有这几个功能:作为域对象,多个Servlet之间共享数据;获取全局配置信息;第三个应用就是获取资源路径。本篇我们来学习下第一个功能,作为域对象,能让多个Servlet之间共享数据。

1.项目准备

创建一个web动态项目,注意勾选创建web.xml文件,然后新建两个Servlet类继承HttpServer. 然后在web.xml中给Server1和Sevlet2配置映射。

ServletDemo1.java

package com.anthony.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo1 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//调用GenericServlet类中的getServletContext()方法得到ServletContext对象
		ServletContext appliction = this.getServletContext();
		//向ServletContext对象中添加一个键值对
		appliction.setAttribute("Name", "Anthony");
	}

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

}

ServletDemo2.java

package com.anthony.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo2 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到属性Name的value
		String name = (String) this.getServletContext().getAttribute("Name");
		System.out.println(name);
	}

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

}

web.xml配置两个servlet映射。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <servlet>
    <servlet-name>servletDemo1</servlet-name>
    <servlet-class>com.anthony.servlet.ServletDemo1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servletDemo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>servletDemo2</servlet-name>
    <servlet-class>com.anthony.servlet.ServletDemo2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servletDemo2</servlet-name>
    <url-pattern>/demo2</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2.发布和测试

.在Eclipse上的server tab重新发布到服务器,然后浏览器开两个tab,分别打开下面url

http://localhost:8080/Servlet01/demo1

http://localhost:8080/Servlet01/demo2

运行第一个就运行了ServletDemo1中的appliction.setAttribute("Name", "Anthony");

运行第二个就执行了ServletDemo2中的String name = (String) this.getServletContext().getAttribute("Name");

所以Eclipse上日志控制台输出是:Anthony

这个就证明了ServletContext对象作为域对象,可以让多个Servlet对象之间共享数据。

 

获取全局配置信息

解释以下在web.xml中什么是全局配置信息,什么是局部配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  
  <!-- 添加全局配置信息, 在servlet标签里面是每个servlet对象自己的局部变量信息 -->
  <context-param>
  	<param-name>encoding</param-name>
  	<param-value>GBK</param-value>
  </context-param>
  
  <servlet>
    <servlet-name>servletDemo3</servlet-name>
    <servlet-class>com.anthony.servlet.ServletDemo3</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servletDemo3</servlet-name>
    <url-pattern>/demo3</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

上面分别又一组全局配置信息(context-param标签范围) 和局部配置信息(servlet标签范围),本篇演示ServletContext获取context-parma标签内的全局配置信息

package com.anthony.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String encode = this.getServletContext().getInitParameter("encoding");
		System.out.println(encode);
	}

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

重新部署到服务器,然后测试浏览器打开地址http://localhost:8080/Servlet01/demo3

信息: Server startup in 559 ms
GBK

由于前面我们学习过获取servlet中局部变量的方法,所以这里后去全局变量就很简单。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值