锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
聽聽聽
聽聽聽<Logger className="org.apache.catalina.logger.FileLogger"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 prefix="localhost_xzm_log." suffix=".txt"
聽聽聽聽聽聽聽 聽聽 timestamp="true"/>
聽聽聽聽聽聽聽聽聽 <Environment name="maxExemptions" type="java.lang.Integer"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 value="15"/>
聽聽聽聽聽聽聽聽聽 <Parameter name="context.param.name" value="context.param.value"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 override="false"/>聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽 <Resource name="jdbc/tzwdb" auth="Container"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 type="oracle.jdbc.pool.OracleDataSource"/>
聽聽聽聽聽聽聽聽聽 <ResourceParams name="jdbc/tzwdb">
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>factory</name><value>oracle.jdbc.pool.OracleDataSourceFactory</value></parameter>聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>driverClassName</name><value>oracle.jdbc.driver.OracleDriver</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>url</name><value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>username</name><value>demo</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>password</name><value>demo</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>serverName</name><value>127.0.0.1</value></parameter>聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>databaseName</name><value>ORCL</value></parameter>聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>portNumber</name><value>1521</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>maxActive</name><value>30</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>maxIdle</name><value>10</value></parameter>
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>maxWait</name><value>500</value></parameter>聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 <parameter><name>description</name><value>oracle</value></parameter>聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽 </ResourceParams>
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽 <Resource name="mail/Session" auth="Container"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 type="javax.mail.Session"/>
聽聽聽聽聽聽聽聽聽 <ResourceParams name="mail/session">
聽聽聽聽聽聽聽聽聽聽聽 <parameter>
聽聽聽聽聽聽聽聽聽聽聽聽聽 <name>mail.smtp.host</name>
聽聽聽聽聽聽聽聽聽聽聽聽聽 <value>localhost</value>
聽聽聽聽聽聽聽聽聽聽聽 </parameter>
聽聽聽聽聽聽聽聽聽 </ResourceParams>
聽聽聽
聽聽聽</Context>
2銆佽繛鎺ユ暟鎹簱
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
/**
聽* @author :聽钀х姘?br />聽*
聽* @contact me :
cnyanhai@hotmail.com
聽*
聽*/
public class DBManager {
聽聽聽 static Logger logger = Logger.getLogger(DBManager.class.getClass());
聽聽聽 private Context initCtx = null;
聽聽聽 private Context ctx = null;
聽聽聽 private DataSource ds = null;
聽聽聽 private long timeout = 5000;
聽聽聽 private Statement theStatement = null;
聽聽聽 private PreparedStatement thePstmt = null;
聽聽聽 private static final String userName = "tzw";
聽聽聽 private static final String password = "ywsoft";
聽聽聽 /***************************************************************************
聽聽聽聽 *
聽聽聽聽 * 鍒濊瘯鍖杋nitCtx
聽聽聽聽 *
聽聽聽聽 * 鍙栧緱鏁版嵁婧愬璞?br />聽聽聽聽 *聽
聽聽聽聽 **************************************************************************/
聽聽聽 public DBManager() {
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 initCtx = new InitialContext();
聽聽聽聽聽聽聽聽聽聽聽 //init context錛宺ead config web.xml
聽聽聽聽聽聽聽聽聽聽聽 if (initCtx == null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 throw new Exception("Initial Failed!");
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 ctx = (Context) initCtx.lookup("java:comp/env");
聽聽聽聽聽聽聽聽聽聽聽 //find "jdbc/tzwdb" object this configruation in the SERVER.XML of
聽聽聽聽聽聽聽聽聽聽聽 // Tomcat
聽聽聽聽聽聽聽聽聽聽聽 if (ctx != null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ds = (DataSource) ctx.lookup("jdbc/tzwdb");
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 if (ds == null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 throw new Exception("Look up DataSource Failed!");
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } catch (Exception e) {
聽聽聽聽聽聽聽聽聽聽聽 logger.error("Look up DataSource error! -- " + e.getMessage());
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 /***************************************************************************
聽聽聽聽 *
聽聽聽聽 * get Connection
聽聽聽聽 *
聽聽聽聽 * @return Connection
聽聽聽聽 *聽
聽聽聽聽 **************************************************************************/
聽聽聽 public synchronized Connection getConnection() {
聽聽聽聽聽聽聽 //get connection and set to delay time
聽聽聽聽聽聽聽 long startTime = new java.util.Date().getTime();
聽聽聽聽聽聽聽 Connection con = null;
聽聽聽聽聽聽聽 while (con == null) {
聽聽聽聽聽聽聽聽聽聽聽 con = newConnection();
聽聽聽聽聽聽聽聽聽聽聽 if (con != null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 logger.info("Create New Connection!");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 logger.info("Connection timeout錛孭lease wait " + timeout + "ms");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wait(timeout);
聽聽聽聽聽聽聽聽聽聽聽 } catch (InterruptedException e) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 logger.warn("Connection timeout! -- " + e.getMessage());
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 if ((new java.util.Date().getTime() - startTime) >= timeout) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 logger.warn("Connection timeout!");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return con;
聽聽聽 }
聽聽聽 private Connection newConnection() {
聽聽聽聽聽聽聽 Connection con = null;
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 con = ds.getConnection(userName, password);
聽聽聽聽聽聽聽聽聽聽聽 if (con == null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 throw new Exception("Create Connection Failed!");
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } catch (Exception e) {
聽聽聽聽聽聽聽聽聽聽聽 logger.warn("Create Connection Failed! -- " + e.getMessage());
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return con;
聽聽聽 }
聽聽聽 /***************************************************************************
聽聽聽聽 *
聽聽聽聽 * release the connection
聽聽聽聽 *聽
聽聽聽聽 **************************************************************************/
聽聽聽 public synchronized void freeConnection(Connection conn, PreparedStatement pstmt) {
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 //close PreparedStatement
聽聽聽聽聽聽聽聽聽聽聽 if (pstmt != null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pstmt.close();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pstmt = null;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } catch (Exception e) {
聽聽聽聽聽聽聽聽聽聽聽 logger.warn("release stmt,pstmt error! -- " + e.getMessage());
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 //close Connection
聽聽聽聽聽聽聽聽聽聽聽 if (conn != null) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 conn.close();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 conn = null;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 } catch (SQLException e) {
聽聽聽聽聽聽聽聽聽聽聽 logger.warn("release conn error! -- " + e.getMessage());
聽聽聽聽聽聽聽 }
聽聽聽 }
}
聽聽聽
銆銆鎬庝箞鏍鳳紝鏄笉鏄竴鐩簡鐒訛紵count琚畾涔変負(fù)static錛屾槸鍥犱負(fù)瑕佷繚璇佹暣涓郴緇熷彧鏈夎繖涓涓猚ount銆傚鏋滀綘瀹炲湪涓嶆斁蹇冿紝鍙互鎶婂畠鍐欐垚涓涓崟渚嬬被銆?BR>
銆銆鐒跺悗鍦╳eb.xml涓0鏄庤繖涓洃鍚櫒錛?BR><listener>
<listener-class>
org.bromon.test.SessionCount
</listener-class>
</listener>
銆銆緙栧啓涓涓祴璇曢〉闈est.jsp錛屽唴瀹規(guī)槸鑾峰緱count錛?BR><%
int count=org.bromon.test.SessionCount.getCount();
out.println(count);
%>
銆銆闇瑕佹敞鎰忕殑鏄紝榪欓噷鏍規(guī)湰涓嶆秹鍙?qiáng)鋼Q浣晄ession鐨勬搷浣溿傞噸鍚姩App server錛岃瘯鐫榪炴帴test.jsp錛屽彲浠ョ湅鍒扮洃鍚櫒宸茬粡寮濮嬪伐浣溿?BR>
2銆?nbsp;Attribute鐩戝惉
銆銆浣滀負(fù)涓涓珯鍐呮秷鎭郴緇燂紝鑲畾瑕佽幏寰楁墍鏈夌櫥闄嗚呯殑ID錛屾墠鏈夊彲鑳戒簰鍙戞秷鎭傝繖灝辨秹鍙?qiáng)Attribute鐩戝惉銆傚亣璁炬垜浠啓浜嗕釜鐢ㄦ埛鐧婚檰鐨勬ā鍧楋紝鐢ㄦ埛閫氳繃韜喚楠岃瘉涔嬪悗浼?xì)漶旂敓涓涓猻ession錛屼繚瀛樺畠鐨勭浉鍏充俊鎭紝姣斿錛?BR>
銆銆鍋氳繃jsp鐨勫厔寮熷簲璇ュ榪欐浠g爜鍐嶇啛鎮(zhèn)変笉榪囦簡錛屼笅闈㈠啓涓洃鍚櫒鏉ョ洃鍚敤鎴風(fēng)櫥闄嗭紝鎶婃墍鏈夌敤鎴風(fēng)殑ID淇濆瓨鍒頒竴涓狶ist褰撲腑錛岃繖涓洃鍚櫒瀹炰綔HttpSessionAttributeListener鎺ュ彛錛?BR>
鍐欎釜綆鍗曠殑jsp鏉ュ緱鍒扮敤鎴峰垪琛細(xì)
<%
java.util.List list=org.bromon.test.OnlineList.getList();
out.println(鈥滃叡鏈夆?list.size()+鈥濆悕鐢ㄦ埛宸茬櫥闄嗭細(xì)鈥?;
for(int I=0;I<lise.size();i++)
{
out.println(list.get(i));
}
%>
涔熻浣犺錛岃繖鏈変粈涔堢濂囧憿錛岀洃鍚瑂ession鑰屽凡錛屼笉鐫鎬ワ紝鐪嬬湅xmlhttp銆?BR>
浜屻?nbsp;XMLHTTP
銆銆XMLHTTP鐨勭敤澶勫緢澶氾紝榪欓噷鍙鎴戜滑闇瑕佺殑錛屽氨鏄棤鍒鋒柊鐨勪笌server閫氫俊錛岀湅榪欐浠g爜錛?BR>
銆銆璞佺劧寮鏈楋紝榪欐浠g爜灝辨槸鎵撳紑涓涓狧TTP榪炴帴錛屼互鏍囧噯鐨凥TTP鏍煎紡浼犻掓暟鎹紝濡傛灉浣犲枩嬈紝鍙互鐢╔ML鐨勬牸寮忔潵浼犻掋傛洿鏀逛竴涓媥ml瀵硅薄鐨勬瀯閫犳柟寮忓氨鍙互鍏煎Mozilla鍜孨etscape銆備笅闈㈡潵鍐欎竴涓疆璇紝姣忛殧涓孌墊椂闂村埛鏂頒竴嬈$敤鎴峰垪琛紝褰撶劧錛屾槸涓嶉渶瑕佸埛鏂伴〉闈㈢殑錛?BR>
銆銆榪欐牱鐨勯氫俊鏂瑰紡鏁版嵁閲忓緢灝忥紝涓嶇敤閲嶆柊浼犻掓暣涓〉闈紝5縐掗挓杞竴嬈★紝鏅歅C涔熻兘鎵垮彈杈冨ぇ鐨勫湪綰挎暟銆傛瀯閫犱竴涓帰嫻嬪櫒鏉ョ洃鍚湪綰垮垪琛ㄥ拰娑堟伅錛屾晥鏋滄槸寰堝ソ鐨勶紝鍗充嬌浣犵殑瀹㈡埛鍧愬湪鐢?shù)鑴戝墠琚栨墜鏃佽锛岄敭榧犻兘涓嵓勵(lì)C竴涓嬶紝涔熻兘淇濊瘉鏁版嵁鍗蟲椂浼犻掞紝欏甸潰涔熶笉浼?xì)鍙戠敓锜╄浆鍜屽堜h柊銆?BR>
銆銆Session鐩戝惉鍔犱笂XMLHTTP閫氫俊錛屽紑鍙戜竴涓緝涓哄畬鍠勭殑绔欏唴娑堟伅緋葷粺瀹炲湪鏄撳鍙嶆帉銆?