??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩高清在线,成人黄色在线看,国产精品自产自拍http://www.aygfsteel.com/fengliangjun/articles/6683.htmlmorcble的blogmorcble的blogFri, 24 Jun 2005 07:58:00 GMThttp://www.aygfsteel.com/fengliangjun/articles/6683.htmlhttp://www.aygfsteel.com/fengliangjun/comments/6683.htmlhttp://www.aygfsteel.com/fengliangjun/articles/6683.html#Feedback0http://www.aygfsteel.com/fengliangjun/comments/commentRss/6683.htmlhttp://www.aygfsteel.com/fengliangjun/services/trackbacks/6683.html 关键?: servlet listener timer 定时?/TD>

从作用域范围来说,Servlet的作用域有ServletContext,HttpSession,ServletRequest.

Context范围:
    
ServletContextListener:
对一个应用进行全局监听.随应用启动而启?随应用消p消׃要有两个Ҏ:
contextDestroyed(ServletContextEvent event) 
 在应用关闭的时候调?BR>contextInitialized(ServletContextEvent event) 
在应用启动的时候调?BR>
q个监听器主要用于一些随着应用启动而要完成的工?也就是很多h说的我想在容?BR>启动的时候干..........
一般来说对"全局变量"初始??BR>public void contextInitialized(ServletContextEvent event){
    ServletContex sc = event.getServletContext();
    sc.setAttribute(name,value);
}
以后你就可以在Q何servlet中getServletContext().getAttribute(name);
我最喜欢用它来做守护性工?是在contextInitialized(ServletContextEvent event) 
Ҏ中实C个Timer,然后p应用在每ơ启动的时候让q个Timer工作:
public void contextInitialized(ServletContextEvent event){
    timer = new Timer();
    timer.schedule(new TimerTask(){
        public void run(){
            //do any things
        }
    },0,旉间隔);
}

    有h说Timer只能规定从现在开始的多长旉?每隔多久做一ơ事或在什么时间做
一ơ事,那我惛_每月1h每天12点做一工作如何做?
你只要设一个间?然后每次判断一下当时是不是那个旉D就行了?比如每月一号做,那你
旉间隔设ؓ??4时一个@?然后在runҎ中判断当时日期new Date().getDate()==1
p了啊.如果是每天的12?那你旉间隔设ؓ时,然后在run中判断new Date().getHour()
==12,再做某事p?

ServletContextAttributeListener:

q个监听器主要监听ServletContex对象在setAttribute()和removeAttribute()的事?注意
也就是一?全局变量"在被Add(W一ơset),replace(对已有的变量重新赋?和remove的时?
分别调用下面三个Ҏ:
public void attributeAdded(ServletContextAttributeEvent scab)q个Ҏ不仅可以知道
哪些全局变量被加q来,而且可获取容器在启动时自动设|了哪些context变量:

public void attributeAdded(ServletContextAttributeEvent scab){
    System.out.println(scab.getName());
}
  public void attributeRemoved(ServletContextAttributeEvent scab) 

  public void attributeReplaced(ServletContextAttributeEvent scab) 
  
  








Session范围:
HttpSessionListener:
q个监听器主要监听一个Session对象被生成和销毁时发生的事?对应有两个方?
  public void sessionCreated(HttpSessionEvent se) 

  public void sessionDestroyed(HttpSessionEvent se)

  一般来?一个session对象被create?可以说明有一个新客端q入.可以用来_略l计在线?BR>?注意q不是精的,因ؓq个客户端可能立卛_关闭?但sessionDestroyedҎ却会按一?BR>的策略很久以后才会发?

HttpSessionAttributeListener:
和ServletContextAttributeListener一?它监听一个session对象的Attribut被Add(一个特?BR>名称的Attribute每一ơ被讄),replace(已有名称的Attribute的D重设)和remove时的事g.
对就的有三个Ҏ.
  public void attributeAdded(HttpSessionBindingEvent se) 

  public void attributeRemoved(HttpSessionBindingEvent se) 

  public void attributeReplaced(HttpSessionBindingEvent se) 

  上面的几个监听器的方?都是在监听应用逻辑中servlet逻辑中发生了什么事,一般的来说.
我们只要完成逻辑功能,比如session.setAttribute("aaa","111");我只要把一个名为aaa的变?BR>攑֜session中以便以后我能获取它,我ƈ不关心当session.setAttribute("aaa","111");发生?BR>我还要干什?(当然有些时候要利用?,但对于下面这个监听器,你应该好好发解一?

HttpSessionBindingListener:
上面的监听器都是作ؓ一个独立的Listener在容器中控制事g?而HttpSessionBindingListener
对在一对象中监听该对象的状?实现了该接口的对象如果被作ؓvalue被addC个session中或?BR>session中remove,它就会知道自己已l作Z个session对象或已l从session删除,q对于一些非
UJAVA对象,生命周期长于session的对?以及其它需要释放资源或改变状态的对象非常重要.
比如:
session.setAttribute("abcd","1111");
以后session.removeAttribute("abcd");因ؓabcd是一个字W中,你从session中remove?它就?BR>自动被垃圑֛收器回收,而如果是一个connection:(只是举例,你千万不要加connection往session
中加?
session.setAttribute("abcd",conn);
以后session.removeAttribute("abcd");q时q个conn被从session中remove?你已l无法获取它
的句?所以你Ҏ没法关闭?而在没有remove之前你根本不知道什么时候要被remove,你又无法
close(),那么q个connection对象死?另外q有一些对象可以在被加入一个session时要锁定
q要被remove时要解锁,应因你在E序中无法判断什么时候被remove(),addq好操作,我可以先加锁
再add,但remove后你就找不到它的句柄了,Ҏ没法解锁,所以这些操作只能在对象自n中实?
也就是在对象被add时或remove旉知对象自己回调相应的方?

MyConn extends Connection implements HttpSessionBindingListener{
  public void valueBound(HttpSessionBindingEvent se){
    this.initXXX();
  }
  public void valueUnbound(HttpSessionBindingEvent se){

    this.close();
  }
}

session.setAttribute("aaa",new MyConn());
q时如果调用session.removeAttribute("aaa"),则触发valueUnboundҎ,׃自动关闭自己.
而其它的需要改变状态的对象了是一?

另外q有一个HttpSessionActivationListener监听器是实现分布式应用中session同步?不作
多介l?如果有要实现该功能的朋友可以和我联系.




在servlet2.4?对于request范围已经实现对应的监听器:
ServletRequestListenerQServletRequestAttributeListener



morcble的blog 2005-06-24 15:58 发表评论
]]>
eclipse的ؕ码问?/title><link>http://www.aygfsteel.com/fengliangjun/articles/5888.html</link><dc:creator>morcble的blog</dc:creator><author>morcble的blog</author><pubDate>Fri, 10 Jun 2005 09:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/fengliangjun/articles/5888.html</guid><wfw:comment>http://www.aygfsteel.com/fengliangjun/comments/5888.html</wfw:comment><comments>http://www.aygfsteel.com/fengliangjun/articles/5888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fengliangjun/comments/commentRss/5888.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fengliangjun/services/trackbacks/5888.html</trackback:ping><description><![CDATA[                                  <P> <DIV align=center><FONT color=#990000><STRONG>JSP与MySQL交互的中文ؕ码解x案及ȝ</STRONG></FONT></DIV><BR><SPAN>首先实现了一个StringConvert beanQGBtoISO()和ISOtoGB()两个ҎQ,解决了与MySQL数据库交互的时候的部分中文q问题Q在JSPE序中读取MySQL的中文内容,用这两个Ҏ可以解决q问题?<BR><BR>但是从JSP写入到MySQL的中文内定w成了qQƈ且再d来的时候也昄?Q?"Q在q里应该出现了编码{换过E中的字W信息丢失。郁L是,我在命o行窗口中登陆到MySQL后,执行?INSERT INTO customer VALUES('字符',...)"q样的语句时Q写入到数据表中的中文内容又是显C正常的Q!Q数据库使用的字W集是utf8?<BR><BR><BR><BR>壁多次Q终于发C条解决问题的路径Q查看MySQL手册的时候,看到一条这L语句QTo allow multiple character sets to be sent from the client, the "UTF-8" encoding should be used, either by configuring "utf8" as the default server character set, or by configuring the JDBC driver to use "UTF-8" through the characterEncoding property. <BR><BR><BR><BR>此外Q在查阅《MySQL权威指南》时Q发现在查询语句中可以用这L语法字W串转换C个给定的字符集:_charset str?<BR><BR>其中charset必须是服务器支持的某个字W集。在本例中,shopdb数据库用的默认字符集是utf8Q于是开始测试: <BR><BR>先输入INSERT INTO publish Values('8',_gb2312 '高等教育出版C?) 写入后中文变?Q?" <BR><BR>再试INSERT INTO publish Values('8',_gbk '高等教育出版C?) l果同上 <BR><BR>INSERT INTO publish Values('8',_utf8 '高等教育出版C?) q下更干脆,什么都没有Q! <BR><BR><BR><BR>  快疯?!没办法,用show character set;命o查看MySQL支持的字W集Q心x都试一遍L一个能成功吧。浏览了一下,发现没有几个熟悉的字W集Q就只剩下一个latin1(ISO-8859-1)比较常见了,不会是它吧,一试之下果然便是?<BR><BR>INSERT INTO publish Values('8',_latin1 '高等教育出版C?) 输入中文能够正确昄?<BR><BR><BR><BR>  q下ȝ扑ֈҎ了,把Tomcat下配|的数据库连接池的url改ؓQ?..characterEncoding=UTF-8Q,然后把写入数据库的中文内容用 <BR><BR>String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")q行转码Q其中s1Z文字W串Q然后再写入到数据库一切显C正常?<BR><BR><BR><BR>  册个问题查看了n多资料,C一个ȝQ由于字W集和字W编码方式的不同Q在OS以及E序之间传递数据(其是multiple character sets中的数据Q时便会产生q以及字符信息的丢失.解决q个问题的关键便是了解数据输出端和接收端使用的字W集和字W编码方式,如果q两U编码方式不同,侉K要在数据出口或入口处q行 转码。一般的_在编写代?~译Q以及运行期间都会字W数据的传递,因此需要特别小心?<BR><BR> 在编写代码的时候,你可能会使用某种开发工P例如我正在用的EclipseQ或许在写的时候一切正常,可是一旦保存后再次打开文档Q所有的中文字符都变成了q。这是因为在~写的时候,q些字符数据都在内存的某个stream中,okQ这没问题,可是保存的时候这个stream中的数据会被写入到硬盘,使用的就是你的开发工具默认的~码方式Q如果很不幸你的开发工具默认编码方式是ISO-8859-1Q中文字W信息就不能正确地存储。Eclipse中可以这h看ƈ修改默认字符~码方式QProject->Properties->infoQ这里有Qdefault <BR>encoding for text fileQ。如果设|ؓGBKQ那么编写代码ƈ保存q关p了?<BR><BR> 对于JSPE序而言Q编写完代码后就交给ContainerQ首先它们会被{?java文gQ然后编译成.class才能提交l服务器执行Q这个过E也存在字符~码问题Qjava~译?javac)使用操作pȝ的语a环境作ؓ默认的字W编码方式,JRE(Java Runtime Environment)也是q样。只有当~译和运行环境的字符~码方式与存储源文g的编码方式相同时Q中文字W才能正地昄。否则就需要在q行时进行{码,使它们用兼容的~码。这里的讄可以分ؓ几个层次Q操作系l层支持的语aQ这是最重要的,因ؓ它会影响Q)Q的默认字符~码方式Q同时对字符的显C,如字体等有直接媄响;J2EE服务器层Q大多数服务器都可以对字W编码进行自定义的配|,例如Tomcat可以通过web.xml中设|javaEncoding参数讄字符~码Q默认是UTF-8Q?<BR><BR>IE也可以设|成L使用UTF-8~码来发送请求.应用E序层,每个配置在服务器下的E序都可以设|自q~码方式Q这个我目前q没有用刎ͼ以后再学习?<BR><BR> q行时的转码Q运行时期,应用E序很可能需要与外部pȝq行交互Q例如对数据库进行读写,对外部文件进行读写.在这些情况下Q应用程序免不了要和外部pȝq行数据交换。那么对于中文字W, 数据出入口的~码方式显得特别重要了。一般外部系l都有自q字符~码方式Q我的例子中配置的MySQL是使用的UTF-8~码。JSP面通过讑֮Qcharset=gb2312Q? <BR><BR>使用gb2312~码Q在它与数据库交互的时候就需要进行显式的转码才能正确处理中文字符?<BR><BR>from:http://publishblog.blogchina.com/blog/tb.b?diaryID=1169246 </SPAN><img src ="http://www.aygfsteel.com/fengliangjun/aggbug/5888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fengliangjun/" target="_blank">morcble的blog</a> 2005-06-10 17:08 <a href="http://www.aygfsteel.com/fengliangjun/articles/5888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ʼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">Ʊ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۷</a>| <a href="http://" target="_blank">¬</a>| <a href="http://" target="_blank">Ƥɽ</a>| <a href="http://" target="_blank">׿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>