人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

用Java完成可保存狀態(tài)的數(shù)據(jù)庫(kù)生成XML樹(shù)(4)

用Java完成可保存狀態(tài)的數(shù)據(jù)庫(kù)生成XML樹(shù)(4)

更新時(shí)間:2022-08-27 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

4.5.構(gòu)造生成點(diǎn)擊樹(shù)型XMl顯示詳細(xì)節(jié)點(diǎn)內(nèi)容的Servlet
在點(diǎn)擊樹(shù)的樹(shù)杈節(jié)點(diǎn)時(shí),會(huì)使當(dāng)前點(diǎn)擊節(jié)點(diǎn)發(fā)生變化,這種變化會(huì)要反映到節(jié)點(diǎn)的詳細(xì)狀態(tài)信息顯示上,這種頁(yè)面之間的通訊在這里是通過(guò)改變cookie中的點(diǎn)擊對(duì)象的值來(lái)傳遞的,使用這種方式的原因有:
一,處理反應(yīng)快,因?yàn)橹皇菍?duì)客戶端的cookie進(jìn)行一些簡(jiǎn)單的讀寫操作,避免了一些較為煩瑣,耗時(shí)的通訊和服務(wù)器處理過(guò)程;
二,對(duì)點(diǎn)擊的安全性要求不高,點(diǎn)擊對(duì)象是顯式操作的,沒(méi)有敏感的客戶信息和服務(wù)器信息,所以是可以保存在客戶端的cookie中的;
三,代碼編寫,維護(hù)較為簡(jiǎn)單,在點(diǎn)擊頁(yè)面中只是需要用javascript把點(diǎn)擊對(duì)象寫入cookie中,再刷新節(jié)點(diǎn)詳細(xì)顯示頁(yè)面即可,在節(jié)點(diǎn)詳細(xì)顯示頁(yè)面也只是節(jié)點(diǎn)向服務(wù)器重新請(qǐng)求一次該頁(yè)面;
實(shí)現(xiàn)節(jié)點(diǎn)詳細(xì)信息的頁(yè)面的主體仍是由XMLServlet生成的XML樹(shù),實(shí)現(xiàn)XSL模版的是Servlet XMLTreeXSL,該XSL主要是在XML提取符合要求的節(jié)點(diǎn),顯示節(jié)點(diǎn)的詳細(xì)信息,并把節(jié)點(diǎn)的最近子節(jié)點(diǎn)的詳細(xì)信息顯示出來(lái),確認(rèn)符合要求的節(jié)點(diǎn)是通過(guò)提取客戶端瀏覽器cookie中的點(diǎn)擊對(duì)象記錄得到的.所以該Servlet完成兩部分任務(wù),讀取瀏覽器cookie然后書(shū)寫XSL.下面是對(duì)該Servlet代碼的主要分析:

/**讀取cookie和書(shū)寫XSL*/
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
/**確認(rèn)有XML樹(shù)需要進(jìn)行模版轉(zhuǎn)換,通過(guò)Session中是否含有Sessionbean來(lái)確認(rèn)*/
HttpSession session=request.getSession();
if( session.getAttribute("ResultEditHandle")==null) {
flag=false;
}
else {
flag=true;
}
if (flag) {
/**cookie中可能含有多個(gè)子cookie信息,用一個(gè)數(shù)組保存多個(gè)cookie*/
javax.servlet.http.Cookie cookies[] = request.getCookies();
String t_click_id = null;
/**書(shū)寫XSL還需要遵循XML書(shū)寫規(guī)范,標(biāo)簽要一一對(duì)應(yīng)*/
response.setContentType(CONTENT_TYPE);
out = response.getWriter();
out.println(CONTENT_XSL);
out.println("<xsl:template match=\"/\">");
out.println("<HTML>");
out.println("<HEAD><STYLE>body{FONT-SIZE: 10pt;}</STYLE></HEAD>");
/**select=”//node”是對(duì)所有的node進(jìn)行訪問(wèn),而不僅僅局限于頂層的node*/
out.println("<BODY><xsl:apply-templates select=\"//node\"/></BODY></HTML></xsl:template>");
if ((cookies == null)||(cookies.length == 0)){
out.println("No Clicked Node");
}
/**cookie不為空且子cookie的個(gè)數(shù)不為零,遍歷cookie*/
else {
for(int i = 0;i < cookies.length; i++){
javax.servlet.http.Cookie c =cookies[i];
/**當(dāng)遍歷的子cookie的名稱為ClickId時(shí)書(shū)寫XSL*/
if ( c.getName().equals("ClickId")){
/**t_click_id的值為點(diǎn)擊對(duì)象的id*/



4.6.Servlet調(diào)用的Session Bean的構(gòu)造
XML樹(shù)是從數(shù)據(jù)庫(kù)中得到相應(yīng)結(jié)果集而構(gòu)造的,這個(gè)結(jié)果集如果不采用EJB的方式可以用ResultSet來(lái)完成,但是如果考慮采用EJB來(lái)做,那么就需要放棄使用ResultSet,因?yàn)樗遣豢尚蛄谢?不能直接為EJB所用,使用RowSet或者CachedRowSet這些可序列化的結(jié)果集對(duì)象來(lái)實(shí)現(xiàn).
這里構(gòu)造的SessionBean是有狀態(tài)的,需要構(gòu)造的有遠(yuǎn)程接口,home接口和bean類.
遠(yuǎn)程接口, ResultEdit.java
home接口, ResultEditHome.java
bean類, ResultEditBean.java
對(duì)如何實(shí)現(xiàn)bean類進(jìn)行詳細(xì)描述,

public class ResultEditBean implements SessionBean {
/**Session容器定義*/
private SessionContext sessionContext;
public int id;
public String name;
/**結(jié)果集定義,定義結(jié)果集類型為sun.jdbc.rowset.CachedRowSet*/
private CachedRowSet crset=null;
/**容器定義*/
private Context ctx = null;
/**數(shù)據(jù)源定義*/
private DataSource ds = null;
/**構(gòu)造函數(shù)*/
public ResultEditBean() {
}
/**EJB創(chuàng)建,該方法是每個(gè)EJB定義都必須有,方法里面包含EJB的創(chuàng)建過(guò)程*/
public void ejbCreate() {
 try {
/**容器初始化*/
 ctx = new InitialContext();
/**從容器獲得DataSource名稱為imis的實(shí)例*/
ds = (DataSource)ctx.lookup("java:comp/env/imis");
 }
catch (Exception e) {
 System.out.println("ejbCreate failed:"+e.getMessage());
 e.printStackTrace();
}
 }

 /**以下幾個(gè)ejb開(kāi)頭的方法是構(gòu)造EJB時(shí)必須的,分別處理著相應(yīng)的事件*/
 public void ejbRemove() throws RemoteException {
 }
 public void ejbActivate() throws RemoteException {
 }
 public void ejbPassivate() throws RemoteException {
 }
 public void setSessionContext(SessionContext sessionContext) throws RemoteException {
 this.sessionContext = sessionContext;
 }
/**getRowSet()返回私有成員crset,該方法在遠(yuǎn)程接口中有定義*/
 public RowSet getRowSet() throws SQLException {
return crset;
 }
/**setRowSet(String sqlExp)通過(guò)定義好的數(shù)據(jù)源連接數(shù)據(jù)庫(kù),并用查詢語(yǔ)句獲得結(jié)果集*/
 public RowSet setRowSet(String sqlExp) throws SQLException {
 Connection con = null;
 try {
 con = ds.getConnection();
 Statement stmt = con.createStatement();
 ResultSet rs =stmt.executeQuery(sqlExp);
 CachedRowSet t_crset = new CachedRowSet();
 t_crset.populate(rs);
 rs.close();
 stmt.close();
 crset = t_crset;
 return t_crset;
 }
 finally {
 if (con != null) con.close();
 }
 }
SessionBean在附錄中有完整的代碼和EJB發(fā)布的完整過(guò)程.
 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 南江县| 东台市| 英吉沙县| 泽普县| 神农架林区| 汽车| 丰镇市| 邢台市| 手游| 博湖县| 江陵县| 和顺县| 东平县| 开封市| 伽师县| 古交市| 南漳县| 新和县| 常德市| 油尖旺区| 吕梁市| 茶陵县| 南乐县| 临泽县| 大同县| 安泽县| 荆门市| 汝阳县| 衢州市| 诸暨市| 新蔡县| 青岛市| 当阳市| 昌黎县| 唐海县| 邵阳县| 大丰市| 九龙县| 桑植县| 西和县| 海城市|