JSP培訓(8)——添加功能和分頁顯示

來源:互聯網
上載者:User
 

學習目標:l         進一步掌握MVC設計模式;l         掌握添加功能的實現;l         掌握分頁顯示功能的實現。主要內容:l         通過使用者資訊添加功能進一步介紹MVC模式;l         通過使用者資訊的分頁顯示介紹分頁顯示功能的原理和實現。1、 如何採用MVC模式完成使用者添加?首先考慮與人如何互動:應該有一個輸入使用者資訊的介面,包含使用者名稱和口令,另外需要一反饋的介面。然後考慮功能如何?:需要在User類中添加一個方法,完成使用者資訊的添加。最後考慮控制器:擷取資訊;調用JavaBean;傳值;選擇介面響應。2、 添加使用者的介面實際應用中的資訊項比較多,並且需要對使用者輸入資訊進行驗證。這裡重點強調添加過程,所以對問題進行簡化。可以在登入介面的基礎上修改,參考代碼如下:<%@ page contentType="text/html;charset=gb2312"%>添加使用者<br><form name="form1" method="post" action="addUser">   使用者ID:<input type="text" name="username"><br>   口令:<input type="password" name="userpass"><br>       <input type="submit" value="添加"><input type="reset" value="重設"></form><%@ include file="contact.jsp"%>3、 在User中增加方法   public boolean addUser()   {      Connection con = null;      Statement stmt = null;      boolean b; // 表示添加成功與否       try{          // 指出串連資料庫所需要的驅動程式         Class.forName("oracle.jdbc.driver.OracleDriver");         // 建立與資料庫之間的串連// 需要把myserver修改為自己的資料庫伺服器的IP地址// 把mydb修改成自己的資料庫)        con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");         // 編寫查詢資料庫資訊的SQL語句        String sql="insert into usertable(username,userpass) values('"+username+"','"+userpass+"')";         // 建立語句對象,用於執行SQL語句        stmt = con.createStatement();         // 執行沒有結果集返回的語句,返回的是影響資料庫表中記錄的個數        int n = stmt.executeUpdate(sql);               if(n>0)            b = true;        else             b = false;      }catch(Exception e){          b = false;      }       finally{        // 關閉相關對象        if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}        if(con!=null) try{ con.close(); }catch(Exception ee){}      }            return b;   }4、 使用Servlet進行控制參考代碼如下:package servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javabean.*;import java.util.*; public class AddUser extends HttpServlet{   public void doGet(HttpServletRequest request,HttpServletResponse response)     throws IOException,ServletException   {      request.setCharacterEncoding("gb2312");      // 第一步:擷取使用者的輸入資訊      String username = request.getParameter("username");      String userpass = request.getParameter("userpass");       // 第二步:調用JavaBean      User user = new User();      user.setUsername(username);      user.setUserpass(userpass);      boolean b = user.addUser();       // 第三步:傳值      String info;      if(b)          info="添加成功!";      else          info="添加失敗!";      request.setAttribute("addinfo",info);       // 第四步:選擇一個介面對使用者進行響應      String forward="getAllUser";       RequestDispatcher rd = request.getRequestDispatcher(forward);      rd.forward(request,response);   }   public void doPost(HttpServletRequest request,HttpServletResponse response)     throws IOException,ServletException   {      doGet(request,response);   }}    此處添加完成之後跳轉到userlist.jsp檔案處理,但是在顯示之前需要擷取資料,所以需要先執行Servlet,所以專向了getAllUser控制器。5、 修改設定檔   <servlet>      <servlet-name>addUser</servlet-name>      <servlet-class>servlet.AddUser</servlet-class>   </servlet>   <servlet-mapping>      <servlet-name>addUser</servlet-name>      <url-pattern>/addUser</url-pattern>   </servlet-mapping>6、 在列表介面顯示提示資訊修改userlist.jsp代碼如下,紅色部分為增加的內容:<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><font color="red">   ${addinfo}</font><br><c:forEach var="user" items="${users}">   使用者名稱:${user.username} 口令:${user.userpass} <br></c:forEach>7、 運行測試輸入正確的使用者名稱和口令測試;輸出已經存在的使用者名稱進行測試。8、 添加分頁顯示經過不斷的添加,資料庫表中已經有大量的記錄。當記錄比較多的時候就應該進行分頁顯示。分頁顯示可以採用多種方式:l         在SQL中進行控制,只查詢需要的記錄;l         在遍曆結果集的時候,只封裝相關的記錄;l         在顯示的時候進行控制。第一種方式對開發人員的SQL水平要求比較高,第三種方式傳遞的資料量比較大,所以我們介紹第二種。要完成分頁顯示,需要做3個方面的修改:l         介面上增加分頁顯示的超連結;l         修改User.java,在遍曆結果集的時候進行控制,另外需要增加擷取頁碼數的方法;l         在控制器中傳遞需要的頁碼和總頁碼。9、 在介面上增加分頁顯示功能<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><font color="red">   ${addinfo}</font><br> <a href="getAllUser?pageNo=1">第一頁</a> <a href="getAllUser?pageNo=${pageNo-1}">上一頁</a> <a href="getAllUser?pageNo=${pageNo+1}">下一頁</a> <a href="getAllUser?pageNo=${pageCount}">最後一頁</a><br><c:forEach var="user" items="${users}">   使用者名稱:${user.username} 口令:${user.userpass} <br></c:forEach>其中,pageNo表示當前頁碼,pageCount表示總頁數。10、              在User.java中增加擷取總頁碼的方法   public int getPageCount()   {      Connection con = null;      Statement stmt = null;      ResultSet rs = null;       try{          // 指出串連資料庫所需要的驅動程式         Class.forName("oracle.jdbc.driver.OracleDriver");         // 建立與資料庫之間的串連        con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");         // 編寫查詢資料庫資訊的SQL語句        String sql="select count(*) from usertable";         // 建立語句對象,用於執行SQL語句        stmt = con.createStatement();         // 執行SQL語句得到結果集        rs = stmt.executeQuery(sql);               rs.next();        // 得到總的記錄數        int number = rs.getInt(1);         return (number-1)/10+1;       }catch(Exception e){          return 0;      }       finally{        // 關閉相關對象        if(rs!=null) try{ rs.close(); }catch(Exception ee){}        if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}        if(con!=null) try{ con.close(); }catch(Exception ee){}      }         }11、              增加按照頁碼擷取資訊的方法   public ArrayList getUserByPage(int pageNo)   {      int number=10;      // 每一頁顯示的記錄數       int begin = (pageNo * number) - 9;      int end = pageNo * number;      int index=1;       Connection con = null;      Statement stmt = null;      ResultSet rs = null;      ArrayList users = new ArrayList();       try{          // 指出串連資料庫所需要的驅動程式         Class.forName("oracle.jdbc.driver.OracleDriver");         // 建立與資料庫之間的串連        con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.170:1521:fhdn","scott","tiger");         // 編寫查詢資料庫資訊的SQL語句        String sql="select * from usertable";         // 建立語句對象,用於執行SQL語句        stmt = con.createStatement();         // 執行SQL語句得到結果集        rs = stmt.executeQuery(sql);               // 遍曆結果集        while(rs.next())        {           // 在begin之前的記錄是不顯示的           if(index<begin){               index++;               continue;           }            // 在end之後的記錄也不顯示           if(index>end)               break;            index++;            String username = rs.getString(1);           String userpass = rs.getString(2);           // java.util.Date birthday = rs.getDate(3);           // int age = rs.getInt(4);           User user = new User();           user.setUsername(username);           user.setUserpass(userpass);           users.add(user);        }      }catch(Exception e){          System.out.println(e.getMessage());      }       finally{        // 關閉相關對象        if(rs!=null) try{ rs.close(); }catch(Exception ee){}        if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}        if(con!=null) try{ con.close(); }catch(Exception ee){}      }            return users;   }12、              修改控制器package servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javabean.*;import java.util.*; public class GetAllUser extends HttpServlet{   public void doGet(HttpServletRequest request,HttpServletResponse response)     throws IOException,ServletException   {              // 第一步:擷取使用者的輸入資訊      String pageNo=request.getParameter("pageNo");      int iPageNo=1;      if(pageNo!=null)      {          iPageNo = Integer.parseInt(pageNo);      }       // 第二步:調用JavaBean      User user = new User();      ArrayList users=null;      users = user.getUserByPage(iPageNo);      int pageCount=user.getPageCount();       // 第三步:傳值      request.setAttribute("users",users);      request.setAttribute("pageNo",new Integer(iPageNo));      request.setAttribute("pageCounter",new Integer(pageCount));       // 第四步:選擇一個介面對使用者進行響應      String forward="userlist.jsp";       RequestDispatcher rd = request.getRequestDispatcher(forward);      rd.forward(request,response);    }   public void doPost(HttpServletRequest request,HttpServletResponse response)     throws IOException,ServletException   {      doGet(request,response);   }}13、              之後再進行測試回合14、              增加對第一頁和最後一頁的控制如果已經在第一頁,就不能再點擊第一頁或者首頁。如果已經在最後一頁,就不能再點擊最後一頁或者下一頁。修改userlist.jsp中代碼如下(部分代碼):<c:if test="${pageNo!=1}"> <a href="getAllUser?pageNo=1">第一頁</a> <a href="getAllUser?pageNo=${pageNo-1}">上一頁</a></c:if><c:if test="${pageNo!=pageCounter}"> <a href="getAllUser?pageNo=${pageNo+1}">下一頁</a> <a href="getAllUser?pageNo=${pageCounter}">最後一頁</a></c:if>這裡設定為不顯示,也可以設定為不添加超連結。15、              增加對異常的處理如果使用者按照這樣的方式訪問:http://127.0.0.1:8080/ch8/getAllUser?pageNo=aaa,將產生異常。因為頁碼不是數字,所以需要進行異常處理。修改          iPageNo = Integer.parseInt(pageNo);為    try{     iPageNo = Integer.parseInt(pageNo); }catch(Exception e){}

 

參考教材:《Java Web程式設計基礎教程》

相關文章

聯繫我們

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