javaWEB总结(4):ServletContext对象方法

2017-01-13 15:00:56来源:csdn作者:daochuwenziyao人点击

第七城市

前言:之前每次学到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.javapackage 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得到输入流不同的是传递的参数为服务器部署的绝对路径。


附:


本次示例代码:点击打开链接




为了尊重原作者,下面粘贴佟刚老师视频的地址:



点击打开链接




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台