Servlet&JSP的那些事兒(十二)

來源:互聯網
上載者:User

本篇我們做一個jsp執行個體的開發,實現一個留言板程式。上篇Servlet&JSP的那些事兒(十一)中討論的資料庫知識也是為了這個執行個體開發做鋪墊。另外,再複習一下Servlet&JSP的那些事兒(十)中討論的jsp知識。好了,讓我們開始吧~

1)建立一個Message表

首先建立一個MessageBoard資料庫,然後在資料庫中建立一個Message表,用來存放留言。當然,使用的還是Mysql資料庫。進入dos環境,輸入如下指令進入資料庫:

mysql -uroot -pshan

-u後面為使用者名稱,-p後面為密碼。然後建立資料庫MessageBoard,輸入語句:

create database MessageBoard;

然後如下語句切換到資料庫MessageBoard,

use MessageBoard;

最後使用如下語句建立Message表:

create table Message(id INT AUTO_INCREMENT not null primary key,user VARCHAR(20) not null,title VARCHAR(100) not null,content TEXT,time TIMESTAMP not null,ip VARCHAR(20) not null);

各項的含義看英文就可以明白,在此就不再贅述。

2)配置程式運行目錄和JDBC資料來源

我們在此採用的是資料庫連接池的方式,所以需要建立設定檔。先在D:\apache-tomcat-7.0.33\webapps\檔案夾下建立web工程目錄MessageBoard。然後在MessageBoard檔案夾下建立WEB-INF檔案夾和META-INF檔案夾。在META-INF檔案夾下,建立context.xml檔案,編輯檔案內容,如下所示:

<Context><Resource name="jdbc/messageboard" auth="Container"type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000"username="root" password="shan"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/messageboard?autoReconnect=true"/></Context>

3)編寫message.html

然後在MessageBoard檔案夾下建立message.html檔案,用於填寫留言資訊。檔案內容如下:

<center>  <form action="process.jsp" method="post">    <table bgcolor="#B3B3FF">      <caption>歡迎訪問留言板</caption>      <tr>        <td>使用者名稱:</td>        <td><input type="text" name="name"/></td>      </tr>      <tr>        <td>主題:</td>        <td><input type="text" name="title" size="40"/></td>      </tr>      <tr>        <td>內容:</td>        <td><textarea name="content" rows="10" cols="40"></textarea></td>      </tr>      <tr>        <td><input type="submit" value="提交"/></td>        <td><input type="reset" value="重填"/></td>      </tr>    </table>  </form></center>

4)編寫util.jsp

然後在MessageBoard檔案夾下編寫util.jsp用於處理一些特殊字元。內容如下:

<%!  public static String toHtml(String str) {    if(str == null) {      return null;    }    StringBuffer sb = new StringBuffer();    for(int i = 0; i < str.length(); i++) {      char c = str.charAt(i);      switch(c) {      case ' ':        sb.append(" ");        break;      case '\n':        sb.append("<br/>");        break;      case '\r':        break;      case '\'':        sb.append("'");        break;      case '<':        sb.append("<");        break;      case '>':        sb.append(">");        break;      case '&':        sb.append("&");        break;      case '"':        sb.append(""");        break;      case '\\':        sb.append("\");        break;      default:        sb.append(c);        break;      }    }    return sb.toString();  }%>

5)編寫process.jsp

然後在MessageBoard檔案夾下編寫process.jsp用於向資料庫中插入使用者的留言。

<%@ page contentType="text/html;charset=gb2312" %><%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %><%@ include file="util.jsp" %><%  //設定本文編碼格式  request.setCharacterEncoding("gb2312");    String name = request.getParameter("name");  String title = request.getParameter("title");  String content = request.getParameter("content");    //如果使用者民,標題,內容之一為null,則重新定向到首頁面  if(null == name || null == title || null == content) {response.sendRedirect("index.jsp");return;  }    name = toHtml(name.trim());  title = toHtml(title.trim());  if(name.equals("") || title.equals("")) {response.sendRedirect("message.html");return;  }  content = toHtml(content.trim());  String fromIP = request.getRemoteAddr();    //利用資料來源對象建立資料庫連接  Context ctx = new InitialContext();  DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/messageboard");  Connection conn = ds.getConnection();    PreparedStatement pstmt = conn.prepareStatement("insert into message(user,title,content,ip) values (?,?,?,?)");  pstmt.setString(1,name);  pstmt.setString(2,title);  pstmt.setString(3,content);  pstmt.setString(4,fromIP);    pstmt.executeUpdate();  pstmt.close();  conn.close();  response.sendRedirect("index.jsp");%>

註:該檔案中我們沒有插入留言時間,這是因為在mysql中,如果一個TIMESTAMP類型的資料項目為空白,mysql會自動將當前日期插入新行。在使用其他資料庫時,就要採用另外的辦法來插入當前日期和時間。

6)編寫index.jsp

MessageBoard檔案夾下編寫index.jsp用於留言板的首頁,用於顯示使用者的留言,包含分頁功能。代碼如下:

<%@ page contentType="text/html;charset=gb2312" %><%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %><html><head><title>留言板</title></head><body><a href="message.html">我要留言</a><br/><%Context ctx = new InitialContext();DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/messageboard");Connection conn = ds.getConnection();//建立可滾動的結果集Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet rs = stmt.executeQuery("select * from message order by time desc");//移動遊標到結果集的最後一行rs.last();//得到當前行的行數,也就得到了資料庫中留言的總數int rowCount = rs.getRow();if(rowCount == 0) {out.println("當前沒有任何留言");} else {%>共有<strong><%=rowCount%></strong>條留言    <%String strCurPage =request.getParameter("page");//表示當前頁數int curPage;if(strCurPage == null) {curPage = 1;} else {curPage = Integer.parseInt(strCurPage);}//定義每頁顯示的留言數int countPerPage = 5;//計算顯示所有留言需要的總頁數int pageCount = (rowCount + countPerPage -1) / countPerPage;//遊標移至結果集中指定的行。如果顯示的是第一頁,curPage=1//遊標移動到第一行rs.absolute((curPage - 1) * countPerPage +1);//如果是第一頁,則顯示不帶串連的文字,如果不是第一頁,//則給使用者提供跳轉到第一頁和上一頁的串連if(curPage == 1) {%>第一頁    上一頁    <%} else {%><a href="index.jsp?page=<%=1%>">第一頁</a>    <a href="index.jsp?page=<%=curPage-1%>">上一頁</a>    <%}//如果當前頁是最後一頁,則顯示不帶串連的文字,如果不是最後一頁,//則給使用者提供跳轉到下一頁和最後一頁的串連if(curPage == pageCount) {%>下一頁    最後頁    <%} else {%><a href="index.jsp?page=<%=curPage+1%>">下一頁</a>    <a href="index.jsp?page=<%=pageCount%>">最後頁</a>    <%}int i = 0;//以迴圈的方式取出每頁要顯示的資料,因為在前面針對要顯示的頁數,//調用了rs.absolute((curPage - 1) * countPerPage +1);//所以是從遊標所在的位置取出當前頁面要顯示的資料while(i < countPerPage && !rs.isAfterLast()) {out.println("<hr color=\"blue\" size = \"2\"></hr><br/>");out.println("使用者名稱:"+rs.getString("user"));out.println("  ");Timestamp ts = rs.getTimestamp("time");long lms = ts.getTime();Date date = new Date(lms);Time time = new Time(lms);out.println("留言時間:" + date + " " + time);out.println("  ");out.println("使用者IP:"+rs.getString("ip"));out.println("主題:"+rs.getString("title"));out.println("內容:"+rs.getString("content"));i++;rs.next();}}rs.close();stmt.close();conn.close();%></body></html>

7)運行結果

神馬的太麻煩了。所以就不再了。可以自己按照步驟操作,然後在瀏覽器網址欄輸入http://localhost:8080/MessageBoard/index.jsp。對了,忘記了很重要的一步,你需要把之前下載的驅動程式放到tomcat安裝資料夾下的lib檔案夾中,以便讓tomcat伺服器能夠找到mysql的驅動程式。要明白,使用tomcat提供的資料來源來訪問資料庫,是tomcat需要驅動,而不是應用程式需要驅動。

另外,如果你不將應用程式放到webapps目錄下,需要在server.xml中配置context.xml中的內容,或者在D:\apache-tomcat-7.0.33\conf\Catalina\localhost中建立MessageBoard.xml,將context.xml檔案的內容拷貝到其中,和server.xml一樣,需要改變一下檔案內容,如下:

<Context docBase="檔案所在目錄(如:d:\\MessageBoard)"><Resource name="jdbc/messageboard" auth="Container"type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000"username="root" password="shan"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/messageboard?autoReconnect=true"/></Context>

好了,大體上就這麼多了。我們在此通過複習了資料庫的一些知識和之前所學的一些jsp知識,這也就是本篇的目的所在。對了,整個web工程在這裡:點擊下載 

轉載請註明出處:http://blog.csdn.net/iAm333

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.