javaWEB总结(4):ServletContext对象方法
前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔。
1.什么是ServletContext对象?如何获取?
(1)ServletContext对象代表当前WEB应用,可以说是当前WEB应用的大管家,可以从中获取当前WEB应用的各个方面信息。
(2)ServletContext对象可由ServletConfig的getServletContext方法获取。
2.ServletContext的API
方法很多,只介绍比较重要的几个方法
3.项目结构
比之前多了两个测试文件(用来测试,只要名称对应就可以)
4.HelloServlet.java
package com.dao.chu; import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; /**
*
* Title: HelloServlet Description:实现Servlet接口的类 </p>
*/
public class HelloServlet implements Servlet { //在控制台打印中,用来分割ServletContext对象方法
private final static String notic ="=========================ServletContext对象方法===================================";
//在控制台打印中,用来分割HelloServlet类
private final static String helloServlet ="=========================helloServlet类==================================="; @Override
public void destroy() {
System.out.println("destroy...");
} @Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
} @Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
} @Override
public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init..."); // 获取参数名为user的参数值
String userValue = servletConfig.getInitParameter("user");
System.out.println("userValue is " + userValue); // 获取参数名为password的参数值
String passwordValue = servletConfig.getInitParameter("password");
System.out.println("passwordValue is " + passwordValue); // 获取servlet节点配置的所有初始化参数名组成的Enumeration
Enumeration<String> parameterNames = servletConfig
.getInitParameterNames(); // 循环
while (parameterNames.hasMoreElements()) { String name = (String) parameterNames.nextElement();
// 打印所有循环出来的参数名
System.out.println("name is " + name); // 用参数名来获取所有的参数值,并打印出来
String value = servletConfig.getInitParameter(name);
System.out.println("value is " + value); } /* 获取配置的servlet名称 */
String servletName = servletConfig.getServletName();
System.out.println("servletName: " + servletName); //=========================ServletContext对象方法=================================// System.out.println(notic); //获取ServletContext对象
ServletContext servletContext = servletConfig.getServletContext(); // 获取参数名为driver的参数值并打印
String driverValue = servletContext.getInitParameter("driver");
System.out.println("driverValue is "+driverValue); // 获取context节点配置的所有初始化参数名组成的Enumeration
Enumeration<String> contextNames = servletContext.getInitParameterNames(); while (contextNames.hasMoreElements()) { String contextParamName = (String) contextNames.nextElement(); // 打印所有循环出来的参数名
System.out.println("contextParamName is "+contextParamName); // 用参数名来获取所有的参数值,并打印出来
String contextParamValue = servletContext.getInitParameter(contextParamName);
System.out.println("contextParamValue is "+contextParamValue); } //获取文件在服务器部署的绝对路径
String realPath = servletContext.getRealPath("/note.txt");
System.out.println("realPath is "+realPath); //获取当前web应用的跟路径
String contextPath = servletContext.getContextPath();
System.out.println("contextPath is "+contextPath); //通过ClassLoader得到输入流
InputStream is1;
try {
ClassLoader loader = getClass().getClassLoader();
is1 = loader.getResourceAsStream("jdbc.properties");
System.out.println("is1 is "+is1);
} catch (Exception e) {
e.printStackTrace();
} //通过servletContext的getResourceAsStream得到输入流
try {
InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
System.out.println("is2 is "+is2);
} catch (Exception e) {
e.printStackTrace();
} } @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("service..."); } public HelloServlet() {
//控制台加分隔符
System.out.println(helloServlet); System.out.println("HelloServlet's constructor..");
} }
5.SecondHelloServlet.java
package com.dao.chu; import java.io.IOException; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; /**
*
* Title: HelloServlet
* Description:第二个实现Servlet接口的类
* </p>
*/
public class SecondHelloServlet implements Servlet{ //在控制台打印中,用来分割SecondHelloServlet类
private final static String secondHelloServlet ="=========================secondHelloServlet类==================================="; @Override
public void destroy() {
System.out.println("second destroy.."); } @Override
public ServletConfig getServletConfig() {
System.out.println("second getServletConfig..");
return null;
} @Override
public String getServletInfo() {
System.out.println("second getServletInfo..");
return null;
} @Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("second init.."); } @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("second service..");
} public SecondHelloServlet(){
//控制台加分隔符
System.out.println(secondHelloServlet); System.out.println("SecondHelloServlet's constructor..");
} }
6.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0"> <!-- 配置当前WEB应用的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param> <context-param>
<param-name>jdbcUrl</param-name>
<param-value>jdbc:mysql://daochuwenziyao</param-value>
</context-param> <!-- 配置和映射servlet -->
<!-- helloServlet -->
<servlet> <!-- servlet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- servlet的全类名 -->
<servlet-class>com.dao.chu.HelloServlet</servlet-class> <!-- 配置servlet的初始化参数 ,要放在load-on-startup节点 前面-->
<init-param>
<!-- 参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param> <!-- load-on-startup节点 -->
<load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <!-- 需要和某一个servlet子节点的servlet-name 子节点的文本节点一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射的具体访问路径:/代表当前WEB应用的根目录 -->
<url-pattern>/hello</url-pattern> </servlet-mapping> <!-- secondHelloServlet -->
<servlet> <!-- servlet注册的名字 -->
<servlet-name>secondHelloServlet</servlet-name>
<!-- servlet的全类名 -->
<servlet-class>com.dao.chu.SecondHelloServlet</servlet-class>
<!-- load-on-startup节点 -->
<load-on-startup>1</load-on-startup> </servlet>
</web-app>
7.控制台输出
我们只需看“ServletContext对象方法”中的输出即可
8.总结:
在ServletContext中有以下几个重要的方法:
(1)初始化变量方法getInitParameter和getInitParameterNames:ServletConfig和ServletContext对象都有初始化参数的方法,方法相同但是领域不同。ServletConfig为局部初始化参数,只能在当前配置的servlet中获取,而ServletContext为全局初始化参数,只要在当前web应用中就可以获取;
(2)getRealPath方法:获取文件在服务器部署的绝对路径;
(3)getContextPath方法:获取当前web应用的跟路径,后面会经常用到;
(4)getResourceAsStream方法,获取输入流,与通过ClassLoader得到输入流不同的是传递的参数为服务器部署的绝对路径。
附:
本次示例代码:点击打开链接
为了尊重原作者,下面粘贴佟刚老师视频的地址:
javaWEB总结(4):ServletContext对象方法的更多相关文章
- spring中得到servletContext对象方法
1.spring得到servletContext,这个和session没有什么关系,上下文可以说是一个session容器,一个上下文可以有多个会话session 在web.xml中有以下配置后.加入s ...
- IT兄弟连 JavaWeb教程 ServletContext对象
ServletContext是Servlet与Servlet容器之间直接通信的接口.Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象.每个Web应用都有唯一的S ...
- Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)
一.Servlet简介 1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- javaWEB总结(3):ServletConfig对象
1.首先找到ServletConfig的API: ServletConfig封装了servlet的配置信息,并且可以获取servletContext对象. ServletConfig共有四个方法: 1 ...
- JavaWeb中四大域对象的作用范围
JavaWeb的四大作用域为:PageContext,ServletRequest,HttpSession,ServletContext: PageContext域:作用范围是整个JSP页面,是四大作 ...
- mvc-servlet---ServletConfig与ServletContext对象详解(转载)
ServletConfig与ServletContext对象详解 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...
随机推荐
- Python笔记6(异常)-20160924
1. NameError 当视图访问一个未定义的变量则会发生NameError.
- 【Python之路】第四篇--Python基础之函数
三元运算 三元运算(三目运算),是对简单的条件语句的缩写 # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2” ...
- hibernate简单的增删改查
获取当前线程的session protected Session getSession() { return sessionFactory.getCurrentSession(); } 增加:save ...
- MySql-授权,使远程主机能够访问自己的数据库
转自:http://www.jb51.net/article/85218.htm GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'mys ...
- thinkphp pdo 重写问题
ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用. 首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括: 复制代码 ...
- Socket 传送文件
1.传送文本文件 1.1服务端 package com; import java.io.BufferedWriter; import java.io.DataInputStream; import j ...
- HashMap,HashTable ,LinkedHashMap,TreeMap的区别
Map:主要是存储键值对,不允许键重复,但可以值重复. HashMap:根据键的HashCode值来存储数据,根据键直接获取值.具有很快的访问速度,遍历时,取得的数据值的顺序都是随机的.hashMap ...
- JZ2440串口打印字符作为调试
/* * 初始化UART0 * 57600,8N1,无流控 */ void uart0_init(void) { GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPH ...
- JS跨域访问问题
js跨域了. 只能给几个资料参考了:http://blog.csdn.net/lovingprince/article/details/2954675 http://www.kuqin.com/web ...
- C# 泛型 Func<object, string, bool> filter
Func<object, string, bool>是泛型,你可以先把他看成一个普通类型,比如stringpublic class Func{ } // 自定义个普通类. Func fil ...