本文實例講述了JSP實現添加功能和分頁顯示的方法。分享給大家供大家參考。具體如下:
學習目標:
① 進一步掌握MVC設計模式;
② 掌握添加功能的實現;
③ 掌握分頁顯示功能的實現。
主要內容:
① 通過用戶信息添加功能進一步介紹MVC模式;
② 通過用戶信息的分頁顯示介紹分頁顯示功能的原理和實現。
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、 添加分頁顯示
經過不斷的添加,數據庫表中已經有大量的記錄。當記錄比較多的時候就應該進行分頁顯示。分頁顯示可以采用多種方式:
① 在SQL中進行控制,只查詢需要的記錄;
② 在遍歷結果集的時候,只封裝相關的記錄;
③ 在顯示的時候進行控制。
第一種方式對開發人員的SQL水平要求比較高,第三種方式傳遞的數據量比較大,所以我們介紹第二種。
要完成分頁顯示,需要做3個方面的修改:
① 界面上增加分頁顯示的超鏈接;
② 修改User.java,在遍歷結果集的時候進行控制,另外需要增加獲取頁碼數的方法;
③ 在控制器中傳遞需要的頁碼和總頁碼。
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(indexbegin){
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){}
希望本文所述對大家的JSP程序設計有所幫助。
您可能感興趣的文章:- JSP實現的簡單分頁示例
- JSP+EXt2.0實現分頁的方法
- jsp分頁顯示完整實例
- JSP自定義分頁標簽TAG全過程
- jsp分頁顯示的實現代碼
- json實現jsp分頁實例介紹(附效果圖)
- JSP分頁顯示的實例代碼
- jsp讀取數據庫實現分頁技術簡析
- 一個通用的jsp分頁PageBean
- jsp hibernate的分頁代碼
- 一個實用的JSP分頁代碼
- JSP實現的簡單分頁顯示效果代碼