實戰JSP進階編程之一

來源:互聯網
上載者:User

不少JSP初學者在學會簡單的jsp編程後,往往停留在用jsp裡面的sql語句調一個javabean進行資料庫連接階段,止步不前了。

這個簡單的教程希望能夠有助於初學者學會用oop思想進行jsp編程。

情境:一個簡單的新聞系統,有2-3個資料表構成。
資料庫系統用的是Mysql,當然用其它的也類似。
先看第一個資料表,也是主要的資料表:news

create table news2 (newsid int not null,
userid int,
kwid int, // 關鍵詞外鍵
title varchar(100),
content text,
hits int,
cdate varchar2(30),
mdate varchar2(30),
primary key(newsid));

再插入一個樣本資料:

insert into news2 (newsid, title, content) values (1, 'test title', 'test body');


設計思路:用mvc模式編程,將資料以一個helper class News.java 打包,
並通過NewsDAO.java進行資料庫操作。
設計階段,用UML勾畫出系統的object.
...此處省略

NewsDAO的主要方法有:
1. public News getNewsByPrimaryKey(int newsid);
2. public News[] getRecentNews();
3. 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:3306/joke?user=root";


public NewsDAO()
{
try {
Class.forName ("com.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 news2"+
" where newsid="+newsid+"";
conn = getConnection();
stmt = conn.createStatement();
rs=stmt.executeQuery(sql);

if(rs.next())
{
news = new News(rs.getInt(1), rs.getString(2),rs.getString(3));
}
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/html;charset=gb2312" %>
<%@page import="news.*" %>
<%
NewsDAO newsDao = new NewsDAO();
News news = newsDao.getNewsByPrimaryKey(1);
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 就可以了。

如果系統提示找不到News, 那其實是因為你的NewsDAO.java有問題,並非真的是News不在路徑上。在同一個包內,一般這樣編譯就可以的。只不過,編譯的錯誤提示誤導人。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.