古詩詞大全網 - 成語經典 - 壹個完整的新聞發布系統代碼

壹個完整的新聞發布系統代碼

 環境 Tomcat + J SE + PostgreSQL

 我將分幾個步驟完成對壹個新聞發布系統的構建 來理解JSP的壹些基本使用方法!

 首先我將先介紹這個新聞發布系統的基本結構

 index jsp 管理員登陸界面 check jsp 驗證管理員身份 main jsp 管理員添加新聞的頁面 pub jsp 發布信息的頁面 display 顯示所有的新聞

 而後臺的程序主要有

 DB java 數據庫連接 MD java MD 算法 PubBean java 發布 CheckBean java 核實登陸身份

 即當妳從index > main > display 走壹趟妳基本就可以完成壹個新聞發布系統的基本功能了!

 我並非把新聞的標題和內容都寫入數據庫 因為那樣太耗費數據庫系統的資源 而且在訪問的時候總要讀取數

 據庫 很費勁 我把新聞寫入了壹個單獨的HTM文件 之後把標題及HTM文件的名字寫入的數據庫!

 而這個HTM文件的名字怎麽隨機生成呢?我選擇了MD 算法 因為每個新聞的標題都不會相同 所以保證了唯壹

 性!

 下面我先把這個系統的基本框架勾勒出來 說的大壹點 這似乎就是這個“系統”的“內核”啦!:)

 ================數據庫部分==================

 CREATE TABLE administrator ( ? admin char( ) ? "password" char( ) ) WITHOUT OIDS; ALTER TABLE administrator OWNER TO admin;

 CREATE TABLE news ( ? title char( ) ? page char( ) ) WITHOUT OIDS; ALTER TABLE news OWNER TO admin;

 ================程序部分==================

  package login;

 import java sql *;

 public class DB {

 private Connection conn; ?private Statement stmt; ?private ResultSet rs; public DB() { try { ?Class forName(" postgresql Driver"); ?conn = DriverManager getConnection

 ("jdbc:postgresql://localhost: /news?user=admin&&password="); ?stmt = conn createStatement();? } catch(Exception e) { ?System out println(e); } ?} public void update(String sql) { try { ?stmt executeUpdate(sql); } catch(Exception e) { ?System out println(e); } ?} public ResultSet quarry(String sql) { try { ?rs = stmt executeQuery(sql); } catch(Exception e) { ?System out println(e); } return rs; ?} ? }

  package login;

 import java sql *; import java io *;

 public class PubBean { private String title context; ?private DB db; ?private MD md ; public PubBean() { db = new DB(); md = new MD (); } public void setTitle(String title){ this title = title; ?} public void setContext(String context) { this context = context; ?}

 public void pubIt() { try { ?title = new String(title getBytes(" _ ") "gb "); ?context = new String(context getBytes(" _ ") "gb "); ?String titleMD = md getkeyBeanofStr(title); ?db update("insert into news values( "+title+" "+titleMD +" )"); ?String file = "news\\ice"+titleMD +" "; ?PrintWriter pw = new PrintWriter(new FileOutputStream(file)); ?pw println("<title>"+title+"</title>"); ?pw println(context); ?pw close();? } catch(Exception e){ ?System out println(e); } ?} ? }

  package login;

 import java sql *;

 public class CheckBean { private String message="" admin password; ?private DB db; public CheckBean() { db = new DB(); } public void setAdmin(String admin){ this admin = admin; ?} public void setPassword(String password) { this password = password; ?} public String checkIt() { try { ?ResultSet rs = db quarry("select * from administrator where

 admin= "+this admin+" "); ?while(rs next()){ String pws = rs getString("password") trim(); if(pws equals(this password)){ ?message = "密碼正確!";? } else message = "密碼錯誤!"; return message; ?} ?message = "用戶不存在!"; } catch(Exception e) { ?System out println(e); } return message; ?} ? }

  ================頁面部分==================

 index jsp:

 <%@ page contentType="text/;charset=gb "%> <><head><title>登陸系統</title></head> <body> <form name=login action="check jsp" method="post"> ?用戶 <input type=text name=admin><br> ?密碼 <input type=password name=password><br> ?<input type=submit value="登陸"><br> </form> </body> </> <% ?String error=request getParameter("error"); ?error=new String(error getBytes(" _ ") "gb "); ?if(error==null)?{} ?else{ %> <%=error%> <% ?} %>

 check jsp

 <%@ page contentType="text/;charset=gb "%> <%@ page import="login CheckBean"%> <% ?String admin = request getParameter("admin"); ?String password = request getParameter("password"); %> <jsp:useBean id="checkBean" class="login CheckBean"/> <jsp:setProperty name=checkBean property="admin" value="<%= admin trim() %>"/> <jsp:setProperty name=checkBean property="password" value="<%= password trim() %>"/> <% ?String result = checkBean checkIt(); ?if(result equals("密碼正確!")){ session setAttribute("admin" admin); response sendRedirect("main jsp"); ?} ?else ?{ %> <jsp:forward page="index jsp"> ?<jsp:param name=error value="<%=result%>"/> </jsp:forward> <% ?} %>

 main jsp

 <%@ page contentType="text/;charset=gb "%> <% ?String admin =(String)(session getAttribute("admin")); ?if(admin==null){ response sendRedirect("index jsp"); ?} ?else{ %> <><head><title>新聞發布</title></head> <body> <form name=pub action="pub jsp" method="post"> ?題目 <input type=text name=title><br> ?內容 <textarea cols=" " rows=" " name=context></textarea><br> ?<input type=submit value="提交"><br> </form> </body> </> <%}%>

 pub jsp

 <%@ page contentType="text/;charset=gb "%> <% ?String admin = (String)(session getAttribute("admin")); ?String title = request getParameter("title"); ?String context = request getParameter("context"); ?if(admin == null){ response sendRedirect("index jsp"); ?} ?else{ ?%> <jsp:useBean id="pubBean" class="login PubBean"/> <jsp:setProperty name=pubBean property="title" value="<%= title trim() %>"/> <jsp:setProperty name=pubBean property="context" value="<%= context %>"/> ?<% pubBean pubIt(); response sendRedirect("display jsp"); ?} %>

 display jsp

 <%@ page contentType="text/;charset=gb "%> <%@ page import="java sql *"%> <% ?Class forName("sun jdbc odbc JdbcOdbcDriver"); ?Connection conn=DriverManager getConnection("jdbc:odbc:PostgreSQL" "" ""); ?Statement stmt=conn createStatement();? %> <><head><title>新聞</title></head> <body> <% ?ResultSet rs=stmt executeQuery("SELECT * FROM news"); ?//顯示記錄 ?while(rs next()){ out print("<a href=news/ice"+rs getString( )+" target=_blank>"+rs getString

 ( )+"</a>"); out println("<br>"); ?}%> </body> </>

  好了 基本的東西都實現了 希望現在已經可以給妳壹個完整的面貌了 在後面的文章中 我再把程序壹步步

 的完善 增加壹些新的功能!

 import java lang reflect *;

 public class MD { ? /* 下面這些S S 實際上是壹個 * 的矩陣 在原始的C實現中是用#define 實現的 ? 這裏把它們實現成為static final是表示了只讀 切能在同壹個進程空間內的多個 ? Instance間***享*/ ? static final int S = ; ? static final int S = ; ? static final int S = ; ? static final int S = ;

 static final int S = ; ? static final int S = ; ? static final int S = ; ? static final int S = ;

 static final int S = ; ? static final int S = ; ? static final int S = ; ? static final int S = ;

 static final int S = ; ? static final int S = ; ? static final int S = ; ? static final int S = ;

 static final byte[] PADDING = { ? }; ? /* 下面的三個成員是keyBean計算過程中用到的 個核心數據 在原始的C實現中 被定義到keyBean_CTX結構中

 */ ? private long[] state = new long[ ];? // state (ABCD) ? private long[] count = new long[ ];? // number of bits modulo ^ (l *** first) ? private byte[] buffer = new byte[ ]; // input buffer

 /* digestHexStr是keyBean的唯壹壹個公***成員 是最新壹次計算結果的 ? 進制ASCII表示 ? */ ? public String digestHexStr;

 /* digest 是最新壹次計算結果的 進制內部表示 表示 bit的keyBean值 ? */ ? private byte[] digest = new byte[ ];

 /* ? getkeyBeanofStr是類keyBean最主要的公***方法 入口參數是妳想要進行keyBean變換的字符串 ? 返回的是變換完的結果 這個結果是從公***成員digestHexStr取得的. ? */ ? public String getkeyBeanofStr(String inbuf) { ? keyBeanInit(); ? keyBeanUpdate(inbuf getBytes() inbuf length()); ? keyBeanFinal(); ? digestHexStr = ""; ? for (int i = ; i < ; i++) { ? digestHexStr += byteHEX(digest[i]); ? } ? return digestHexStr;

 } ? // 這是keyBean這個類的標準構造函數 JavaBean要求有壹個public的並且沒有參數的構造函數 ? public MD () { ? keyBeanInit();

 return; ? }

  ? /* keyBeanInit是壹個初始化函數 初始化核心變量 裝入標準的幻數 */ ? private void keyBeanInit() { ? count[ ] = L; ? count[ ] = L; ? ///* Load magic initialization constants

 state[ ] = x L; ? state[ ] = xefcdab L; ? state[ ] = x badcfeL; ? state[ ] = x L;

 return; ? } ? /* F G H I 是 個基本的keyBean函數 在原始的keyBean的C實現中 由於它們是 ? 簡單的位運算 可能出於效率的考慮把它們實現成了宏 在java中 我們把它們實現成了private方法 名字保持了原來C中的 */

 private long F(long x long y long z) { ? return (x & y) | ((~x) & z);

 } ? private long G(long x long y long z) { ? return (x & z) | (y & (~z));

 } ? private long H(long x long y long z) { ? return x ^ y ^ z; ? }

 private long I(long x long y long z) { ? return y ^ (x | (~z)); ? }

 /* ? FF GG HH和II將調用F G H I進行近壹步變換 ? FF GG HH and II transformations for rounds and ? Rotation is separate from addition to prevent reputation */

 private long FF(long a long b long c long d long x long s ? long ac) { ? a += F (b c d) + x + ac; ? a = ((int) a << s) | ((int) a >>> ( s)); ? a += b; ? return a; ? }

 private long GG(long a long b long c long d long x long s ? long ac) { ? a += G (b c d) + x + ac; ? a = ((int) a << s) | ((int) a >>> ( s)); ? a += b; ? return a; ? } ? private long HH(long a long b long c long d long x long s ? long ac) { ? a += H (b c d) + x + ac; ? a = ((int) a << s) | ((int) a >>> ( s)); ? a += b; ? return a; ? } ? private long II(long a long b long c long d long x long s ? long ac) { ? a += I (b c d) + x + ac; ? a = ((int) a << s) | ((int) a >>> ( s)); ? a += b; ? return a; ? } ? /* keyBeanUpdate是keyBean的主計算過程 inbuf是要變換的字節串 inputlen是長度 這個 函數由getkeyBeanofStr調用 調用之前需要調用keyBeaninit 因此把它設計成private的 ? */ ? private void keyBeanUpdate(byte[] inbuf int inputLen) {

 int i index partLen; ? byte[] block = new byte[ ]; ? index = (int)(count[ ] >>> ) & x F; ? // /* Update number of bits */ ? if ((count[ ] += (inputLen << )) < (inputLen << )) ? count[ ]++; ? count[ ] += (inputLen >>> );

 partLen = index;

 // Transform as many times as possible ? if (inputLen >= partLen) { ? keyBeanMemcpy(buffer inbuf index partLen); ? keyBeanTransform(buffer);

 for (i = partLen; i + < inputLen; i += ) {

 keyBeanMemcpy(block inbuf i ); ? keyBeanTransform (block); ? } ? index = ;

 } else

 i = ;

 ///* Buffer remaining input */ ? keyBeanMemcpy(buffer inbuf index i inputLen i);

 }

 /* ? keyBeanFinal整理和填寫輸出結果 ? */ ? private void keyBeanFinal () { ? byte[] bits = new byte[ ]; ? int index padLen;

 ///* Save number of bits */ ? Encode (bits count );

 ///* Pad out to mod ? index = (int)(count[ ] >>> ) & x f; ? padLen = (index < ) ? ( index) : ( index); ? keyBeanUpdate (PADDING padLen);

 ///* Append length (before padding) */ ? keyBeanUpdate(bits );

 ///* Store state in digest */ ? Encode (digest state );

 }

 /* keyBeanMemcpy是壹個內部使用的byte數組的塊拷貝函數 從input的inpos開始把len長度的 字節拷貝到output的outpos位置開始 ? */

 private void keyBeanMemcpy (byte[] output byte[] input ? int outpos int inpos int len) ? { ? int i;

 for (i = ; i < len; i++) ? output[outpos + i] = input[inpos + i]; ? }

 /* keyBeanTransform是keyBean核心變換程序 有keyBeanUpdate調用 block是分塊的原始字節 ? */ ? private void keyBeanTransform (byte block[]) { ? long a = state[ ] b = state[ ] c = state[ ] d = state[ ]; ? long[] x = new long[ ];

 Decode (x block );

 /* Round */ ? a = FF (a b c d x[ ] S xd aa L); /* */ ? d = FF (d a b c x[ ] S xe c b L); /* */ ? c = FF (c d a b x[ ] S x dbL); /* */ ? b = FF (b c d a x[ ] S xc bdceeeL); /* */ ? a = FF (a b c d x[ ] S xf c fafL); /* */ ? d = FF (d a b c x[ ] S x c aL); /* */ ? c = FF (c d a b x[ ] S xa L); /* */ ? b = FF (b c d a x[ ] S xfd L); /* */ ? a = FF (a b c d x[ ] S x d L); /* */ ? d = FF (d a b c x[ ] S x b f afL); /* */ ? c = FF (c d a b x[ ] S xffff bb L); /* */ ? b = FF (b c d a x[ ] S x cd beL); /* */ ? a = FF (a b c d x[ ] S x b L); /* */ ? d = FF (d a b c x[ ] S xfd L); /* */ ? c = FF (c d a b x[ ] S xa eL); /* */ ? b = FF (b c d a x[ ] S x b L); /* */

 /* Round */ ? a = GG (a b c d x[ ] S xf e L); /* */ ? d = GG (d a b c x[ ] S xc b L); /* */ ? c = GG (c d a b x[ ] S x e a L); /* */ ? b = GG (b c d a x[ ] S xe b c aaL); /* */ ? a = GG (a b c d x[ ] S xd f dL); /* */ ? d = GG (d a b c x[ ] S x L); /* */ ? c = GG (c d a b x[ ] S xd a e L); /* */ ? b = GG (b c d a x[ ] S xe d fbc L); /* */ ? a = GG (a b c d x[ ] S x e cde L); /* */ ? d = GG (d a b c x[ ] S xc d L); /* */ ? c = GG (c d a b x[ ] S xf d d L); /* */ ? b = GG (b c d a x[ ] S x a edL); /* */ ? a = GG (a b c d x[ ] S xa e e L); /* */ ? d = GG (d a b c x[ ] S xfcefa f L); /* */ ? c = GG (c d a b x[ ] S x f d L); /* */ ? b = GG (b c d a x[ ] S x d a c aL); /* */

 /* Round */ ? a = HH (a b c d x[ ] S xfffa L); /* */ ? d = HH (d a b c x[ ] S x f L); /* */ ? c = HH (c d a b x[ ] S x d d L); /* */ ? b = HH (b c d a x[ ] S xfde cL); /* */ ? a = HH (a b c d x[ ] S xa beea L); /* */ ? d = HH (d a b c x[ ] S x bdecfa L); /* */ ? c = HH (c d a b x[ ] S xf bb b L); /* */ ? b = HH (b c d a x[ ] S xbebfbc L); /* */ ? a = HH (a b c d x[ ] S x b ec L); /* */ ? d = HH (d a b c x[ ] S xeaa faL); /* */ ? c = HH (c d a b x[ ] S xd ef L); /* */ ? b = HH (b c d a x[ ] S x d L); /* */ ? a = HH (a b c d x[ ] S xd d d L); /* */ ? d = HH (d a b c x[ ] S xe db e L); /* */ ? c = HH (c d a b x[ ] S x fa cf L); /* */ ? b = HH (b c d a x[ ] S xc ac L); /* */

 /* Round */ ? a = II (a b c d x[ ] S xf L); /* */ ? d = II (d a b c x[ ] S x aff L); /* */ ? c = II (c d a b x[ ] S xab a L); /* */ ? b = II (b c d a x[ ] S xfc a L); /* */ ? a = II (a b c d x[ ] S x b c L); /* */ ? d = II (d a b c x[ ] S x f ccc L); /* */ ? c = II (c d a b x[ ] S xffeff dL); /* */ ? b = II (b c d a x[ ] S x dd L); /* */ ? a = II (a b c d x[ ] S x fa e fL); /* */ ? d = II (d a b c x[ ] S xfe ce e L); /* */ ? c = II (c d a b x[ ] S xa L); /* */ ? b = II (b c d a x[ ] S x e a L); /* */ ? a = II (a b c d x[ ] S xf e L); /* */ ? d = II (d a b c x[ ] S xbd af L); /* */ ? c = II (c d a b x[ ] S x ad d bbL); /* */ ? b = II (b c d a x[ ] S xeb d L); /* */

 state[ ] += a; ? state[ ] += b; ? state[ ] += c; ? state[ ] += d;

 }

 /*Encode把long數組按順序拆成byte數組 因為java的long類型是 bit的 ? 只拆低 bit 以適應原始C實現的用途 ? */ ? private void Encode (byte[] output long[] input int len) { ? int i j;

 for (i = j = ; j < len; i++ j += ) { ? output[j] = (byte)(input[i] & xffL); ? output[j + ] = (byte)((input[i] >>> ) & xffL); ? output[j + ] = (byte)((input[i] >>> ) & xffL); ? output[j + ] = (byte)((input[i] >>> ) & xffL); ? } ? }

 /*Decode把byte數組按順序合成成long數組 因為java的long類型是 bit的 ? 只合成低 bit 高 bit清零 以適應原始C實現的用途 ? */ ? private void Decode (long[] output byte[] input int len) { ? int i j;

  ? for (i = j = ; j < len; i++ j += ) ? output[i] = b iu(input[j]) | ? (b iu(input[j + ]) << ) | ? (b iu(input[j + ]) << ) | ? (b iu(input[j + ]) << );

 return; ? }

 /* ? b iu是我寫的壹個把byte按照不考慮正負號的原則的"升位"程序 因為java沒有unsigned運算 ? */ ? public static long b iu(byte b) { ? return b < ? b & x F + : b; ? }

 /*byteHEX() 用來把壹個byte類型的數轉換成十六進制的ASCII表示 ?因為java中的byte的toString無法實現這壹點 我們又沒有C語言中的 ? sprintf(outbuf "% X" ib) ? */ ? public static String byteHEX(byte ib) { ? char[] Digit = { ? A B C D E F }; ? char [] ob = new char[ ]; ? ob[ ] = Digit[(ib >>> ) & X F]; ? ob[ ] = Digit[ib & X F]; ? String s = new String(ob); ? return s; ? } /* ? public static void main(String args[]) {

 MD m = new MD (); ? System out println("我愛妳 "+m getkeyBeanofStr("我愛妳")); ? } ? */

lishixinzhi/Article/program/Java/JSP/201311/20523