`

ServletContext对象常用操作

 
阅读更多

 

 

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

 

操作一:获取全局配置参数

有两种方式获取ServletContext对象,第一种是通过ServletConfig对象获取

super.getServletConfig().getServletContext();

 第二种方式是直接获取,GenericServlet中提供了这个方法,实际上也是调用哪个了ServletConfig

 @Override
    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }

 通过ServletContext获取全局配置参数

public class ParamContext extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String param = getServletContext().getInitParameter("param");
		System.out.println(param);
	}
}

 web.xml中的配置,这种全局参数所有Servlet都可以访问到

<context-param>
		<param-name>param</param-name>
		<param-value>I'm param</param-value>
	</context-param>

 

 

操作二:获取文件的MIME类型

Serlvet会读取Tomcat/conf/web.xml中所配置MIME类型,文件下载时会用到

public class MIMEContext extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String doc = super.getServletContext().getMimeType("file.doc");
		String jpg = super.getServletContext().getMimeType("file.jpg");
		String txt = super.getServletContext().getMimeType("file.txt");
		System.out.println(doc + "\t" + jpg + "\t" + txt);
	}
}

 

操作三:日志信息

Serlvet容器启动时会在console中输出大量信息,通过SerlvetContext也可以添加自己的日志信息

public class ParamContext extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		super.getServletConfig().getServletContext();
		String param = getServletContext().getInitParameter("param");
		System.out.println(param);
	}

 

操作四:Servlet间共享数据

SerlvetContext对象本生代表着属性范围,可以通过Servlet对象调用Attribute设置参数的方式,在多个Servlet间共享数据

编写一个Servlet统计访问该Servlet的次数

public class VisitContext extends HttpServlet {

	@Override
	public void init() throws ServletException {
		super.getServletContext().setAttribute("visit", 0);
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		ServletContext context = super.getServletContext();
		Integer count = (Integer) context.getAttribute("visit");
		count++;
		context.setAttribute("visit", count);
	}
}

 在另外一个Servlet中获取,该访问次数

public class ShareContext extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		Integer count = (Integer) super.getServletContext().getAttribute("visit");
		System.out.println(count);
	}
}

 

操作五:Web工程中获取绝对路径

在Servlet中读取文件必须使用磁盘的绝对路径,在src下建议个文件,使用Serlvet获取该路径

public class ResourceContext extends HttpServlet {
	protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException {
		String file = "/WEB-INF/classes/flie1.txt";
		String realPath = super.getServletContext().getRealPath(file);
		System.out.println(realPath);
	};
}

如果只是获取classpath下的文件,可以使用类加载器,Hibernate框架加载文件就是用这种方法,和ServletContext完全解耦,getReal()、getFile()一样

public class ResourceContext extends HttpServlet {
	protected void doGet(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException {
		String file = "/WEB-INF/classes/file1.txt";//src下
		System.out.println(ResourceContext.class.getResource(file));
		System.out.println(ResourceContext.class.getResource(file).getPath());
		System.out.println(ResourceContext.class.getResource(file).getFile());
	}
}

 工程下的文件无法获取,WebRoot以外的文件不会发布到Tomcat中

getServletContext().getRealPath("/2.txt");//WebRoot下
getServletContext().getRealPath("/WEB-INF/3.txt");//WEB-INF下
getServletContext().getRealPath("/WEB-INF/classes/4.txt");//src下

 

操作六:读取properties文件

public class ServletTest2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/you/servlet/db.properties");
        Properties pro = new Properties();//Map形式
        pro.load(in);
        
        String url = pro.getProperty("url");
        String username = pro.getProperty("username");
        String password = pro.getProperty("password");
        
        System.out.println(url + " " + username + " " + password);
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    jsp内置对象的用法

    config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象) 序号 方 法 说 明 ...

    超级有影响力霸气的Java面试题大全文档

    忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 28、short s1 = 1; s1 =...

    EL表达式的详细使用

    JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符: 术语 定义 算术型 +、-(二元)、*、/、div、%、mod、-(一元) 逻辑型 and、&&、or、||、!、not 关系型 ==、eq、!=、ne、、gt、、le、&gt;...

    JSP监听器用法分析

    本文实例讲述了JSP监听器用法。分享给大家供大家参考...1. ServletContextAttributeListener监听对ServletContext属性的操作。比如增加,删除,修改属性。 2. ServletContextListener监听ServletContext。当创建Servle

    java web 视频、电子书、源码(李兴华老师出版)

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    李兴华Java Web开发实战经典(高清版) Part2

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    java 面试题 总结

    忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 25、short s1 = 1; s1 =...

    EL表达式 (详解)

    2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组 值.pageScope表示页面范围的变量....

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和...

    Spring中文帮助文档

    11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction类 11.7. 参数和数据处理的基本原则 11.7.1. 为参数设置...

    Spring API

    11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction类 11.7. 参数和数据处理的基本原则 11.7.1. 为参数设置...

Global site tag (gtag.js) - Google Analytics