servletContext对象

ServletContext对象

1.Web容器在启动时,他会为每个web应用程序都创建一个对应的ServletContext对象,所以ServletContext 就代表当前的web应用。用于数据共享

2,获取ServletContext对象

方式一:ServletConfig对象中维护类ServletContext对象的引用,所以可以通过ServletConfig.getServletContext方法获取ServletContext对象;

Servletcontext contest=this.GetServletConfig().getServletContext();

方式二:调用servletgetServletContext方法得到其对象

ServletContext context  =this.getServletContext();

3.ServletContext的生命周期:在服务器启动时,会分别为每一个web应用创建servletContext对象,servletContext对象会在的对应web应用被删除时和服务器停止时销毁。

4.ServletContext对象的常用方法:详见文档:

getAttribute(java.lang.String name)

getAttributeNames()

getInitParameter(java.lang.String name)
removeAttribute(java.lang.String name)
setAttribute(java.lang.String name, java.lang.Object object)
getNamedDispatcher(java.lang.String name)
getRequestDispatcher(java.lang.String path)

5ServletContext的功能:

①:由于一个WEB应用中所有的Servlet共享同一个ServletContext对象,所以对个Servlet通过ServletContext对象实现数据共享;ServletContext对象通常也被称之为context域对象

例:在一个Servlet1中的数据

String data ="abde";

SevletContext context = this.getServletContext();

context.setAttribute("data",data);

可以在Servlet2中得到

SevletContext context = this.getServletContext();

String value = context.getAttribute("data");

注意:servletContext域 代表什么呢:1.这是一个容器,

2.说明了这个容器的作用范围,也就是应用程序范围

②:获取web应用的初始化参数。

在整个web的配置文件中,可以使用一个或多个<context-param>标签为整个 web配置一些初始化信息;

例:

<web-app>

<context-param>

<param-name>data</param-name>

<param-value>xxxxx</param-value>

</context-param>

</web-app>
servlet中获取初始化信息

//得到指定的初始化参数。

String value this.getServletContext().getInitParameter("data");

//获取所有的初始化信息

Enumeration e =this.getServletContext().getInitParameterNames();

while(e.hasMoreElements()){

String name = (String) e.nextElement();

//获取初始化信息

String v = this.getServletConfig().getInitParameter(name);

System.out.println(v);

}

③:实现servlet的转发

因为Servlet不适合数据输出,需要把数据转发给jsp输出

例:servlet中的data数据转发的1.jsp中输出

String  data="abcde";

//把数据带给jsp ,要通过request

//得到转发对象  RequestDispatcher 

RequestDispatcher rd =  this.getServletContext().getRequestDispatcher("1.jsp");

//forward方法转发

rd.forWard(request,response);

//jsp中获取数据,并输出;

④:利用ServletContext对象读取资源文件

注意:Web开发中的配置文件有两种类型,.xml和.properties方法;当配置 信息之间有关系时,就用xml类型,没有关系时就用properties类型。

例:在Servlet中读取.properties资源文件

//db.properties文件内容

Url=jdbc:mysql://localhost:3306/test

User=aaa;

方式一:ServletContext getResourceAsStream方法读取

//servlet中读取

ServletContext context = this.getServletContext();

//ServletContext getResourceAsStream("文件的相对路径")方法是 //将配置文件作为输入.

InputStream in=

 context.getResourceAsStream("/WEB-INF/CLASSES/db.properties");

//Properties 对象的load方法获取输入流中的键值对。

Properties prop=new Properties();

Prop.load(in);

//读取键对应的值。

String value1 = prop.getProperties("url");

String value2 = prop.getProperties("user");

注意:在读取资源文件时不可以用传统的inputStream流读取。最好用 ServletContext对象读取。

方式二:ServletContextgetRealPath方法读取

通过ServletContextgetRealPath方法是得到资源的绝对路径,再用传统的流读取资源文件。并且还可以得到当前的资源名称

//servlet中读取

ServletContext context = this.getServletContext();

//得到绝对路径path

String path =

 context.getRealPath("/WEB-INF/CLASSES/db.properties");

//path得到当前文件名

String fileName = String.substring(path.lastIndexOf("\\")+1);

//用普通流读取

FileInputStream in = new FileInputStream(path); 

//Properties 对象的load方法获取输入流中的键值对。

Properties prop=new Properties();

Prop.load(in);

//读取键对应的值。

String value1 = prop.getProperties("url");

String value2 = prop.getProperties("user");

⑤:在web应用中的普通java文件怎样读取资源文件

在实际开发中,读取配置文件的操作不会在Servlet中进行(如连接数据库);以为要分层开发,所以会创建一个专门连接数据库的类(UserDao)。 在UserDao类中获取配置文件就不可以使用ServletContext对象获取了。就只能通过类加载器ClassLoader去读;

例:实际开发中的UserDao

public class UserDao {

//创建公用的Properties对象

private static Properties prop = new Properties();

//静态代码块

static{

try {

//得到类加载器  

//注意:同一个web应用下类和文件使用是同一个类加载器

ClassLoader loader = UserDao.class.getClassLoader();

//getResourceAsStream方法,读取资源文件并用流返回

InputStream in =loader.getResourceAsStream("db.properties");

//将流读入Properties对象中

prop.load(in);

} catch (Exception e) {

throw new ExceptionInInitializerError(e); }

//修改

public void update(){

System.out.println(prop.getProperty("url"));

}

//添加

public void add(){

System.out.println(prop.getProperty("url"));

}

//查询

public void select(){

System.out.println(prop.getProperty("url"));

}

}

然后在Servlet中创建UserDao对象调用其增删改查的方法;

public class ServletDemo3 extends HttpServlet {

public void doGet

(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

UserDao dao=new UserDao();

dao.update();

}

public void doPost

(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request,response);

}

}

注意1.使用类加载器,加载配置文件时,配置文件不能太大,因为是加载到内存中过大会导致内存溢出

2.当在配置文件被更改后,上述数的例的造作就读不到,更新后的配置文件。

就需要通过类加载的方式先得到资源文件的位置,再通过传统的方式读取资源文件,这样就可以读到更新后的数据

//得到类加载器

ClassLoader loader = UserDao.class.getClassLoader();

//通过getResource(资源名称)方法的的URL

Java.net.URL url=loader.getResource("db.properties")

//得到文件路径

String path = url.getPath();

FileInputStream in =new FileInputStream(path);

Properties prop = =new Properties();

prop.load(in);

System.out.println(prop.getProperty("url"));

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值