不少JSP初学者在学会简单的jsp编程后往往停留在用jsp里面的sql语句调一个javabean进行数据库连接阶段止步不前了
这个简单的教程希望能够有助于初学者学会用oop思想进行jsp编程
场景一个简单的新闻系统有-个数据表构成
数据库系统用的是Mysql当然用其它的也类似
先看第一个数据表也是主要的数据表:news
create table news (newsid int not null
userid int
kwid int // 关键词外键
title varchar()
content text
hits int
cdate varchar()
mdate varchar()
primary key(newsid));
再插入一个样本数据
insert into news (newsid title content) values ( test title test body);
设计思路用mvc模式编程将数据以一个helper class Newsjava 打包
并通过NewsDAOjava进行数据库操作
设计阶段用UML勾画出系统的object
此处省略
NewsDAO的主要方法有
public News getNewsByPrimaryKey(int newsid);
public News[] getRecentNews();
public News[] getHotNews();
Newsjava的代码如下
package news;
public class News {
private int newsid;
private int userid;
private int kwid;
private int hits;
private String title;
private String content;
private String cdate;
private String mdate;
public News(){ }
public News(int newsidint useridint kwidint hitsString titleString contentString cdate)
{
thisnewsid=newsid;
thisuserid=userid;
thiskwid=kwid;
thishits=hits;
thistitle=title;
thiscontent=content;
thiscdate=cdate;
}
public News(int id String t String cnt) {
thisnewsid = id;
thistitle = t;
thiscontent = cnt;
}
public int getNewsid()
{
return newsid;
}
public void setNewsid(int newsid)
{
thisnewsid=newsid;
}
public int getUserid()
{
return userid;
}
public void setUserid(int userid)
{
thisuserid=userid;
}
public int getKwid()
{
return kwid;
}
public void setKwid(int kwid)
{
thiskwid=kwid;
}
public int getHits()
{
return hits;
}
public void setHits(int hits)
{
thishits=hits;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
thistitle=title;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
thiscontent=content;
}
public String getCdate()
{
return cdate;
}
public void setCdate(String cdate)
{
thiscdate=cdate;
}
}
说明这个程序可以用作javabean作为录入表单的参数携带者(params Holder)
最主要的文件NewsDAOjava代码如下
package news;
import javasql*;
public class NewsDAO
{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url="jdbc:mysql://localhost:/joke?user=root";
public NewsDAO()
{
try {
ClassforName ("commysqljdbcDriver");
}
catch (javalangClassNotFoundException e) {
Systemerrprintln("joke():"+egetMessage());
}
}
public News getNewsByPrimaryKey(int newsid) throws SQLException
{
Connection conn=null;
Statement stmt;
ResultSet rs;
News news = null;
String sql="select newsidtitlecontent from news"+
" where newsid="+newsid+"";
conn = getConnection();
stmt = conncreateStatement();
rs=stmtexecuteQuery(sql);
if(rsnext())
{
news = new News(rsgetInt() rsgetString()rsgetString());
}
rsclose();
stmtclose();
connclose();
return news;
}
private Connection getConnection() throws SQLException
{
Connection conn = null;
conn = DriverManagergetConnection(url);
return conn;
}
}
说明这个程序作为示例代码非常简单没有考虑异常更主要的method
如getRecentNews()等大家可以自己参考实现
简单的jsp调用测试程序getNewsjsp
<%@page contentType="text/html;charset=gb" %>
<%@page import="news*" %>
<%
NewsDAO newsDao = new NewsDAO();
News news = newsDaogetNewsByPrimaryKey();
if(news != null) {
outprintln("Title:"+newsgetTitle());
outprintln("<br>");
outprintln("Body:"+newsgetContent());
}
else outprintln("Failed");
%>
说明这个简化实现其实是DAO模式的省略形式还应该有interfacedao factory的
有时间的话可能以后会给出示例当然大家在熟悉oop方式之后也能够自己补齐
还有编译的时候 用 javac news/*java 就可以了
如果系统提示找不到News 那其实是因为你的NewsDAOjava有问题并非真的是News不在路径上在同一个包内一般这样编译就可以的只不过编译的错误提示误导人