??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产一区二区三区性色av ,国产人成一区二区三区影院,国产综合色在线观看http://www.aygfsteel.com/Benjamin/category/14121.html<br><font size='2.5'>带着淡E的倦意Q轻ȝ忧惺Q宛若远山含W迷蒙,但又如闪甉|雯震h心魄…?lt;/font>zh-cnTue, 27 Feb 2007 12:07:08 GMTTue, 27 Feb 2007 12:07:08 GMT60用xmlhttp和session监听站内人数(session监听、无h取server端数?http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63703.html萧秋?/dc:creator>萧秋?/author>Tue, 15 Aug 2006 08:05:00 GMThttp://www.aygfsteel.com/Benjamin/archive/2006/08/15/63703.htmlhttp://www.aygfsteel.com/Benjamin/comments/63703.htmlhttp://www.aygfsteel.com/Benjamin/archive/2006/08/15/63703.html#Feedback0http://www.aygfsteel.com/Benjamin/comments/commentRss/63703.htmlhttp://www.aygfsteel.com/Benjamin/services/trackbacks/63703.html   q个题目含有许多需要解释的概念Q最Ҏ说明的是“站内消息”,q是很多论坛? 有的功能Q可以通过web向其他的在线用户发送消息,很多用户都用过。站内消息的W一个好处是大家都不需要安装客LQ你不用知道Ҏ的MSN或? QQQ就能与他联p,U赞他的观点或者是l他一臭骂。第二个好处是客L理方便,利用session来维护在U名单,各种脚本都已l把session? 作封装得很易用了Q不用像其他无状态的x通信工具Q比如用UDP通信的工P一P要费一些脑l胞来解军_U名单的问题。缺点嘛Q就是实时性不好,一 般是在用戯转或者刷新页面才能探消息、更新在U名单?br />
  Session监听嘛,没什么好解释的,java提供了很灉|的事件机制来 监听sessionQ可以监听session的创建和销毁,监控session所携带数据的创建、变化和销毁,可以监听session的锐化和钝化Q了? 对象序列化的兄弟应该知道q个Q,其他的^台是个什么情冉|不太清楚Q估计也差不多吧。如果能够对所有客Lsessionq行监控Q就不用再去操作ȝ 而危险的Application了?br />
  Xmlhttp是MS推的一Ҏ术,功能很复杂,可以做很多事情,比如客户端可以在单的 HTML中打开HTTPq接Q主动向serverh数据q获得返回数据,是DOM技术一个非帔R要的应用Q利用它来写无刷新的动态页面简直是 so easyQ做qweb开发的兄弟应该明白它的意义有多么重大?br />
一、 session监听

  servlet中对 session的监听有很多接口Q功能很灉|Q最常用的是监听Session和Attribute。这里要澄清一下概念,servlet中的 session监听和Attribute监听含义有差别,session监听指的不是我们一般所理解的放|一个session或者销毁一? sessionQ这是Attribute监听的功能,因ؓservlet中放|session的语法是session.setAttribute (“session名?要放入的对象)。而session监听Q监听的是HTTPq接Q只要有用户与serverq接Q就连接的是一个空白的jsp? 面,也会触发session事gQ所以此处的session实际上指的是connectionQ用来统计当前在U用h最合适了。不知道我说清楚了没有? 下面分别讲解q两U监听方式?br />
1、 session监听

  首先~写一个session监听c,实作HttpSessionListener接口Q它的作用是计算当前有多个在线用户Q?br />

  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package  org.bromon.test;

  6. import  javax.servlet.*;
  7. import  javax.servlet.http.*;

  8. public  class SessionCount implements  HttpSessionListener
  9. {
  10.     private static int count=0;

  11.     public void sessionCreated( HttpSessionEvent  se)
  12.     {
  13.         count++;
  14.         System.out.println(“session创徏Q?new java.util.Date());
  15.     }

  16.     public void sessionDestroyed( HttpSessionEvent  se)
  17.     {
  18.        count--;
  19.        System.out.println(“session销??new java.util.Date());
  20.     }

  21.     public static int getCount()
  22.     {
  23.        return(count);
  24.      }
  25. }




  怎么P是不是一目了Ӟcount被定义ؓstaticQ是因ؓ要保证整个系l只有这一个count。如果你实在不放心,可以把它写成一个单例类?br />
  然后在web.xml中声明这个监听器Q?br /><listener>
<listener-class>
org.bromon.test.SessionCount
</listener-class>
</listener>

  ~写一个测试页面test.jspQ内Ҏ获得countQ?br /><%
int count=org.bromon.test.SessionCount.getCount();
out.println(count);
%>

  需要注意的是,q里Ҏ不涉及Q何session的操作。重启动App serverQ试着q接test.jspQ可以看到监听器已经开始工作?br />
2、 Attribute监听
  作ؓ一个站内消息系l,肯定要获得所有登陆者的IDQ才有可能互发消息。这涉及Attribute监听。假设我们写了个用户登陆的模块,用户通过w䆾验证之后会生一个sessionQ保存它的相关信息,比如Q?br />

  1. //check.jsp
  2. <%
  3.     String name=request.getParameter(“name?;
  4.     Name=new String(name.getBytes(“ISO8859-1?);
  5.     session.setAttribute(“user?name);
  6. %>



  做过jsp的兄弟应该对q段代码再熟悉不q了Q下面写个监听器来监听用L陆,把所有用LID保存C个List当中Q这个监听器实作HttpSessionAttributeListener接口Q?br />

  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package  org.bromon.test;

  6. import  javax.servlet.*;
  7. import  javax.servlet.http.*;
  8. import  java.util.*;

  9. public  class OnlineList implements  HttpSessionAttributeListener
  10. {
  11.     private static List list=new ArrayList();

  12.     public void attributeAdded( HttpSessionBindingEvent  se)
  13.     {
  14.         if(“user?equals(se.getName()))
  15.         {
  16.             list.add(se.getValue());
  17.          }
  18.     }

  19.     public void attributeRemoved( HttpSessionBindingEvent  se)
  20.     {
  21.          if(“user?equals(se.getName()))
  22.          {
  23.             list.remove(se.getValue());
  24.          }
  25.     }

  26.     public void attributeReplaced( HttpSessionBindingEvent  se){}

  27.     public static List getList()
  28.     {
  29.          return(list);
  30.      }
  31. }



写个单的jsp来得到用户列表:
<%
    java.util.List list=org.bromon.test.OnlineList.getList();
    out.println(“共有?list.size()+”名用户已登陆:?;
    for(int I=0;I<lise.size();i++)
    {
        out.println(list.get(i));
    }
%>

也许你说Q这有什么神奇呢Q监听session而已Q不着急,看看xmlhttp?br />
二、 XMLHTTP

  XMLHTTP的用处很多,q里只说我们需要的Q就是无h的与server通信Q看q段代码Q?br />

  1. <script language="javascript"
  2. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  3. var post=" ";//构造要携带的数据?/font>
  4. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POSTҎ打开一个到服务器的q接Q以异步方式通信 
  5. xml.setrequestheader("content-length",post.length); 
  6. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  7. xml.send(post);//发送数据?/font>
  8. var res = xml.responseText;//接收服务器返回的数据 
  9. document.write(res); 
  10. </script>




  豁然开朗,q段代码是打开一个HTTPq接Q以标准 的HTTP格式传递数据,如果你喜Ƣ,可以用XML的格式来传递。更改一下xml对象的构造方式就可以兼容Mozilla和Netscape。下面来写一 个轮询,每隔一D|间刷Cơ用户列表,当然Q是不需要刷新页面的Q?br />

  1. <html>
  2. <head><title>探测?lt;/title>
  3. <script language="javascript">
  4. function detect()
  5. {
  6. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  7. var post=" ";//构造要携带的数据?/font>
  8. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POSTҎ打开一个到服务器的q接Q以异步方式通信 
  9. xml.setrequestheader("content-length",post.length); 
  10. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  11. xml.send(post);//发送数据?/font>
  12. var res = xml.responseText;//接收服务器返回的数据 
  13. list.innerText=res;
  14. setTimeout(“detect()?5000);//每隔5U钟轮询一?/font>
  15. </script>
  16. <body onload=”detect()?gt;
  17. <a id=”list?gt;</a>
  18. </body>
  19. </html>


  q样的通信方式数据量很,不用重新传递整个页面,5U钟轮一ơ,普通PC也能承受较大的在U数。构造一个探器来监听在U列表和消息Q效果是很好的,即你的客户坐在电脑前袖手旁观,键鼠都不C下,也能保证数据x传递,面也不会发生蟩转和h?br />
  Session监听加上XMLHTTP通信Q开发一个较为完善的站内消息pȝ实在易如反掌?


]]>
如何在TOMCAT配置数据源,调用数据?/title><link>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63700.html</link><dc:creator>萧秋?/dc:creator><author>萧秋?/author><pubDate>Tue, 15 Aug 2006 08:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63700.html</guid><wfw:comment>http://www.aygfsteel.com/Benjamin/comments/63700.html</wfw:comment><comments>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Benjamin/comments/commentRss/63700.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Benjamin/services/trackbacks/63700.html</trackback:ping><description><![CDATA[ <p> <font color="#000000" face="Verdana" size="2">1、在TOMCAT里配|数据源Q在<host></host>之间加上下面的代码,具体的参数根据自己情况修?br />   <Context path="" docBase="E:\WEB_CODE\DEMO\WEB" debug="0"><br />   <br />   <Logger className="org.apache.catalina.logger.FileLogger"<br />                     prefix="localhost_xzm_log." suffix=".txt"<br />           timestamp="true"/></font> </p> <p> <font color="#000000" face="Verdana" size="2">          <Environment name="maxExemptions" type="java.lang.Integer"<br />                      value="15"/><br />          <Parameter name="context.param.name" value="context.param.value"<br />                     override="false"/>          <br />          <br />          <Resource name="jdbc/tzwdb" auth="Container"<br />                    type="oracle.jdbc.pool.OracleDataSource"/> <br />          <ResourceParams name="jdbc/tzwdb"><br />            <parameter><name>factory</name><value>oracle.jdbc.pool.OracleDataSourceFactory</value></parameter>            <br />            <parameter><name>driverClassName</name><value>oracle.jdbc.driver.OracleDriver</value></parameter><br />            <parameter><name>url</name><value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</value></parameter><br />            <parameter><name>username</name><value>demo</value></parameter><br />            <parameter><name>password</name><value>demo</value></parameter><br />            <parameter><name>serverName</name><value>127.0.0.1</value></parameter>            <br />            <parameter><name>databaseName</name><value>ORCL</value></parameter>            <br />            <parameter><name>portNumber</name><value>1521</value></parameter> <br />            <parameter><name>maxActive</name><value>30</value></parameter><br />            <parameter><name>maxIdle</name><value>10</value></parameter> <br />            <parameter><name>maxWait</name><value>500</value></parameter>            <br />            <parameter><name>description</name><value>oracle</value></parameter>            <br />          </ResourceParams><br />            <br />          <Resource name="mail/Session" auth="Container"<br />                    type="javax.mail.Session"/><br />          <ResourceParams name="mail/session"><br />            <parameter><br />              <name>mail.smtp.host</name><br />              <value>localhost</value><br />            </parameter><br />          </ResourceParams><br />   <br />   </Context></font> </p> <p> <font color="#000000" face="Verdana" size="2">2、连接数据库</font> </p> <p> <font color="#000000" face="Verdana" size="2">import java.sql.Connection;<br />import java.sql.PreparedStatement;<br />import java.sql.SQLException;<br />import java.sql.Statement;</font> </p> <p> <font color="#000000" face="Verdana" size="2">import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.sql.DataSource;</font> </p> <p> <font color="#000000" face="Verdana" size="2">import org.apache.log4j.Logger;</font> </p> <p> <font color="#000000" face="Verdana" size="2">/**<br /> * @author : 萧秋?br /> * <br /> * @contact me : </font> <a href="mailto:cnyanhai@hotmail.com"> <font color="#000000" face="Verdana" size="2">cnyanhai@hotmail.com</font> </a> <br /> <font color="#000000" face="Verdana" size="2"> * <br /> */<br />public class DBManager {</font> </p> <p> <br /> <font color="#000000" face="Verdana" size="2">    static Logger logger = Logger.getLogger(DBManager.class.getClass());</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private Context initCtx = null;</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private Context ctx = null;</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private DataSource ds = null;</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private long timeout = 5000;</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private Statement theStatement = null;</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private PreparedStatement thePstmt = null;<br /><br />    private static final String userName = "tzw";</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private static final String password = "ywsoft";</font> </p> <p> <font color="#000000" face="Verdana" size="2">    /***************************************************************************<br />     * <br />     * 初试化initCtx<br />     * <br />     * 取得数据源对?br />     *  <br />     **************************************************************************/</font> </p> <p> <font color="#000000" face="Verdana" size="2">    public DBManager() {<br />        try {<br />            initCtx = new InitialContext();<br />            //init contextQread config web.xml<br />            if (initCtx == null) {<br />                throw new Exception("Initial Failed!");<br />            }<br />            ctx = (Context) initCtx.lookup("java:comp/env");<br />            //find "jdbc/tzwdb" object this configruation in the SERVER.XML of<br />            // Tomcat<br />            if (ctx != null) {<br />                ds = (DataSource) ctx.lookup("jdbc/tzwdb");<br />            }<br />            if (ds == null) {<br />                throw new Exception("Look up DataSource Failed!");<br />            }<br />        } catch (Exception e) {<br />            logger.error("Look up DataSource error! -- " + e.getMessage());<br />        }<br />    }</font> </p> <p> <font color="#000000" face="Verdana" size="2">    /***************************************************************************<br />     * <br />     * get Connection<br />     * <br />     * @return Connection<br />     *  <br />     **************************************************************************/</font> </p> <p> <font color="#000000" face="Verdana" size="2">    public synchronized Connection getConnection() {<br />        //get connection and set to delay time<br />        long startTime = new java.util.Date().getTime();<br />        Connection con = null;<br />        while (con == null) {<br />            con = newConnection();<br />            if (con != null) {<br />                logger.info("Create New Connection!");<br />                break;<br />            }<br />            try {<br />                logger.info("Connection timeoutQPlease wait " + timeout + "ms");<br />                wait(timeout);<br />            } catch (InterruptedException e) {<br />                logger.warn("Connection timeout! -- " + e.getMessage());<br />            }<br />            if ((new java.util.Date().getTime() - startTime) >= timeout) {<br />                logger.warn("Connection timeout!");<br />                break;<br />            }<br />        }<br />        return con;<br />    }</font> </p> <p> <font color="#000000" face="Verdana" size="2">    private Connection newConnection() {<br />        Connection con = null;<br />        try {<br />            con = ds.getConnection(userName, password);<br />            if (con == null) {<br />                throw new Exception("Create Connection Failed!");<br />            }<br />        } catch (Exception e) {<br />            logger.warn("Create Connection Failed! -- " + e.getMessage());<br />        }<br />        return con;<br />    }</font> </p> <p> <font color="#000000" face="Verdana" size="2">    /***************************************************************************<br />     * <br />     * release the connection<br />     *  <br />     **************************************************************************/</font> </p> <p> <font color="#000000" face="Verdana" size="2">    public synchronized void freeConnection(Connection conn, PreparedStatement pstmt) {<br />        try {<br />            //close PreparedStatement<br />            if (pstmt != null) {<br />                pstmt.close();<br />                pstmt = null;<br />            }<br />        } catch (Exception e) {<br />            logger.warn("release stmt,pstmt error! -- " + e.getMessage());<br />        }<br />        try {<br />            //close Connection<br />            if (conn != null) {<br />                conn.close();<br />                conn = null;<br />            }<br />        } catch (SQLException e) {<br />            logger.warn("release conn error! -- " + e.getMessage());<br />        }<br />    }</font> </p> <font color="#000000" face="Verdana" size="2">}<br />   <br /></font> <img src ="http://www.aygfsteel.com/Benjamin/aggbug/63700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Benjamin/" target="_blank">萧秋?/a> 2006-08-15 16:03 <a href="http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在TOMCAT下JSP的中文处理解x?/title><link>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63701.html</link><dc:creator>萧秋?/dc:creator><author>萧秋?/author><pubDate>Tue, 15 Aug 2006 08:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63701.html</guid><wfw:comment>http://www.aygfsteel.com/Benjamin/comments/63701.html</wfw:comment><comments>http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Benjamin/comments/commentRss/63701.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Benjamin/services/trackbacks/63701.html</trackback:ping><description><![CDATA[ <font face="Verdana" size="2">Ҏ一Q?font color="#ff0000">new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")<br /></font><br />Ҏ二:<br />1?br />在jsp中加入下面两?br />         <font color="#ff0000"> <%@ page contentType="text/html; charset=GBK" language="java" %><br />          <meta http-equiv="Content-Type" content="text/html; charset=GBK"><br /></font>2?br />在TOMCAT中找?font color="#ff0000">SetCharacterEncodingFilter.java</font>Q他们位?font color="#ff0000">D:\Tomcat5.0.27\webapps\jsp-examples\WEB-INF\classes\filters</font>Q加C的工E文仉去,q修改包名?br />3?br />配置WEB.XMLQ?/font> <font face="Verdana" size="2">在web.xml里加入这一D?br /><font color="#ff0000"> <filter><br />    <filter-name>Set Character Encoding</filter-name><br />    <filter-class>utils.SetCharacterEncodingFilter</filter-class><br />    <init-param><br />      <param-name>encoding</param-name><br />      <param-value>GB2312</param-value><br />    </init-param><br />  </filter><br />  <filter-mapping><br />    <filter-name>Set Character Encoding</filter-name><br />    <url-pattern>/*</url-pattern><br />  </filter-mapping><br /></font>4、修改server.xml中两个部?br /><font color="#ff0000"><Connector port="8090"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               debug="0" connectionTimeout="20000" <br />               disableUploadTimeout="true" URIEncoding='GB2312'/><br /><Connector className="org.apache.coyote.tomcat5.CoyoteConnector"<br /></font></font> <font color="#ff0000" face="Verdana" size="2">               port="8009" minProcessors="5" maxProcessors="75"<br /></font> <font color="#ff0000" face="Verdana" size="2">               enableLookups="true" redirectPort="8443"<br /></font> <font color="#ff0000" face="Verdana" size="2">               acceptCount="10" debug="0" connectionTimeout="0"<br /></font> <font color="#ff0000" face="Verdana" size="2">               useURIValidationHack="false" protocol="AJP/1.3"<br />               </font> <font color="#ff0000" face="Verdana" size="2">protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" <br /></font> <font face="Verdana" size="2"> <font color="#ff0000">               URIEncoding='GB2312'/></font> </font> <img src ="http://www.aygfsteel.com/Benjamin/aggbug/63701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Benjamin/" target="_blank">萧秋?/a> 2006-08-15 16:03 <a href="http://www.aygfsteel.com/Benjamin/archive/2006/08/15/63701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JSP中执行dos命ohttp://www.aygfsteel.com/Benjamin/archive/2006/08/15/63698.html萧秋?/dc:creator>萧秋?/author>Tue, 15 Aug 2006 08:00:00 GMThttp://www.aygfsteel.com/Benjamin/archive/2006/08/15/63698.htmlhttp://www.aygfsteel.com/Benjamin/comments/63698.htmlhttp://www.aygfsteel.com/Benjamin/archive/2006/08/15/63698.html#Feedback0http://www.aygfsteel.com/Benjamin/comments/commentRss/63698.htmlhttp://www.aygfsteel.com/Benjamin/services/trackbacks/63698.html

     在JSP中我们经常要调用服务器端的一些dos命oQ已辑ֈ一些特D的效果Q但同时调用服务器端的dos命o也存在着一些安全隐患,因此需要慎重用?/font>

     以下以一个例子来说明用jsp执行dos的过E,比如在服务器端每天都会自动生成一个目录(目录名称为当天的日期Q,再此目录下会生成一些当天的新闻? Ӟ理员会把这些文件几个月作一ơ备份,备䆾完后在把q些文g删除?/font>

     如果在服务器上,我们可以在dos下直接执行c:\j2sdk\jar cf d:\bak\200502.jar d:\news\20050101 命oQ?然后再把20050101目录删除卛_?/font>

     在JSP中我们应当这么来?/font>

<%
//执行dos命o
String commandstr = "c:/j2sdk/jar cf d:/bak/200502.jar d:/news/20050101";
Process p ;
try {
   p = Runtime.getRuntime().exec(commandstr);
//{待刚刚执行的命令的l束  
while (true){  
           if(p.waitFor() == 0)   break;
   }    
   
} catch (Exception e) {
    out.println(e.toString());
   }

//删除已经打包的文件及其目?br />File f = new File("d:/news/20020101");
String[] allFiles = f.list();
for (int i = 0; i < allFiles.length; i++) {
   File delF = new File("d:/news/20050101/"+allFiles[i]);
   delF.delete();
}
File delD = new File("d:/news/20050101");
delD.delete();
%>

     在jsp中以下代码必L行,如果没有该代码,则由于删除文件的速度快于打包的速度Q因此当压羃包还没有打包完成Q一些文件已l被删除Q加入下面的代码Q? 会在此一直做循环Q一直p.waitFor()Q这个方法的说明是:{待子进E的l束Q如果已l结束,一般返?Q返?为止才会接着执行后面的代?br />while (true){  
           if(p.waitFor() == 0)   break;
   }



]]>
վ֩ģ壺 | | | ͨ| ̫| ˳| | »Ȱ| ɽ| | | | ƽ| | | ¤| | ƽ| | Ͻ| ̶| ֹ| | ͭϿ| گ| Ī| ³ľ| | | ɽ| ˫| ʩ| | | ŷ| | | Ʊ| ԣ| | |