知识大全 一个完整的新闻发布系统代码

Posted 新闻

篇首语:博观而约取,厚积而薄发。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个完整的新闻发布系统代码相关的知识,希望对你有一定的参考价值。

  环境 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" /> <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" />   <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 ^ (lsb 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("我爱你"));                 */

cha138/Article/program/Java/JSP/201311/20523

相关参考

知识大全 使用参照完整性来加强基本商业规则

  对于数据库系统来说拥有一套执行基本商业规则的方法是非常重要的如果一个事物元试图插入更新或者删除一个表格行那么它就违反了商业规则然后数据库必须拒绝这个事物元并在应用程序中做错误的标记虽然通过程序代码

新闻媒体应当()宣传消防法律、法规和消防知识,定期发布消防公益广告。

新闻媒体应当()宣传消防法律、法规和消防知识,定期发布消防公益广告。A.有偿B.免费C.有条件【参考答案】B[拓展知识]检查液化石油气管道或阀门泄漏的正确方法是()A.用鼻子嗅B.用火试C.用肥皂水涂

新闻媒体应当()宣传消防法律、法规和消防知识,定期发布消防公益广告。

新闻媒体应当()宣传消防法律、法规和消防知识,定期发布消防公益广告。A.有偿B.免费C.有条件【参考答案】B[拓展知识]检查液化石油气管道或阀门泄漏的正确方法是()A.用鼻子嗅B.用火试C.用肥皂水涂

国务院新闻办公室7月3日召开新闻发布会,中央档案馆副馆长李明华介绍中央档案馆于7月3日起首次在官方网站发布铃木启久等__

国务院新闻办公室7月3日召开新闻发布会,中央档案馆副馆长李明华介绍中央档案馆于7月3日起首次在官方网站发布铃木启久等_____日本战犯笔供(日文)及其中文翻译件的档案原文视频,以及战犯笔供摘要(中英文

知识大全 asp完整登陆代码

  asp完整登陆代码<%optionexplicit强制浏览器重新访问服务器下载页面而不是从缓存读取页面ResponseBuffer=TrueResponseExpires=ResponseE

知识大全 一个封装js代码-----展开收起效果示例

  第一次靠自己完整的封装的小特效有点小小的兴奋和大家分享下希望能对和我一样在探索的童鞋们有点帮助js部分复制代码代码如下:varshow_obj=function(objatob)$(obj)bin

什么是一个完整的程序控制系统?

  一个完整的程序控制系统是将直接测量得到的开关量信号或将由模拟量信号转换来的  开关量信号输入到施控系统,施控系统按照生产过程操作规律所规定的逻辑关系,对这些信号进行综合与判断,然后输出开关量信号去

什么是一个完整的程序控制系统?

  一个完整的程序控制系统是将直接测量得到的开关量信号或将由模拟量信号转换来的  开关量信号输入到施控系统,施控系统按照生产过程操作规律所规定的逻辑关系,对这些信号进行综合与判断,然后输出开关量信号去

知识大全 一个完整电气控制系统包括哪些电气元件

一个完整电气控制系统包括哪些电气元件1》控制电源。2》控制器件。3》安全保护器件。车床电气控制系统的方案设计包括哪些1一次系统图2二次原理图3元件表4接线图5元件实际位置什么是电气控制系统电气控制系统

雅安芦山地震后,各级政府、新闻媒体、社会组织、公益人士、普通网民纷纷在第一时间用微博、微信等社交网络平台,发布信息,关注

雅安芦山地震后,各级政府、新闻媒体、社会组织、公益人士、普通网民纷纷在第一时间用微博、微信等社交网络平台,发布信息,关注抗震救灾。“微力量”汇集抗灾救援大能量,搭建起新的救援生命线。这主要表明了:__