Ajax处理IE浏览器兼容问题ITeye - 牛牛娱乐

Ajax处理IE浏览器兼容问题ITeye

2019年03月30日09时55分36秒 | 作者: 鸿骞 | 标签: 运用,办法,发动 | 浏览: 2176

ServletContext 被 Servlet 程序用来与 Web 容器通讯。例如写日志,转发恳求。每一个 Web 运用程序含有一个Context,被Web运用内的各个程序同享。由于Context能够用来保存资源而且同享,所以我所知道的 ServletContext 的最大运用是Web缓存把不常常更改的内容读入内存,所以效劳器呼应恳求的时分就不需求进行慢速的磁盘I/O了。ServletContextListener 是 ServletContext 的监听者,假如 ServletContext 发作改变,如效劳器发动时 ServletContext 被创立,效劳器封闭时 ServletContext 即将被毁掉。在JSP文件中,application 是 ServletContext 的实例,由JSP容器默许创立。Servlet 中调用 getServletContext()办法得到 ServletContext 的实例。

咱们运用缓存的思路大概是:

效劳器发动时,ServletContextListener 的 contextInitialized()办法被调用,所以在里边创立好缓存。能够从文件中或许从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute()办法将缓存类保存在 ServletContext 的实例中。 程序运用 ServletContext.getAttribute()读取缓存。假如是 JSP,运用a pplication.getAttribute()。假如是 Servlet,运用 getServletContext().getAttribute()。假如缓存发作改变(如拜访计数),你能够一起更改缓存和文件/数据库。或许你等 改变堆集到必定程序再保存,也能够鄙人一步保存。 效劳器即将封闭时,ServletContextListener 的 contextDestroyed()办法被调用,所以在里边保存缓存的更改。将更改后的缓存保存回文件或许数据库,更新本来的内容。

import User; //my own class

import DatabaseManager; // my own class

import javax.servlet.ServletContext;

import javax.servlet.ServletContextListener;

public class MyContextListener

implements ServletContextListener {

private ServletContext context = null;

public void contextInitialized(ServletContextEvent event) {

context = event.getServletContext();

User user = DatabaseManager.getUserById(1);

context.setAttribute("user1", user);

}

public void contextDestroyed(ServletContextEvent event) {

User user = (User)context.getAttribute("user1"); DatabaseManager.updateUserData(user);

this.context = null;

}

}

布署 ServletContextListener

你完结(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里增加 listener

listener-class MyServletContextListener /listener-class

/listener

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@下面的比方很好!!!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 目标的生命周期,实践上便是监听 Web 运用的生命周期。当Servlet 容器发动或停止Web 运用时,会触发ServletContextEvent 事情,该事情由ServletContextListener 来处理。在 ServletContextListener 接口中界说了处理ServletContextEvent 事情的两个办法。

l contextInitialized(ServletContextEvent sce) :当Servlet 容器发动Web 运用时调用该办法。在调用完该办法之后,容器再对Filter 初始化,而且对那些在Web 运用发动时就需求被初始化的Servlet 进行初始化。

l contextDestroyed(ServletContextEvent sce) :当Servlet 容器停止Web 运用时调用该办法。在调用该办法之前,容器会先毁掉一切的Servlet 和Filter 过滤器。

下面经过两个详细的比方来介绍 ServletContextListener 的用法。

例一:在效劳发动时,将数据库中的数据加载进内存,并将其赋值给一个特点名,其它的 Servlet 就能够经过 getAttribute 进行特点值的拜访。有如下两个过程:1 : ServletContext 目标是一个为整个 web 运用供给同享的内存,任何恳求都能够拜访里边的内容

2 :怎么完结在效劳发动的时分就动态的参加到里边的内容:咱们需求做的有:

1 ) 完结 servletContextListerner 接口 并即将经过 setAttribute ( name,data )办法提交到内存中去 ;

2 )运用项目经过 getAttribute(name) 将数据取到 。

package ServletContextTest;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import util.ConnectTool;

public class ServletContextLTest implements ServletContextListener{

// 完结其间的毁掉函数

public void contextDestroyed(ServletContextEvent sce) { System.out.println("this is last destroyeed");

}

// 完结其间的初始化函数,当有事情发作时即触发

public void contextInitialized(ServletContextEvent sce) {

ServletContext sct=sce.getServletContext();

Map Integer,String depts=new HashMap Integer,String

Connection connection=null;

PreparedStatement pstm=null;

ResultSet rs=null;

try{

connection=ConnectTool.getConnection();

String sql="select deptNo,dname from dept"; pstm=connection.prepareStatement(sql);

rs=pstm.executeQuery();

while(rs.next()){

depts.put(rs.getInt(1), rs.getString(2));

}

// 将所取到的值寄存到一个特点键值对中

sct.setAttribute("dept", depts);

System.out.println("listener test is beginning=");

}catch(Exception e){

e.printStackTrace();

}finally{

ConnectTool.releasersc(rs, pstm, connection);

}

}

}

在完结上述编码后,仍需在 web.xml 中进行如下装备,以使得该监听器能够起作用。 listener

listener-class ServletContextTest.ServletContextLTest /listener-class

/listener 在完结上述装备后, web 效劳器在发动时,会直接加载该监听器,经过以下的运用程序就能够进行数据的拜访。

package ServletContextTest; import java.io.IOException;

import java.io.PrintWriter;

import java.util.*;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class CreateEmployee extends HttpServlet{

@Override

protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

ServletContext sct=getServletConfig().getServletContext();

// 从上下文环境中经过特点名获取特点值

Map Integer,String dept(Map Integer,String )sct.getAttribute("dept");

Set Integer key=dept.keySet();

response.setContentType("text/html;charset=utf-8");

PrintWriter out=response.getWriter();

out.println(" html

out.println(" body

out.println(" form action=/register action=post

out.println(" table alignb=center

out.println(" tr

out.println(" td

out.println("username:");

out.println(" /td

out.println(" td

out.println(" input type=text name=username");

out.println(" /tr

out.println(" tr

out.println(" td

out.println("city:");

out.println(" /td

out.println(" td

out.println(" select name=dept");

for(Integer i:key){

out.println(" option value="+i+" "+dept.get(i)+" /option

}

out.println(" /select

out.println(" /td

out.println(" tr

out.println(" /table

out.println(" /form

out.println(" /body

out.println(" /html

out.flush();

}

}

例二:书写一个类用于计算当Web 运用发动后,网页被客户端拜访的次数。假如从头发动Web 运用,计数器不会从头从1 开端计算拜访次数,而是从前次计算的成果上进行累加。在实践运用中,往往需求计算自Web 运用被发布后网页被客户端拜访的次数,这就要求当Web 运用被停止时,计数器的数值被永久存储在一个文件中或许数据库中,比及Web 运用从头发动时,先从文件或数据库中读取计数器的初始值,然后在此基础上持续计数。

向文件中写入或读取计数器的数值的功用能够由自界说的 MyServletContextListener 类来完结,它具有以下功用:

1 、在 Web 运用发动时从文件中读取计数器的数值,并把表明计数器的 Counter 目标寄存到 Web 运用规模内。寄存计数器的文件的途径为helloapp/count/count.txt 。

2 、在Web 运用停止时把Web 运用规模内的计数器的数值保存到count.txt 文件中。package ServletContextTest; import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener; public class MyServletContextListener implements ServletContextListener{

public void contextInitialized(ServletContextEvent sce){

System.out.println("helloapp application is Initialized.");

// 获取 ServletContext 目标

ServletContext context=sce.getServletContext();

try{

// 从文件中读取计数器的数值

BufferedReader reader=new BufferedReader(

new InputStreamReader(context.

getResourceAsStream("/count/count.txt")));

int count=Integer.parseInt(reader.readLine());

reader.close();

// 创立计数器目标

Counter counter=new Counter(count);

// 把计数器目标保存到 Web 运用规模 context.setAttribute("counter",counter);

} catch(IOException e) {

e.printStackTrace();

}

}

public void contextDestroyed(ServletContextEvent sce){

System.out.println("helloapp application is Destroyed.");

// 获取 ServletContext 目标

ServletContext context=sce.getServletContext();

// 从 Web 运用规模取得计数器目标

Counter counter=(Counter)context.getAttribute("counter");

if(counter!=null){

try{

// 把计数器的数值写到 count.txt 文件中

String filepath=context.getRealPath("/count");

filepath=filepath+"/count.txt";

PrintWriter pw=new PrintWriter(filepath);

pw.println(counter.getCount());

pw.close();

} catch(IOException e) {

e.printStackTrace();

}

}

}

}

将用户自界说的 MyServletContextListener 监听器在 Servlet 容器进行注册, Servlet 容器会在发动或停止 Web 运用时,会调用该监听器的相关办法。在 web.xml 文件中, listener 元素用于向容器注册监听器:

listener

listener-class ServletContextTest .MyServletContextListener listener-class / /listener

留意: listener-class 中要写出类的包名,比方下面的写法(包名标识了类的途径) listener

listener-class com.efarm360.action.StartupAction /listener-class

/listener

经过上述两个比方,即能够十分清楚的了解到 ServletContextListener 接口的运用办法及技巧。在Container 加载Web 运用程序时(例如发动 Container 之后),会呼叫contextInitialized() ,而当容器移除Web 运用程序时,会呼叫contextDestroyed () 办法。 经过 Tomcat 控制台的打印成果的先后顺序,会发现当 Web 运用发动时,Servlet 容器先调用contextInitialized() 办法,再调用lifeInit 的init() 办法;当Web 运用停止时,Servlet 容器先调用lifeInit 的destroy() 办法,再调用contextDestroyed() 办法。由此可见,在Web 运用的生命周期中,ServletContext 目标最早被创立,最晚被毁掉。

技能共享:凯哥书院

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表牛牛娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3

    第02章 根底中心ITeye

    目标,根底,中心
  • 4
  • 5
  • 6

    Java中字符串的使用ITeye

    字符串,字符,比较
  • 7
  • 8

    UTLITeye

    数据,目录,文件
  • 9
  • 10