JSP、servlet、SQL三者之間的資料傳遞(前台與後台資料互動)

來源:互聯網
上載者:User

標籤:

背景:

       目前業界很流行的MVC(model-view-control)開發模式,理解為

              模型是Bean,

              視圖是 Html/Jsp,

              控制是Servlet,

     關聯資料庫的Dao

       web的運行機制:

              資料首先在Jsp上被展示出來,使用者看到頁面後觸發一些事件,並可能傳遞資料,這些資料和請求被控制器接收到,然後開始處理(往往會需要有一些資料庫的操作(查詢,修改資料庫資料)),當這些處理結束後,我們就需要將資料反饋到JSP上顯示給使用者看,完成一次完整的互動過程。

 本文:

       根據背景所述的順序,我們依次介紹----如何從JSP傳資料到servlet並接收、如何在servlet裡面獲得資料庫資料並處理、如何將servlet內的資料傳遞給jsp並顯示在網頁上。

 

(一)從JSP到servlet

1、發資訊

表單提交

Html代碼 

<form action="URL" name="表單名字" method="提交方式(post、get{兩個提交方式的區別}*)">

<input type="text" name="文字框名字" /><!--一個文本輸入框-->

</form>

定義一個函數來處理表單文字框檢查非空並提交表單事件

Html代碼

<script>
$(document).ready(function(){
$("#被單擊按鈕的ID").click(function(){
if(document.all.文字框名字.value.length==0){
alert("輸入不可為空");
return false;
}
document.all.表單名字submit();
return true;});
});
</script>

2、收資訊來到表單提交時URL所指向的servlet檔案,擷取傳遞過來的參數值

Java代碼

String search = java.net.URLDecoder.decode(request.getParameter("文字框名字"),"utf-8");
System.out.println("在search的servlet中接收到的search參數為-->"+search);

(二)從servlet到資料庫

1、獲得資料(MySql為例)

①建立資料庫連接池

建立一個設定檔,

確保名字一致,

 Xml代碼

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/LeLe"
auth="Container"
type="javax.sql.DataSource"
maxActive="50"
maxIdle="5"
maxWait="10000"
logAbandoned="true"
username=""
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/lele" />
</Context>
<!-- jdbc/LeLe為項目名 -->

②擷取連結

Java代碼

public static Connection getConnection() {

Connection con = null; //建立用於串連資料庫的Connection對象
DataSource ds = null;
try {

Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
ds = (DataSource)envContext.lookup("jdbc/LeLe");
System.out.println(ds.getConnection());
} catch (Exception e1) {
System.out.println("載入資料庫驅動失敗"+e1);
return null;
}// 載入Mysql資料驅動
try {
con = ds.getConnection();// 建立資料連線
System.out.println("資料庫連接成功了");
return con; //返回所建立的資料庫連接

} catch (Exception e) {
System.out.println("資料庫連接失敗" + e.getMessage());
return null;
}
}

③執行SQL語句,並返回結果

Java代碼

/* 查詢資料庫,輸出符合要求的記錄的情況*/
private static Connection conn;
private static Statement st;
private static ResultSet rs;
// public static void main(String [] args){
// query("select * from agreement");
// }
public static ResultSet query(String sql ) {
System.out.println("函數DBQuery日誌");
if(conn == null){
conn = DBConnection.getConnection(); //同樣先要擷取串連,即串連到資料庫
if(conn == null){
System.out.println("資料庫連接失敗" );
return null;
}
}
System.out.println("查詢函數中串連到資料庫資料成功"+conn);

try {
st = (Statement) conn.createStatement(); //建立用於執行靜態sql語句的Statement對象,st屬局部變數
rs = (ResultSet)st.executeQuery(sql); //執行sql查詢語句,返回查詢資料的結果集
if(!rs.next()){
System.out.println("資料庫中未查詢到資料");
return null;
}
System.out.println("資料庫中已經查詢到資料");
// String agreement_id = rs.getString(1);
// String agreement_content = rs.getString(2);
// System.out.println("已經查詢到資料的資料為----agreement_id:"+agreement_id+"\tagreement_content:"+agreement_content);
return rs;
} catch (SQLException e) {
System.out.println("資料庫中查資料失敗");
return null;
}

}

public static void closeDB() throws SQLException{
if(null != rs)
rs.close();
if(null != st)
st.close();
if(null != conn)
conn.close(); //關閉資料庫連接
}

2、處理資料(使用javaBean儲存資料)
Java代碼 收藏代碼
if(rs != null){
do{
User user0=new User();//一個javaBean的執行個體化對象
user0.setUser_id(rs.getString("user_id"));
user0.setUser_name(rs.getString("user_name"));
user0.setUser_email(rs.getString("user_email"));
user0.setUser_password(rs.getString("user_password"));
collection.add(user0);
System.out.println(rs.getString("user_id"));
System.out.println(rs.getString("user_name"));
System.out.println(rs.getString("user_email"));
System.out.println(rs.getString("user_password"));
}while(rs.next());
}

Java代碼

public class User {
private String user_id;//使用者編號
private String user_email;//使用者郵編
private String user_name;//使用者名稱
private String user_password;//使用者密碼

public String getUser_id() {
return user_id;
}
public void setUser_id(String userId) {
user_id = userId;
}
public String getUser_email() {
return user_email;
}
public void setUser_email(String userEmail) {
user_email = userEmail;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String userName) {
user_name = userName;
}
public String getUser_password() {
return user_password;
}
public void setUser_password(String userPassword) {
user_password = userPassword;
}
}

(三)從servlet到JSP

1、發資料

使用重新導向將request和response轉寄給一個JSP

Java代碼

//將資料發到JSP
RequestDispatcher rd = request.getRequestDispatcher("index_search.jsp");
request.setAttribute("test",collection);//存值
rd.forward(request,response);//開始跳轉

2、接收資料

來到重新導向指向的URL中擷取剛才發送過來的資料,並顯示在網頁上

Java代碼

Collection<User> collectionUser=(Collection<User>)request.getAttribute("test");
Iterator it=collectionUser.iterator();
while(it.hasNext())
{
User user=(User)it.next();
out.println("<td ><div align=‘center‘>"+user.getUser_name()+"</td>");
out.println("<td ><div align=‘center‘><a href=‘#‘ onclick=window.open(‘MyJsp.jsp?usid="+user.getUser_id().trim()+"‘,‘newwindow‘,‘width=600,height=350,top=300,left=300‘)>管理</a></td>");
out.println("</tr>");
}

JSP、servlet、SQL三者之間的資料傳遞(前台與後台資料互動)

相關文章

聯繫我們

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