实战JSP进阶编程之一
不少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 News java 打包 并通过NewsDAO java进行数据库操作 设计阶段 用UML勾画出系统的object 此处省略
NewsDAO的主要方法有 public News getNewsByPrimaryKey(int newsid); public News[] getRecentNews(); public News[] getHotNews();
News java的代码如下
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 newsid int userid int kwid int hits String title String content String cdate) { this newsid=newsid; this userid=userid; this kwid=kwid; this hits=hits; this title=title; this content=content; this cdate=cdate; }
public News(int id String t String cnt) { this newsid = id; this title = t; this content = cnt; } public int getNewsid() { return newsid; } public void setNewsid(int newsid) { this newsid=newsid; }
public int getUserid() { return userid; } public void setUserid(int userid) { this userid=userid; }
public int getKwid() { return kwid; } public void setKwid(int kwid) { this kwid=kwid; }
public int getHits() { return hits; } public void setHits(int hits) { this hits=hits; }
public String getTitle() { return title; } public void setTitle(String title) { this title=title; }
public String getContent() { return content; } public void setContent(String content) { this content=content; }
public String getCdate() { return cdate; } public void setCdate(String cdate) { this cdate=cdate; }
}
说明 这个程序可以用作javabean 作为录入表单的参数携带者(params Holder)
最主要的文件NewsDAO java代码如下
package news;
import java sql *;
public class NewsDAO {
Connection conn = null; Statement stmt = null; ResultSet rs = null; String url="jdbc:mysql://localhost: /joke?user=root";
public NewsDAO() { try { Class forName (" mysql jdbc Driver"); } catch (java lang ClassNotFoundException e) { System err println("joke():"+e getMessage()); } }
public News getNewsByPrimaryKey(int newsid) throws SQLException { Connection conn=null; Statement stmt; ResultSet rs; News news = null;
String sql="select newsid title content from news "+ " where newsid="+newsid+""; conn = getConnection(); stmt = conn createStatement(); rs=stmt executeQuery(sql);
if(rs next()) { news = new News(rs getInt( ) rs getString( ) rs getString( )); } rs close(); stmt close(); conn close(); return news; }
private Connection getConnection() throws SQLException { Connection conn = null; conn = DriverManager getConnection(url); return conn; }
}
说明 这个程序作为示例代码 非常简单 没有考虑异常 更主要的method 如getRecentNews()等 大家可以自己参考实现
简单的jsp调用测试程序 getNews jsp
<%@page contentType="text/;charset=gb " %> <%@page import="news *" %> <% NewsDAO newsDao = new NewsDAO(); News news = newsDao getNewsByPrimaryKey( ); if(news != null) { out println("Title:"+news getTitle()); out println("<br>"); out println("Body:"+news getContent()); } else out println("Failed "); %>
说明 这个简化实现其实是DAO模式的省略形式 还应该有interface dao factory的
有时间的话 可能以后会给出示例 当然 大家在熟悉oop方式之后 也能够自己补齐
还有 编译的时候 用 javac news/* java 就可以了
lishixinzhi/Article/program/Java/JSP/201311/20088