前言:
最近一直在做WEB開發,現總結一下這一段時間的體會和感觸。
切記,web開發重點在於前台數據交互,頁面美化而不要太沉溺於底層數據。
瀏覽器時代來到,向我們召喚出更炫、更簡潔、更方便、更大氣的網站。
這篇博客目的在於為大家解決web開發中最基礎的數據傳遞操作,讓大家有一個好的起點,在web開放中更加游刃有余
背景:
目前業界很流行的WVC(model-view-control)開發模式,具體暫可理解為
模型是javaBean,
視圖是JSP,
控制是servlet。
web的運行機制:
數據首先在jsp上被展示出來,用戶看到頁面后觸發一些事件,並可能傳遞數據,這些數據和請求被控制器接收到,然后開始處理(往往會需要有一些數據庫的操作(查詢,修改數據庫數據)),當這些處理結束后,我們就需要將數據反饋到JSP上顯示給用戶看,完成一次完整的交互過程。
正文:
根據背景所述的順序,我們依次介紹----如何從JSP傳數據到servlet並接收、如何在servlet里面獲得數據庫數據並處理、如何將servlet內的數據傳遞給jsp並顯示在網頁上。
(一)從JSP到servlet
1、發信息
表單提交
- <form action="相對地址URL" name="表單名字" method="提交方式(post(推薦)、get)">
- <input type="text" name="文本框名字" /><!--一個文本輸入框-->
- </form>
定義一個函數來處理表單文本框檢查非空並提交表單事件
- <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文件,獲取傳遞過來的參數值
- String search = java.net.URLDecoder.decode(request.getParameter("文本框名字"),"utf-8");
- System.out.println("在search的servlet中接收到的search參數為-->"+search);
ok,完成
(二)從servlet到數據庫
1、獲得數據(MySql為例)
①創建數據庫連接池
創建一個配置文件,如圖
確保名字一致,
- <?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為項目名 -->
②獲取鏈接
- 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語句,並返回結果
- /* 查詢數據庫,輸出符合要求的記錄的情況*/
- 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保存數據)
- 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());
- }
- 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;
- }
- }
ok,完成
(三)從servlet到JSP
1、發數據
使用重定向將request和response轉發給一個JSP
- //將數據發到JSP
- RequestDispatcher rd = request.getRequestDispatcher("index_search.jsp");
- request.setAttribute("test",collection);//存值
- rd.forward(request,response);//開始跳轉
2、接收數據
來到重定向指向的URL中獲取剛才發送過來的數據,並顯示在網頁上
- 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>");
- }
ok,完成
結束語:
推薦一本JavaScript進階讀物--------《JavaScript修煉之道》
推薦一本項目開發實錄書籍----------《Java項目開發案例全程實錄》