`

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内置对象归纳与总结

    application对象是javax.servlet.ServletContext类型的对象,主要用于存储应用程序的全局信息,例如数据库连接、应用程序的配置信息等。 pageContext对象是javax.servlet.jsp.PageContext类型的对象,主要用于提供...

    JSP的九个内置对象及四个作用域

    Application 对象是javax.servlet.ServletContext类型,“Application”对象负责提供应用程序在服务器运行中的一些全局信息,常用的方法有getMimeType和getRealPath等,servlet的循环通过调用getServletConfig()....

    jsp隐含对象详细解析

    常用的`request`对象方法包括`getParameter()`、`getParameterNames()`等。 ```java String username = request.getParameter("username"); ``` 3. **response响应对象** - **类型**:`javax.servlet....

    JSP常用内置对象[借鉴].pdf

    - **application对象**(javax.servlet.ServletContext):代表整个Web应用程序,可用于共享全局信息,如`application.setAttribute("key", "value")`设置全局属性。 3. **Servlet对象**: - **page对象**:代表...

    j2ee 九大内置对象及其方法详细说明

    `pageContext` 对象提供了对页面的属性、请求、响应、异常等进行操作的方法。 **常用方法:** - **Object getAttribute(String name)**: 获取指定名称的属性。 - **void setAttribute(String name, Object value)**...

    javaweb期末考试试题及答案.docx

    - ServletContext对象是JavaWeb开发中用于共享整个Web应用程序范围内的信息的接口。 - 在一个Web应用中,只有一个全局的ServletContext对象,它可以在Web应用的所有Servlet之间共享数据。 - ServletContext提供了...

    JSP隐含对象.ppt

    这些对象使得开发者能够方便地与Servlet环境进行交互,执行诸如获取客户端数据、向客户端发送数据、控制数据的作用域以及处理异常等操作。 1. **隐含对象概述** JSP隐含对象是在JSP页面中可以直接使用的预定义对象...

    java中JSP和el表达式的隐含对象

    `pageContext`对象是一个非常重要的JSP内置对象,它提供了一种统一的方式来访问所有其他JSP内置对象,并且可以用来控制页面的输出、获取请求参数、设置和获取属性等操作。该对象实现了多个接口,如`...

    jsp全部内置对象详解

    `application` 是一个`javax.servlet.ServletContext`类型的对象,用于共享数据。它可以被看作是服务器的一个全局变量存储空间,所有的JSP和Servlet都可以通过这个对象来共享信息。 #### 6. `request` 对象其他常用...

    jsp主要九大内置对象、四大web域、两种包含、两种注释、几个jsp标准动作

    5. **application**:ServletContext对象,全局共享数据,跨越多个用户会话,常用于存放应用级别的配置信息。 6. **out**:JspWriter对象,用于将输出写入到HTTP响应中,类似于System.out.println()。 7. **config...

    Servlet的内置对象

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

    JSP内置对象

    4. **应用对象 - application**:`ServletContext`的实例,保存在整个Web应用范围内的共享数据,所有用户都可访问。常用方法包括`application.setAttribute()`和`application.getAttribute()`,可以实现全局计时器等...

    学习javaweb的学习过程

    - **Application对象**:也称为ServletContext对象,全局范围内共享数据,适用于所有用户会话。 - **获取实例**:通过`getServletContext()`方法获取当前Web应用的ServletContext对象。 - **应用场景**:例如,统计...

    Java全栈工程师面试宝典.doc

    Java 多态是指同一个方法可以根据不同的对象类型而执行不同的操作。Java 多态可以通过方法重载和方法重写来实现: * 方法重载:指在同一个类中定义多个相同名称的方法,但参数列表不同。 * 方法重写:指在子类中...

    java常用jar包

    8. **Hibernate ORM JAR**:Hibernate是一个流行的Java对象关系映射(ORM)框架,帮助开发者将Java对象和数据库表进行映射。`hibernate-core.jar`、`hibernate-entitymanager.jar`等提供了ORM功能。 9. **Log4j JAR...

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

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

    java开发常用技术.docx

    - **四大域对象**:PageContext、request、session、servletContext,它们代表了不同的作用域,从局部到全局分别是当前页面、请求、会话和整个应用。 - **九大内置对象**:request、response、application、config...

    2022年java华为面试题.docx

    - application:ServletContext对象,提供关于Web应用的信息,共享全局数据。 - config:ServletConfig对象,保存Servlet的初始化参数。 - page:表示生成当前JSP页面的Servlet实例。 10. Socket 通信: 客户端...

    spring 常用的26个包

    本文将深入探讨Spring框架中常用的26个包,这些包是构建高效、可维护的Java应用的基础。 1. `org.springframework.beans`:这个包主要处理JavaBeans,包括属性的读取、设置、类型转换以及事件处理等。它还提供了...

Global site tag (gtag.js) - Google Analytics