「简单新闻发布系统java」简单新闻发布系统源码
本篇文章给大家谈谈简单新闻发布系统java,以及简单新闻发布系统源码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
用java做一个CMS新闻发布系统,要用到access2003.
参考如下代码:
MS Access在测试阶段比较利于携带,Web开发初期我经常使用它。后期再移植到SQLServer或Oracle上。但最近在需要对数据库中插入图片文件时,发现了一个问题,即JDK自带的JDBC-ODBC不支持java.sql.Blob里的方法,经过查阅Java API和程序调试,我找到了个变通的方法,即:
1,在写入BLOB类型字段时,使用java.sql.PreparedStatement的setBinaryStream方法,
2,读出BLOB类型字段时,因为返回的是字节数组byte[]类型,可以把它转换成ByteArrayInputStream然后读出内容写到文件里去。
这样即使用JDK自带的JDBC-ODBC驱动, 也能自如的在数据库里读写上传下载的文件了,哈哈。
import java.sql.*;
import java.io.*;
//对BLOB字段先写入(要求被写入的文件存在),再读出来
//要求先建立一个item表,有三个字段,id(int),file_name(char),file_blob(blob)
//对Access, blob字段应该设置成为“OLE对象”类型
public class blobtest{
public static void main(String[] args){
Connection conn = null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
/*这里的数据库的url一定要写正确,这是关键,其中DBQ可以绝对路径,也可以是相对路径,为了体现数据存储路径的/独立性,你可以将数据库copy到不同的位试一下*/
String dbUrl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=blob.mdb";
conn = DriverManager.getConnection(dbUrl,"","");
File file1=new File("fileToWrite.doc");
File file2=new File("fileRead.doc");
//BlobWriteForOracle( conn, file1);
//BlobReadForOracle( conn, file2);
BlobWriteForAccess( conn, file1);
BlobReadForAccess( conn, file2);
conn.close();
}catch(Exception ex){
System.err.println(ex.getMessage());
public static void BlobWriteForAccess( Connection conn, File file){
try{
conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
String file_name=file.getName();
// get maxid ( to avoid insert id repeatly )
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select max(id) from item");
rs.next();
int maxid = rs.getInt(1);
//maxid = (maxid==null)?0:maxid;
int id = maxid+1 ;
//System.out.println("write_id="+id);
PreparedStatement pstmt = conn.prepareStatement( "insert into item ( id, file_name, file_blob ) values ( " + id + ", ? , ? )" );
FileInputStream in = new FileInputStream(file );
int length = in.available();
pstmt.setString( 1, file_name );
pstmt.setBinaryStream( 2, in , in.available() );
System.out.println( "插入了 "+ pstmt.executeUpdate ()+ " 行数据, "
+ "id =" + id
+ ", 文件名是" + file.toString() +" , 共 "+ length +" bytes" );
conn.commit();
pstmt.close();
}catch(Exception ex){
ex.printStackTrace();
System.out.print("["+ex.getMessage()+"]");
try{
conn.rollback();
}catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
}
public static void BlobReadForAccess( Connection conn, File file){
try{
conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
String file_name=file.getName();
// get maxid ( to avoid insert id repeatly )
Statement stmt1 = conn.createStatement();
ResultSet rs1 = stmt1.executeQuery("select max(id) from item");
rs1.next();
int maxid = rs1.getInt(1);
//maxid = (maxid==null)?0:maxid;
int id = maxid;
//System.out.println("read_id="+id);
String sql="SELECT file_blob FROM item WHERE id=" + id + ""; //
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
rs.next();
Object obj1 = rs.getObject("file_blob"); // 得到BLOB对象
//System.out.println("type is :"+obj1.getClass().getName());
byte[] blob=(byte[])obj1;
FileOutputStream out=new FileOutputStream(file); // 建立输出流
ByteArrayInputStream in=new ByteArrayInputStream(blob); // 建立输入流
int size=1024;
byte[] buffer=new byte[size]; // 建立缓冲区
int len;
while((len=in.read(buffer)) != -1)
out.write(buffer,0,len);
in.close();
out.close();
conn.commit();
}catch(Exception ex){
ex.printStackTrace();
System.out.print("["+ex.getMessage()+"]");
try{
conn.rollback();
}catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
一个完整的新闻发布系统代码
环境 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=adminpassword="); 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 "% headtitle登陆系统/title/head body form name=login action="check jsp" method="post" 用户 input type=text name=adminbr 密码 input type=password name=passwordbr 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{ % headtitle新闻发布/title/head body form name=pub action="pub jsp" method="post" 题目 input type=text name=titlebr 内容 textarea cols=" " rows=" " name=context/textareabr 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(); % headtitle新闻/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
用Java编辑的新闻发布系统
栏目--对应的就像是我们访问的新闻网中的各大栏目标题(例如:最新时事、国际新闻、国内新闻、。。。),对应的程序操作:增加栏目、修改栏目、删除栏目。栏目信息主要包括:栏目编号、栏目名称、栏目状态(启用、停用)等等类别--也就是新闻属于哪些类型,你要在需求分析中列出相应的类别,具体的程序操作:增加类别、删除类别、修改类别、(一般删除很少操作,因为删除一项类别的话很多新闻就没有类别了的)。类别信息主要包括:类别编号、类别名称、类别状态(启用、停用)等等新闻--新闻的标题、新闻发布的时间、发布的作者、内容、以及文章的编辑时间、编辑人、浏览次数等等,你可以再详细具体考虑还需要哪些字段信息。用户管理:主要是设计整个新闻发布系统的用户以及用户的权限。主要功能包括:增加用户、删除用户、修改用户。用户的信息主要包括:登录名、密码、真实姓名、性别、年龄、住址、手机、联系电话等等 因为我以前涉及到的新闻发布这块都是集成在系统中开发的,没有具体的独立的实例可以给你。我只能大概说说整个的需求分析。每项功能的数据要求不是很详细,不过作为教学的需要我觉得还是足够了的。
怎样用Java做一个新闻发布系统
如果你自己不去想,再多人给你讲也没有用,别人的时间都是有限的,就算是你的老师也不能可从头到尾全给你讲,学习是你自己的事!
----------------------------------------------------------
你说的新闻发布系统,在专业术语叫做CMS(内容管理系统),要做一个CMS可大可小,如果你只想做一个简单的,其实也不难,我不知道你做这个是为了什么。
如果你是只是为了应付毕业设计,实在不会的话,我劝你买本相关的书看看就够了、
如果给你详细的将,恐怕一天都讲不完,不知道你现在是什么水平。
如果你在学校一直用心学,做这个应该不难,实现简单的CMS系统,你至少要有一个表存放新闻数据,然后用程序实现增删改功能,设计一个显示新闻的WEB界面,如果再好点,可以增加一些管理功能,我只能给你所说简单的思想,具体技术还得你自己去学。
J2EE相关知识你要有所了解,像是JDBC更是必须熟练,Java基础更不用说了,其他的像是开发框架你可以不用。但是基本的东西必须掌握。
如果你是在没有思路,你还是买本相关的书籍看看吧,外面有很多,虽然质量不高,但是应付这种小系统没什么问题。
关于简单新闻发布系统java和简单新闻发布系统源码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。