一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
ServletConfig对象
代表当前Servlet在web.xml文件配置信息的对象
1)获取ServletConfig对象
ServletConfig scf=this.getServletConfig()
2)功能
①获取当前servlet的初始化参数
在web.xml文件中的<servlet>标签的内部可以为当前servlet配置0个或者多个初始化参数,可以使用ServletConfig来获取配置的这些初始化参数
getInitParameter(name) -->value
getInitParameterNames() -->Enumeration
②获取ServletContext对象
ServletConfig scf=this.getServletConfig();
ServletContext sct=scf.getServletContext();
修改Web.xml
参考教程,添加如下内容:
<servlet>
<servlet-name>ServletConfigDemo</servlet-name>
<servlet-class>servletconfig.ServletConfigDemo</servlet-class>
<!-- 给当前ServletConfigDemo配置初始化参数,这些初始化参数可以通过ServletConfig来获取 -->
<init-param>
<param-name>pwd</param-name>
<param-value>123456</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>www.baidu.com</param-value>
</init-param>
<init-param>
<param-name>id</param-name>
<param-value>1001</param-value>
</init-param>
</servlet>
package servletconfig;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示ServletConfig对象的使用
public class ServletConfigDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在web.xml文件中的<servlet>标签中配置了一些初始化参数
//使用ServletConfig对象来获取这些初始化参数
//获得ServletConfig对象
ServletConfig scf=this.getServletConfig();
//该方法通过配置的<param-name>的值获取<param-value>的值
/*
String strPwd=scf.getInitParameter("pwd");
String strUrl=scf.getInitParameter("url");
String strId=scf.getInitParameter("id");
System.out.println(strPwd+" "+strUrl+" "+strId);
*/
//获取初始化参数中所有的<param-name>的值
Enumeration<String> params=scf.getInitParameterNames();
//使用循环将params中所有的值取出
while(params.hasMoreElements()){
//System.out.println(params.nextElement());
String name=params.nextElement();
String value=scf.getInitParameter(name);
System.out.println(name+","+value);
}
/*
*
* id,1001
pwd,123456
url,www.baidu.com
*
*/
//②获取ServletContext对象
ServletContext sct=scf.getServletContext();
}
}
ServletContext对象
代表的是当前web应用(web项目)对象
在web应用被加载以后,服务器会立刻创建出代表当前web应用的ServletContext对象,创建后对象会一直驻留在内存中,直到服务器关闭或者web应用移出服务器为止,随着web应用的销毁,ServletContext对象也会跟着销毁。
1)获取ServletContext对象
方法一:先获得ServletConfig,然后通过ServletConfig
在获得ServletContext。
ServletConfig scf=this.getServletConfig();
ServletContext sct=scf.getServletContext();
方法二:通过this直接获取
ServletContext sct=this.getServletContext();
2)ServletContext中的方法
方法一
getInitParameter(String name) ---->value
根据name来获得value的值
getInitParameterNames() ---->Enumeration
获得所有的name值
package servletcontext;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示ServletContext对象的使用
public class ServletContextDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1、获取ServletContext对象
//方法一:通过ServletConfig来获取
ServletConfig scf=this.getServletConfig();
ServletContext sct=scf.getServletContext();
//方法二:通过this直接获取
ServletContext sct=this.getServletContext();
//根据name来获得value
String s1=sct.getInitParameter("data1");
String s2=sct.getInitParameter("data2");
System.out.println(s1+" "+s2);
//获得所有的name的值
Enumeration<String> ns=sct.getInitParameterNames();
while(ns.hasMoreElements()){
String name=ns.nextElement();
String value=sct.getInitParameter(name);
System.out.println(name+","+value);
}
}
}
方法二
ServletContext对象也是一个域对象,利用这个对象可以在整个 web应用内实现资源的共享
setAttribute(String name, Object obj)
getAttribute(String name) --->Object obj
package servletcontext;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示ServletContext作为域对象的功能:实现范围内的资源共享
public class ServletContextDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("我是ServletContextDemo1...");
/*
//复习:使用request域对象,request对象的作用域是一次请求中的范围,
//只要在一次请求中的范围就可以实现资源的共享,否则资源无法实现共享
request.setAttribute("a", 1);
//同一个Servlet类中,能够获取到request域对象存储的值(同一个Servlet类上下依次执行,是同一个请求)
Integer strA=(Integer)request.getAttribute("a");
System.out.println(strA);//1
//通过转发,由ServletContextDemo1转发跳转到ServletContextDemo2
//如果是转发,就是一次请求,就能使用request域对象实现资源的共享
RequestDispatcher rd=request.getRequestDispatcher("context2");
rd.forward(request, response);
*/
//使用ServletContext域对象:ServletContext对象的最用是整个web应用
//获取ServletContext对象
ServletContext sct=this.getServletContext();
//往ServletContext域对象中存储数据
sct.setAttribute("b", 2);
Date time=new Date();
System.out.println("time:"+time);
sct.setAttribute("t", time);
//同一个Servlet中,ServletContext可以实现资源共享
Integer itgB=(Integer)sct.getAttribute("b");
System.out.println("context1中的itgB的值为:"+itgB);
//通过转发技术,由ServletContextDemo1跳转到ServletContextDemo2
//RequestDispatcher rd=request.getRequestDispatcher("context2");
//rd.forward(request, response);
}
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示从域对象中获取值
//获取从ServletContextDemo1中存储的值
public class ServletContextDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("我是ServletContextDemo2....");
//从request域对象中获取数据
/*
Integer itgA=(Integer)request.getAttribute("a");
System.out.println(itgA);
*/
//从ServletContext域对象中获取数据
//获得ServletContext对象
ServletContext sct=this.getServletContext();
Integer itgB=(Integer)sct.getAttribute("b");
System.out.println("context2中的itgB的值为:"+itgB);
Date date=(Date)sct.getAttribute("t");
System.out.println(date);
}
}
方法三
//获取web资源文件的路径
String path=sct.getRealPath(“xx文件”)
获得的是一个绝对路径,传入一个相对于web应用跟目录的资源文件路径,这个方法会在传入的路径前面动态的拼接上当前web应用跟目录的磁盘路径,这种路径称为动态获取的路径,换个环境,也能够正确的获取路径。
package servletcontext;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示ServletContext来获取资源文件的路径
public class ServletContextDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取ServletContext对象
ServletContext sct=this.getServletContext();
//()里设置的是资源文件,该方法返回该资源文件对应的动态路径
String path=sct.getRealPath("/aa.txt");
System.out.println(path);
//C:\Users\qingd\mywork\tomcat\apache-tomcat-7.0.68\webapps tomcat服务器的磁盘路径
//\servlet web项目名
//\aa.txt 资源文件名
}
}