計數器的原理其實非常簡單,其實不需要太多的深入探討。
本篇的目的主要是介紹網頁中的「GET」用法,利用資料庫來實作計數器。
透過網址列傳遞參數 - GET
有時不經意注意到瀏覽器的網址列顯示冗長的文字,通常穿插著「?」、「&」、「=」符號。這種方式就是「GET」,以明碼方式把使用者下達的參數透過網址後面的連接符號表達。這種方式不但在瀏覽器中會留下記錄,凡經過的網路節點都能夠看見甚至修改當中的值。看以非常不安全,但是好處就是使用上非常方便。其實只要不要傳送或執行會影響個人權益的資料,GET在使用上也不至於會造成損失。首先請在專案的WebContent資料夾中建立「ch02.jsp」,複製下列程式碼。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <%@ page import="org.sqlite.*"%> <% request.setCharacterEncoding("UTF-8"); //將輸入編碼設定為UTF-8 response.setCharacterEncoding("UTF-8"); //將輸出編碼設定為UTF-8 SQLiteConfig cfg = new SQLiteConfig(); SQLiteDataSource ds = new SQLiteDataSource(cfg); ds.setUrl("jdbc:sqlite:E:\\joop\\my.db"); //請選擇資料庫連線位置 String sql;//重複使用的SQL查詢變數 Statement stat;//資料庫發送指令變數 stat = ds.getConnection().createStatement(); try{ stat.executeUpdate("INSERT INTO counter(id, total)VALUES(null, 1)"); }catch(Exception e){ System.out.println(e); stat.executeUpdate("UPDATE counter SET total=total+1 WHERE id=null"); } sql="select * from counter"; ResultSet rs = stat.executeQuery(sql); %> <!--DOCTYPE html--> < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > <%while(rs.next()){%> 名稱: <%=rs.getString("id")%> 次數: <%=rs.getString("total")%> < hr > <%} rs.close(); stat.close(); %> |
1 | http: //127.0.0.1:8080/josp/counter.jsp?id=102123456 |
在網頁中的實際應用
當瞭解計數器的運作方式之後,接下來試著應用在首頁。請在專案的WebContent資料夾中打開「index.jsp」,複製下列程式碼。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <%@ page import="org.sqlite.*"%> <% request.setCharacterEncoding("UTF-8");//將輸入編碼設定為UTF-8 response.setCharacterEncoding("UTF-8");//將輸出編碼設定為UTF-8 SQLiteConfig cfg = new SQLiteConfig(); SQLiteDataSource ds = new SQLiteDataSource(cfg); ds.setUrl("jdbc:sqlite:E:\\joop\\my.db");//資料庫連結路徑 String sql; Statement stat; stat = ds.getConnection().createStatement(); //隨機建立動態資料庫 try { //sql = "CREATE TABLE counter (id string, total integer, PRIMARY KEY(id));"; //stat.executeUpdate(sql); sql = "INSERT INTO counter(id, total)VALUES('0', 0);"; stat.executeUpdate(sql); } catch (Exception e) {} //計數器動作 sql = "DELETE FROM counter WHERE id !='0'"; stat.executeUpdate(sql); sql = "UPDATE counter SET total=total+1 WHERE id ='0'"; stat.executeUpdate(sql); sql = "select * from counter WHERE id ='0'"; ResultSet rs = stat.executeQuery(sql); %> <!DOCTYPE html> < html > < head > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title >Insert title here</ title > < link href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel = "stylesheet" > < link href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap-responsive.min.css" rel = "stylesheet" > < script src = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/js/bootstrap.min.js" ></ script > </ head > < body > < div class = "navbar navbar-static-top" > < div class = "navbar-inner" > < div class = "container" > < a class = "btn btn-navbar" data-toggle = "collapse" data-target = ".nav-collapse" > < span class = "icon-bar" ></ span > < span class = "icon-bar" ></ span > < span class = "icon-bar" ></ span > </ a > < a class = "brand" href = "index.jsp" >我的學習歷程</ a > < div class = "nav-collapse collapse" > < ul class = "nav" > < li class = "active" >< a href = "#" >首頁</ a ></ li > < li class = "dropdown" >< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" >課程選單 < b class = "caret" ></ b ></ a > < ul class = "dropdown-menu" > < li >< a href = "temp.jsp" >裝飾器</ a ></ li > < li >< a href = "ch02.jsp" >計數器</ a ></ li > < li class = "divider" ></ li > < li class = "nav-header" >期中</ li > < li >< a href = "ch03.jsp" >BBS</ a ></ li > < li >< a href = "ch04.jsp" >討論區</ a ></ li > < li >< a href = "#" >大樂透開獎</ a ></ li > < li class = "divider" ></ li > < li class = "nav-header" >期末</ li > < li >< a href = "#" >問卷/投票</ a ></ li > < li >< a href = "#" >購物車</ a ></ li > </ ul ></ li > < li >< a href = "#" >筆記1</ a ></ li > < li >< a href = "#" >筆記2</ a ></ li > </ ul > </ div > </ div > </ div > </ div > < div class = "container" > < div class = "page-header" > < h1 > <%while (rs.next()) {%> 次數:<%=rs.getString("total")%> <%} rs.close(); stat.close(); %> </ h1 > </ div > < p class = "lead" >JSP可用於網頁應用程式開發的前端,包括HTML、CSS及JavaScript的框架,提供字體排印、表單、按鈕、選單和 Javascript動態擴充。與之對應的「後端」是在伺服器上面執行的程式碼框架,JSP也能以簡單的語法提供絕大部份的應用所需。</ p > < p >此 < a href = "#" >網站</ a > 為學習JSP過程中的課程範例的學習歷程,</ p > < div class = "page-footer" > < p class = "muted credit" > 內容是由 < a href = "#" >中華科技大學</ a > 資管系 < a href = "#" >10X14D0XX同學</ a > 建立 </ p > </ div > </ div > </ body > </ html > |
大部分的學校課程都會直接傳授網頁程式設計等課程,卻忽略這重要的的 HTTP 協定。
程式設計雖然不用包山包海,但是基本常識在資訊領域中必須有所認識。
沒有留言:
張貼留言