新手入門-JSP(完結篇)

累死俺了,終於完結了,其實這裏也沒有什麼可補充的拉,就是爲了大家方便,特地把以前所有的帖都總結到這一章裏,另外在結尾處新添了兩個例子,一個是網上投票,還有一個是成績錄入查詢系統。

1. 什麼是JSP
      JSP
簡單來說就是在一個網頁中利用<%%>來嵌套JAVA程序片。例如:

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY >

<%

    out.println("這是一個JSP頁面。");

%>

</BODY>

<HTML>

2. JSP運行機制:

       JSP把靜態頁面交割客戶的瀏覽器負責顯示,動態部分(java程序片)由服務器運行,把結果交給瀏覽器顯示,每個用戶分配一個線程。

在執行JSP文件時,服務器應用程序會自動將JSP文件轉換爲Servlet文件(即java文件),然後加以編譯成爲可執行的Class(字節碼文件),所以JSP在第一次執行的時候沒有直接用Servlet快,但JSP幾乎可以實現Servlet的所有功能,其優點是比Servlet更易維護,利用JSP+JavaBean的模式完全可以實現動態和靜態的分離,大大提高程序可讀性,而且一般網站第一運行往往是在測試階段,之後當客戶訪問時已經是轉換完的Servlet文件了,因此JSPServlet更具優點,另外JSP也可以很容易的和Servlet結合。

3. JSP語法:

       3.1 JSP的結構:

              一個JSP文件一般是由五部分組成:

(1)       普通的HTML標記符。

(2)       JSP標籤。

(3)       變量和方法聲明。

(4)       Java程序片。

(5)       Java表達式。

其中後三條被成爲JSP的腳本部分。

       3.2 JSP的語法:

              3.2.1 變量的聲明:

1)在“<%!%>”之間聲明變量或方法。其中變量和方法可以是Java中的任何變量。其作用範圍是整個JSP文件。當多個用戶訪問這個頁面時,他們將共享這些變量,任何對變量的修改都會直接影響到其他用戶。這些變量只有服務器關閉時纔會釋放。

例如這個例子就是利用此方法聲明的變量,實現了訪問網頁計數功能:

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY BGCOLOR=cyan><FONT size=1>

  <%!int i=0;

  %>

  <%i++;

  %>

<P>您是第

   <%=i%>

  個訪問本站的客戶。

</BODY>

</HTML>

 

另外,如果用這個方法來聲明方法,則其中方法是在整個JSP頁面有效,但在該方法中聲明的變量爲局部的,只在該法中有效調用完畢時即釋放。而用戶往往會調用方法來修改某個變量或直接修改變量,所以,在應用這種方法聲明變量時當你要試圖修改某個數據,儘量加上關鍵字synchronized以實現同步鎖定,防止同時修改變量。

利用該方法聲明的類,也是在JSP頁面內有效,可以在其範圍內使用該類的對象,具體方法和前面的一樣。

2)在“<%%>”之間聲明變量和方法。爲局部變量和方法,可以簡單的理解爲非共享變量,即每個客戶都有自己的變量,他們的操作不會影響到其他人,程序執行完內存自動釋放。大多的Java程序片是放在這裏的。

3)筆者的簡易,儘量不要在JSP中過多使用前兩種方式來進行動態操作,應該儘量使用JavaBean來操作,儘量做到靜態頁面和動態頁面相分離,這也是爲什麼要用JSP替代Servlet的優點。

 

3.2.2 JSP中的註釋:

                     (1) HTML註釋:”<!---->”之間的爲註釋。

                     (2)JSP註釋:在”<%-- --%>”之間的爲註釋。

 

              3.2.3 JSP中的指令標籤:

                     3.2.3.1 page指令標籤

(1)page 指令用來指定整個頁面的一些屬性和這些屬性的值。

                  指令格式: <%@ page 屬性1=”屬性1的值屬性2=”屬性2的值”…%>

例如:<%@ page contentType="text/html; charset=gb2312" %> 可以指定頁面顯示漢語。

(2) import 指令可以指定多個值,爲導入JAVA類庫。

例如:<%@ import="java.sql.*",”java.awt.*” %>

(3) language屬性: 默認爲JAVA,目前也只支持JAVA

例如: <%@ page language=”java”%>

(4) contentType屬性:用來指定JSP頁面的編碼,默認屬性爲”text/html;

                  charset=ISO-8859-1”

                         (5) session 用於設置是否要使用內置的session對象。默認爲true

(6) buffer 內置輸出流對象負責將服務器的某些信息或運行結果發送到客戶端顯示可以不設置,默認爲8kb

           (7) 指定out的緩衝區被填滿時,緩衝區是否自動判斷。默認爲true

           (8) isThreadSafe 屬性用來設置頁面是否可多線程訪問。默認爲true

           (9) info屬性爲JSP頁面準備一個字符串,屬性值爲字符串。

    例:<%@ page info=”we are students”%> 可用getServletInfo();獲得。

一個綜合應用:

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>

其中errorPage是發生錯誤後應該轉到的異常處理的頁面

       3.2.3.2 include指令標籤

(1)<%@ include file=”filename”%> 要注意在引用的文件中含有類似 pagecontentType屬性設置,則此文件不要設置,否則會報錯。

(2)可作爲動作標籤,其格式爲:<jsp:include page=”fileName”/> 功能:可動態包含一個文件,即在執行時纔對這個文件進行包含,並且可以隨時修改包含文件,改後相應結果即發生變化,而靜態的引用只能重新編譯。

                     3.2.3.3 其他標籤:

(1) param標籤:以“名字-值”對應的形式爲其他標籤提供附加信息。這個標籤與jsp:includejsp:forwardjsp:plugin標籤一起使用。

格式爲:<jsp:param name=”名字”, value=”指定給param的值”>

該標籤主要功能是和include標籤連用,可以達到給加載文件傳遞參數的作用。

例:

tom.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY>

    <%  String str=request.getParameter("computer"); //獲取值。

         int n=Integer.parseInt(str);

         int sum=0;

         for(int i=1;i<=n;i++)

            { sum=sum+i;

            }

    %>

<P>

   1<%=n%>的連續和是:

<BR>

  <%=sum%>

</BODY>

</HTML>

 

Mc1035.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY>

<P>動態加載文件並傳遞參數效果:

   <jsp:include page="tom.jsp">

     <jsp:param name="computer" value="300" />

   </jsp:include>

</BODY>

</HTML>

這樣在引用tom.jsp的同時就把參數computer的值傳了過去,要注意名稱要與tom.jsp裏的request.getParameter("computer");的一直。

(2)plugin動作標籤:用來保證客戶可以執行applet小程序。該標籤只是JSP頁面加載Java plugin,該插件負責客戶下載,並使用該插件來運行Java applet

例:

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY>

<jsp:plugin type="applet" code="B.class"  jreversion="1.2" width="200" height="260" >

     <jsp:fallback>

        Plugin tag OBJECT or EMBED not supported by browser.

     </jsp:fallback>

</jsp:plugin>

</body></html>

當客戶訪問上述JSP頁面時,將導致登陸Sun公司下載Java plugin。並執行B.class

筆者認爲現在很少有人用applet程序了,大多用JS

                     3.2.3.4 useBean動作標籤

                            這個標籤是筆者認爲最重要的標籤,所以放在了最後。

                            首先介紹Java Bean的特點:

可以實現代碼服用,易編寫,易維護,易使用,可以在任何有JVM的機器上使用而不許重新編譯。

1.編寫JavaBean的規則:

(1)如果類的成員變量的名字是xxx,那麼爲了更改或獲取成員變量的值在類中可以定義兩個方法:

getXxx()來獲取屬性和setXxx()來設置屬性,要注意大小寫。

(2)對於boolean類型的成員變量,允許使用is來代替getset

(3)類中的方法屬性必須是Public的。

(4)類中如果有構造方法,那麼這個構造方法也是public的,並且是無參數的。

例:一個簡單bean

Circle.java

import java.io.*;

public class Circle 

{ int radius;

  public Circle()

     { radius=1;

     }

  public int getRadius()

     { return radius;

     }

  public void setRadius(int newRadius)

     {radius=newRadius;

     }

  public double circleArea()

     {return Math.PI*radius*radius;

     }

  public double circlLength()

     {return 2.0*Math.PI*radius;

     }

}

 

2.使用beans

使用beans時就要用到useBean標籤了,其格式爲:

<jsp:useBean id=-“bean起的名字”class=”創建beans的類”scope=”bean 有效範圍”>

</jsp:useBean>

其中scope的屬性值需要注意一下:

Scopepage:則即當客戶使用bean時爲每個客戶佔用不同的空間,簡單說bean是不共享的,用戶不能互相干涉。當用戶離開該訪問頁時無效。

Scopesession:即該bean是共享的,所有用戶訪問時將對同一個bean操作,會互相干涉。當客戶關閉瀏覽器時無效。

Scoperequest:只當用戶訪問時有效,且不是共享的。當客戶請求時作出相信,相應完後無效。

Scopeapplication:共享bean,當服務器關閉時該bean無效。

最後,若要使用bean還必須導入其類,可用命令:

<@page import=”className”>

例:Circle爲一個類文件名。

useBeans.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="Circle"%>

<HTML>

<BODY bgcolor=cyan><Font size=1>

   <jsp:useBean id="girl" class="Circle" scope="page" >

   </jsp:useBean>

  <%--通過上述JSP標籤,客戶獲得了一個作用域是page,名字是girlbeans --%>

   <% //設置圓的半徑:

      girl.setRadius(100);

   %>

<P>圓的半徑是:

   <%=girl.getRadius()%>

<P>圓的周長是:

   <%=girl.circlLength()%>

<P>圓的面積是:

   <%=girl.circleArea()%>

</BODY>

</HTML>

                                   3 獲取和修改beans的屬性

                                   getPropertysetProperty可完成該命令。

                                   格式分別爲:

                                   <jsp:getProperty name=”bean的名字” property=”beans的屬性” />

                                   <jsp:setProperty name=”bean的名字” property=”beans的屬性” />

                                   一個綜合的例子:

student.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="Student"%>

<HTML>

<BODY bgcolor=cyan><Font size=1>

   <jsp:useBean id="zhang" class="Student" scope="page" >

   </jsp:useBean>

<jsp:setProperty  name= "zhang"  property="name" value="張小三"  />

<P>名字是:

<jsp:getProperty  name= "zhang"  property="name"  />

<jsp:setProperty  name= "zhang"  property="number" value="1999001"  />

<P>學號是:

<jsp:getProperty  name= "zhang"  property="number"  />

<% double height=1.70;

%>

<jsp:setProperty  name= "zhang"  property="height" value="<%=height+0.05%>"  />

<P>身高是:

<jsp:getProperty  name= "zhang"  property="height"  />

<jsp:setProperty  name= "zhang"  property="weight" value="67.65"  />

<P>體重是:

<jsp:getProperty  name= "zhang"  property="weight"  />

公斤

</FONT>

</BODY>

</HTML>

4.JSP內置對象

       4.1 request對象

       該對象封裝了用戶提交的信息,主要時表單,表單格式和HTML的一樣,用法:

       (1)  Request.getParameter(String s);  其中s爲變量名。

              注意JSP的編碼問題,大多數可用如下指令實現:

              String str=request.getParameter(“game”);

              Byte b[]=str.getBytes(“ISO-8859-1”);

              Str=new String(b);

       (2) getProtocol() 獲取客戶向服務器提交信息所使用的通信協議。

       (3) getServletPath()獲取客戶請求的JSP頁面文件的目錄

(4) getContentLength() 獲取提交的整個信息長度。

(5) geMethod()獲取客戶提交信息的方式,如post

(6) getHeader(String s) 獲取HTTP頭文件中有參數s指定的頭名字的值

(7) getHeaderNames()獲取頭名字的一個枚舉。

(8) getHeaders(String s) 獲取頭文件中指定頭名字的全部值的一個枚舉。

(9) getRemotoAddr() 獲取客戶IP地址。

(10)getRemoteHost()獲取客戶機的名稱(如果獲取不到,就獲取IP地址)

(11)getServerName()獲取服務器的名稱

(12)getServerPort()獲取服務器端口號

(13)getParameterNames()獲取客戶提交的信息體部分中name參數值的之歌枚舉.

 

Example3_4.jsp:

<HTML>

<BODY bgcolor=cyan><FONT size=1>

<%@ page contentType="text/html;charset=GB2312" %>

   <FORM action="tree2.jsp" method=post name=form>

       <INPUT type="text" name="boy">

       <INPUT TYPE="submit" value="enter" name="submit">

   </FORM>

</FONT>

</BODY>

</HTML>

 

tree2.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.util.*" %>

<MHML>

<BODY bgcolor=cyan>

<Font size=1 >  

<BR>客戶使用的協議是:

   <% String protocol=request.getProtocol();

      out.println(protocol);

   %>

<BR>獲取接受客戶提交信息的頁面:

   <% String path=request.getServletPath();

      out.println(path);

   %>

<BR>接受客戶提交信息的長度:

   <% int length=request.getContentLength();

      out.println(length);

   %>

<BR>客戶提交信息的方式:

   <% String method=request.getMethod();

      out.println(method);

   %>

<BR>獲取HTTP頭文件中User-Agent的值::

   <% String header1=request.getHeader("User-Agent");

      out.println(header1);

   %>

<BR>獲取HTTP頭文件中accept的值:

   <% String header2=request.getHeader("accept");

      out.println(header2);

   %>

<BR>獲取HTTP頭文件中Host的值:

   <% String header3=request.getHeader("Host");

      out.println(header3);

   %>

<BR>獲取HTTP頭文件中accept-encoding的值:

   <% String header4=request.getHeader("accept-encoding");

      out.println(header4);

   %>

<BR>獲取客戶的IP地址:

   <% String  IP=request.getRemoteAddr();

      out.println(IP);

   %>

<BR>獲取客戶機的名稱:

   <% String clientName=request.getRemoteHost();

      out.println(clientName);

   %>

<BR>獲取服務器的名稱:

   <% String serverName=request.getServerName();

      out.println(serverName);

   %>

<BR>獲取服務器的端口號:

   <% int serverPort=request.getServerPort();

      out.println(serverPort);

   %>

<BR>獲取客戶端提交的所有參數的名字:

   <% Enumeration enum=request.getParameterNames();

       while(enum.hasMoreElements())

            {String s=(String)enum.nextElement();

             out.println(s);

            }     

      %>

<BR>獲取頭名字的一個枚舉:

   <% Enumeration enum_headed=request.getHeaderNames();

      while(enum_headed.hasMoreElements())

            {String s=(String)enum_headed.nextElement();

             out.println(s);

            }     

   %>

<BR>獲取頭文件中指定頭名字的全部值的一個枚舉:

   <% Enumeration enum_headedValues=request.getHeaders("cookie");

      while(enum_headedValues.hasMoreElements())

            {String s=(String)enum_headedValues.nextElement();

             out.println(s);

            }     

   %>

<BR>

   <P> 文本框text提交的信息:

   <%String str=request.getParameter("boy");

     byte  b[]=str.getBytes("ISO-8859-1");

     str=new String(b);

   %>

 <BR>

   <%=str%>

<BR> 按鈕的名字:

   <%String buttonName=request.getParameter("submit");

     byte  c[]=buttonName.getBytes("ISO-8859-1");

     buttonName=new String(c);

   %>

<BR>

   <%=buttonName%>

</Font>

</BODY>

</HTML>

4.2 response 對象

       我認爲最主要的屬性的是重定向:

       response.encodeRedirectURL(“頁面”);

       由於篇幅關係,其他的就不介紹了。

4.3 session對象

(1)public void setAttribute(String key,Object obj)

       Session對象類似與散列表,可以俺key添加值

(2)public Object getAttibute(String key)

       獲取session對象對應key的值

(3)public Enumeration getAttributeNames()

       獲取枚舉對象遍歷session,可以用nextElements()方法。

(4)public long getCreationTime()

       Session對象調用該方法可以獲取創建的時間

(5)public long getLastAccessedTime()

       獲取當前session對象最後一次被操作的時間

(6)public int get MaxInactiveIterval()

       獲取當前session的生存時間。

(7)public void setMaxInactiveIterval(int n)

       設置session對象的生存時間。

(8)public void removeAttribute(String key)

       從當前session中刪除關鍵字時key的對象

(9)public String getId()

       獲取對象的編號

(10)invalidate

       使session無效

4.4 application對象

(1)public void setAttribute(String key,Object obj)

       application對象類似與散列表,可以俺key添加值

(2)public Object getAttibute(String key)

       獲取application對象對應key的值

(3)public Enumeration getAttributeNames()

       獲取枚舉對象遍歷application,可以用nextElements()方法。

(4)public void removeAttribute(String key)

       從當前application中刪除關鍵字時key的對象

(5)public String getServletInfo()

       獲取Servlet編譯器的當前版本的信息。

4.5 out對象

out對象使一個數錯流,用來向客戶輸出信息,格式如下:

out.print(Obj); 輸出任意對象,不換行。

out.println(Obj); 輸出對象換行

out.newLine(); 輸出一個換行符

out.flush(); 輸出緩衝區裏的內容

out.close(); 關閉流

 

5 JSP裏的文件操作和數據庫操作

       這裏就不再細說了,只提示一下,因爲jsp的操作其實和java的一樣,只要把程序放在beans裏,獲<%%>裏就可以了,如果有不懂的可以參考俺以前發的帖子,裏面有詳細的介紹,是java的,其實都一樣,我的網址爲http://blog.csdn.net/mc1035/

下面再給個綜合的例子供大家參考:

(1)    文件上傳的例子:

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY>

 <P>選擇要上傳的文件:<BR>

   <FORM action="accept.jsp" method="post" ENCTYPE="multipart/form-data">

      <INPUT type=FILE name="boy" size="38">

      <BR>

     <INPUT type="submit" name ="g" value="提交"> 

 </BODY>

</HTML>

 

accept.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import ="java.io.*" %>

<HTML>

<BODY>

  <%try{  InputStream in=request.getInputStream();

          File f=new File("F:/2000","B.txt");

          FileOutputStream o=new FileOutputStream(f);

          byte b[]=new byte[1000];

          int n;

          while((n=in.read(b))!=-1)

               {o.write(b,0,n);

               }

          o.close();

          in.close();

       }

    catch(IOException ee){}

    out.print("文件已上傳");

  %>

</BODY>

</HTML>

(2)    文件下載的例子

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY>

<P>點擊超鏈接下載Zip文檔book.Zip

 <BR>  <A href="loadFile.jsp">下載book.zip

</Body>

</HTML> 

 

loadFile.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.io.*" %>

<HTML>

<BODY>

<% //獲得響應客戶的輸出流:

    OutputStream o=response.getOutputStream();

   //輸出文件用的字節數組,每次發送500個字節到輸出流:

   byte b[]=new byte[500];

   //下載的文件:

    File fileLoad=new File("f:/2000","book.zip");

   //客戶使用保存文件的對話框:

   response.setHeader("Content-disposition","attachment;filename="+"book.zip");

   //通知客戶文件的MIME類型:

    response.setContentType("application/x-tar");

   //通知客戶文件的長度:

    long fileLength=fileLoad.length();

    String length=String.valueOf(fileLength);

    response.setHeader("Content_Length",length);

   //讀取文件book.zip,併發送給客戶下載:

   FileInputStream in=new FileInputStream(fileLoad);

   int n=0;

   while((n=in.read(b))!=-1)

      { o.write(b,0,n);

      }

%>

</BODY>

</HTML>

(3)    標準化考試

標準化考試系統源代碼

ttt.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import ="java.io.*" %>

<%@ page import ="java.util.*" %>

<%!

  String answer=null;//存放答案用的字符串。

 //對字符串進行回壓流處理的方法:

public String getString(String content)

  { try{  StringReader in=new StringReader(content) ;//指向字符串的字符流。

          PushbackReader push=new PushbackReader(in); //回壓流

          StringBuffer stringbuffer=new StringBuffer(); //緩衝字符串對象。

          int c;

          char b[]=new char[1];             

          while ( (c=push.read(b,0,1))!=-1)//讀取1個字符放入字符數組b

            { String s=new String(b);

              if(s.equals("<"))        //回壓的條件 

               {  push.unread('&');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

                  push.unread('L');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

                  push.unread('T');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

                }

              else if(s.equals(">"))        //回壓的條件 

               {  push.unread('&');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

                  push.unread('G');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

                  push.unread('T');

                  push.read(b,0,1); //push讀出被回壓的字符字節,放入數組b.

                  stringbuffer.append(new String(b));

               }

              else if(s.equals("/n"))       

               {  stringbuffer.append("<BR>");

               }

              else

               { stringbuffer.append(s);

               }

            }

          push.close();

          in.close();

          return new String(stringbuffer); //返回處理後的字符串。

      }

    catch(IOException e)

      {return content=new String("不能讀取內容");

      }  

 }

  %>

  <%  String s=request.getParameter("g"); //獲取客戶提交的信息(是否重新讀取文件)

         if(s==null)

            {s="";

            }

      byte b[]=s.getBytes("ISO-8859-1");

       s=new String(b);

     File f=null;

     FileReader in=null;

     BufferedReader buffer=null;

     Integer number=new Integer(0); //初始題號。

     Integer score=new Integer(0);//初始分數。

     if(session.getCreationTime()-session.getLastAccessedTime()==0) //當第一次請求該頁面時,建立和文件的輸入流連接。

      {  f=new File("f:/2000","English.txt");

         in=new FileReader(f);

         buffer=new BufferedReader(in);

         //讀入文件的第1行:答案

         answer=buffer.readLine().trim();;

         //將上述finbuffer對象保存到用戶的session 對象中:

         session.setAttribute("file",f);

         session.setAttribute("in",in);

         session.setAttribute("buffer",buffer);

        //再將初始題號保存到session對象中:

         session.setAttribute("number",number);

        //再將用戶的初始得分保存到session對象中:

         session.setAttribute("score",score);

      }

     if(s.equals("重新練習"))   //當請求重新讀取文件時,建立和文件的輸入流連接。

      {  f=new File("f:/2000","English.txt");

         in=new FileReader(f);

         buffer=new BufferedReader(in);

         //讀入文件的第1行:答案

         answer=buffer.readLine().trim();

         //將上述finbuffer對象保存到用戶的session 對象中:

         session.setAttribute("file",f);

         session.setAttribute("in",in);

         session.setAttribute("buffer",buffer);

        //再將初始題號保存到session對象中:

         session.setAttribute("number",number);

        //再將用戶的初始得分保存到session對象中:

         session.setAttribute("score",score);

      }

      //讀取試題:

       try{ String str=null;

           f=(File)session.getAttribute("file");

           in=(FileReader)session.getAttribute("in");

           buffer=(BufferedReader)session.getAttribute("buffer");

            while((str=buffer.readLine())!=null)

                 { //爲了能顯示原始的HTML文件或JSP文件需使用回壓流技術。

                    str=getString(str);

                    if(str.startsWith("**")) //每個試題的結束標誌。

                        {break;

                        }

                   out.print("<BR>"+str);

                }

          }

        catch(IOException e)

          { out.print(""+e);

          }

  %>

  <%String code=response.encodeURL("ttt.jsp");

  %>

<HTML>

<BODY><Font size=1>

 <P><BR>請選擇答案:

 <FORM action="<%=code%>" method="post" name=form>

    <Input type=radio name="r" value="A">A

    <Input type=radio name="r" value="B">B

    <Input type=radio name="r" value="C">C

    <Input type=radio name="r" value="D">D

  <Input type=submit name="submit" value="提交答案">

 </FORM> 

<% //當用戶提交表單時,獲取提交的答案:

   //判斷用戶是否提交了答案表單:

    String select=request.getParameter("submit"); //獲取客戶提交的答案選擇表單

         if(select==null)

            {select="";

            }

      byte c[]=select.getBytes("ISO-8859-1");

      select=new String(c);

   if(select.equals("提交答案"))

    {  String userAnswer=request.getParameter("r");

        if(userAnswer==null)

             { userAnswer="#";

             }

      //將提交的答案與正確答案進行比較:

      //首先獲取題號:

       Integer num=(Integer)session.getAttribute("number"); 

       int tihao=num.intValue();

       //獲取相應題號的標準答案:

        char correctAnswer='/0';

        try{ correctAnswer=answer.charAt(tihao);

           }

        catch(StringIndexOutOfBoundsException ee)

           { tihao=0;

           }

       //然後再將題號重新存入session對象:

         tihao=tihao+1;

        Integer newNumber=new Integer(tihao);

        session.setAttribute("number",newNumber);

       //將用戶提交的答案與標準答案比較

       char user=userAnswer.charAt(0);

       if(user==correctAnswer)

           { //給用戶增加分值:

             Integer newScore=(Integer)session.getAttribute("score");

             int fenshu=newScore.intValue();

             fenshu=fenshu+1;

             newScore=new Integer(fenshu);

             session.setAttribute("score",newScore);

             out.print("您答對了,您現在的得分是:");

             out.print(""+fenshu);

           }

       else

           { out.print("您沒有答對,繼續努力!");

             out.print("您現在的得分是:"+session.getAttribute("score"));

           }

   }

%>

<P><BR>點擊按鈕重新練習:

<FORM action="" method="post" name=form>

    <Input type=submit name="g" value="重新練習">

 </FORM> 

</FONT>

</BODY>

</HTML>

4)分頁顯示記錄

        showByPage.jsp:(效果如圖5.28所示)

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY>

 <%! int pageSize=3; //每頁顯示的記錄數。

     int pageCount=0; //分頁後的總頁數。

 %>

<%-- 客戶通過表單提交欲要顯示的頁碼數--%>

<FORM action="" method=get >

 輸入頁碼數<Input Type=text name=showPage size=4 >

   <Input Type=submit name=g value=提交>

 </FORM>

<%  Connection con;

    Statement sql;

    ResultSet rs;

    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

       }

    catch(ClassNotFoundException e){}

    try { con=DriverManager.getConnection("jdbc:odbc:sun","sa","");

         sql=

con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

        //返回可滾動的結果集:

         rs=sql.executeQuery("SELECT * FROM students");

        //將遊標移動到最後一行:

            rs.last();

        //獲取最後一行的行號:

         int lastRow=rs.getRow();

        //計算分頁後的總頁數:

        pageCount=(lastRow%pageSize==0)?(lastRow/pageSize):(lastRow/pageSize+1);

        //當前顯示的初始頁數:

        int showPage=1;

        //告知客戶總頁數:

      %>

        <P> 共有<%=pageCount%>

        <BR>每頁顯示<%=pageSize%>條記錄.

      <% //獲取客戶想要顯示的頁數:

          String integer=request.getParameter("showPage");

               if(integer==null)

                  { integer="1";

                  }

           try {showPage=Integer.parseInt(integer); 

               }

           catch(NumberFormatException e)

               {showPage=1;

               }

          if(showPage<=1)

             {showPage=1;

             }

          if(showPage>=pageCount)

             {showPage=pageCount;

             }

      %>

        <BR>目前顯示第<%=showPage%> 

      <% //如果要顯示第showPage頁,那麼遊標應移到posion的值是:

         int posion=(showPage-1)*pageSize+1;

          rs.absolute(posion); // 設置遊標的位置

          out.print("<Table Border>");

          out.print("<TR>");

            out.print("<TH width=100>"+"學號");

            out.print("<TH width=100>"+"姓名");

            out.print("<TH width=50>"+"數學成績");

            out.print("<TH width=50>"+"英語成績");

            out.print("<TH width=50>"+"物理成績");

          out.print("</TR>");

       for (int i=1;i<=pageSize;i++)

        { out.print("<TR>");

             out.print("<TD >"+rs.getString(1)+"</TD>");

             out.print("<TD >"+rs.getString(2)+"</TD>");

             out.print("<TD >"+rs.getInt("數學成績")+"</TD>");

             out.print("<TD >"+rs.getInt("英語成績")+"</TD>");

            out.print("<TD >"+rs.getInt("物理成績")+"</TD>");  

         out.print("</TR>") ;

          rs.next(); 

         }

       out.print("</Table>");

      con.close();

     }

   catch(SQLException e1) {}

 %>

</BODY>

</HTML>

 

(5) l連接Oracle數據庫

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY>

 <% Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

    try{Class.forName("oracle.jdbc.driver.OracleDriver");

       }

    catch(ClassNotFoundException e){}

    try

      {  con=

DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.35:1521:Lea","scott","tiger");

         sql=con.createStatement();

         rs=sql.executeQuery("select * from emp");

         out.print("<Table Border>");

         out.print("<TR>");

            out.print("<TH width=100>"+"EMPNO");

            out.print("<TH width=50>"+"Ename");

         out.print("</TR>");

       while(rs.next())

       { out.print("<TR>");

             int n=rs.getInt(1);

             out.print("<TD >"+n+"</TD>");

            String e=rs.getString(2);

             out.print("<TD >"+e+"</TD>");

         out.print("</TR>") ; 

        }

        out.print("</Table>");

        con.close();

     }

   catch(SQLException e1) {out.print(""+e1);}

 %>

</BODY>

</HTML>

 

6)查詢電子表格

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY>

 <% Connection con; 

     Statement sql; 

     ResultSet rs;

    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

      }

    catch(ClassNotFoundException e){}

    try { con=DriverManager.getConnection("jdbc:odbc:star","","");

         sql=con.createStatement();

         rs=sql.executeQuery("SELECT * FROM 品名 ");

         out.print("<Table Border>");

         out.print("<TR>");

            out.print("<TH width=100>"+"品名");

            out.print("<TH width=50>"+"單位");

            out.print("<TH width=50>"+"單價");

         out.print("</TR>");

       while(rs.next())

       { out.print("<TR>");

            String name=rs.getString(1);

             out.print("<TD >"+name+"</TD>");

            String  unit=rs.getString(2);

             out.print("<TD >"+unit+"</TD>");

            String  unitprice=rs.getString(3);

            out.print("<TD >"+unitprice+"</TD>");

         out.print("</TR>") ;         

        }

        out.print("</Table>");

        con.close();

     }

   catch(SQLException e1) {}

 %>

</BODY>

</HTML>

 

7)使用同步連接

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY>

 <%! //聲明一個共享的連接對象:

    Connection con=null;

  %>

 <% Statement sql=null;

    ResultSet rs=null;

    //第一個客戶負責建立連接對象:

    if(con==null)

      { try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

           }

           catch(ClassNotFoundException e)

           {out.print(e);

           }

        try {con=DriverManager.getConnection("jdbc:odbc:moon","sa","");

           sql=con.createStatement();

           rs =sql.executeQuery("SELECT * FROM students");

           out.print("i am  first");

          }

        catch(SQLException e)

          {out.print(e);

          }

      }

     //其它客戶通過同步塊使用這個連接:

     else

      { synchronized(con)

        {  try { sql=con.createStatement();

               rs =sql.executeQuery("SELECT * FROM students");

               out.print("i am not first");

               }

          catch(SQLException e)

               {out.print(e);

               }

        }

      }

    try

      {  out.print("<Table Border>");

         out.print("<TR>");

            out.print("<TH width=100>"+"學號");

            out.print("<TH width=100>"+"姓名");

            out.print("<TH width=50>"+"數學成績");

            out.print("<TH width=50>"+"英語成績");

            out.print("<TH width=50>"+"物理成績");

         out.print("</TR>");

       while(rs.next())

       { out.print("<TR>");

           String  number=rs.getString(1);

             out.print("<TD >"+number+"</TD>");

           String  name=rs.getString(2);

             out.print("<TD >"+name+"</TD>");

           int  math=rs.getInt("數學成績");

             out.print("<TD >"+math+"</TD>");

           int  english=rs.getInt("英語成績");

             out.print("<TD >"+english+"</TD>");

           int  physics=rs.getInt("物理成績");

             out.print("<TD >"+physics+"</TD>");  

        out.print("</TR>") ;         

        }

      out.print("</Table>");

    }

   catch(SQLException e1) {}

 %>

</BODY>

</HTML>

8)投票系統

vote.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY>

 <%  StringBuffer nameList=new StringBuffer();

      Connection con;

      Statement sql;

      ResultSet rs;

      try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        }

      catch(ClassNotFoundException e){}

      try{ con=DriverManager.getConnection("jdbc:odbc:vote","","");

          sql=con.createStatement();

          rs=sql.executeQuery("SELECT * FROM people");

          nameList.append("<FORM action=startvote.jsp  Method=post>");

          nameList.append("<Table Border>");

          nameList.append("<Table Border>");

          nameList.append("<TR>");

          nameList.append("<TH width=100>"+"姓名");

          nameList.append("<TH width=50>"+"投票選擇");

          nameList.append("</TR>");

          while(rs.next())

             { nameList.append("<TR>");

               String name=rs.getString(1);

               nameList.append("<TD >"+name+"</TD>");

               String s="<Input type=radio name=name value="+name+" >";

               nameList.append("<TD >"+s+"</TD>");  

               nameList.append("</TR>") ;         

             }

          nameList.append("</Table>");

          nameList.append("<Input Type=submit value=提交>");

         nameList.append("</FORM ");

        con.close();

        out.print(nameList);

       }

      catch(SQLException e1) {}

%>

</BODY>

</HTML>

startvote.jsp(效果如圖5.405.41所示):

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<%@ page import="java.io.*" %>

<html>

<body>

<%! //記錄總票數的變量:

    int total=0;

    //操作總票數的同步方法:

    synchronized void countTotal()

        { total++;

        }  

%>

<% boolean vote=true;//決定用戶是否有權投票的變量。

    //得到被選擇的候選人名字:

    String name="";

    name=request.getParameter("name");

      if(name==null)

       {name="?";

       }

    byte a[]=name.getBytes("ISO-8859-1");

    name =new String(a);

    //得到投票人的IP地址:

    String IP=(String)request.getRemoteAddr();

    //加載橋接器:

     try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        }

     catch(ClassNotFoundException e){}

    Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

   //首先查詢IP表,判斷該用戶的IP地址是否已經投過票:

    try {  con=DriverManager.getConnection("jdbc:odbc:vote","","");

          sql=con.createStatement();

          rs=sql.executeQuery("SELECT * FROM IP WHERE IP = "+"'"+IP+"'");

          int row=0;

         while(rs.next())

            { row++;

            }

          if(row>=1)

            { vote=false;     //不允許投票。

            }

         }

    catch(SQLException e)

       { }

if(name.equals("?"))

    { out.print("您沒有投票,沒有權利看選舉結果");

    }

 else

  {

    if(vote)

    {   out.print("您投了一票");

         //將總票數加1

         countTotal();

        //通過連接數據庫,給該候選人增加一票,

        //同時將自己的IP地址寫入數據庫

       try

         { rs=sql.executeQuery("SELECT * FROM people WHERE name = "+"'"+name+"'");

           rs.next();

           int count=rs.getInt("count");

           count++;

           String condition=

              "UPDATE people SET count = "+count+" WHERE name="+"'"+name+"'" ;

         //執行更新操作(投票計數)

          sql.executeUpdate(condition);

          //IP地址寫入IP表:

         String to=

         "INSERT INTO IP VALUES"+"("+"'"+IP+"'"+")";

          sql.executeUpdate(to);

         }

       catch(SQLException e)

         { out.print(""+e);

         }

      //顯示投票後的表中的記錄:

       try{ rs=sql.executeQuery("SELECT * FROM people");

            out.print("<Table Border>");

            out.print("<TR>");

            out.print("<TH width=100>"+"姓名");

            out.print("<TH width=50>"+"得票數");

             out.print("<TH width=50>"+"總票數:"+total);

            out.print("</TR>");

         while(rs.next())

            {  out.print("<TR>");

               out.print("<TD >"+rs.getString(1)+"</TD>");

               int count=rs.getInt("count");

               out.print("<TD >"+count+"</TD>");

               double b=(count*100)/total;  //得票的百分比。

               out.print("<TD >"+b+"%"+"</TD>");

               out.print("</TR>") ; 

            }

           out.print("</Table>");

           con.close();

         }

     catch(SQLException e)

        { }

   }

  else

   {out.print("您已經投過票了");

   }

 }

%>

</BODY>

</HTML>

(9)成績錄入查詢系統

main.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<BODY BGcolor=yellow>

<CENTER>

<FONT SIZE=2>

<P>成績錄入查詢系統

<BR>

<BR><A HREF="login.jsp">錄入人員登錄</A>

<BR><A HREF="inputMessage.jsp">錄入學生的基本信息</A>

<BR><A HREF="inputResult.jsp">錄入學生成績</A>

<BR><A HREF="modifySecret.jsp">修改密碼</A>

<BR><A HREF="inquire.jsp">查詢成績</A>

</FONT>

</CENTER>

</BODY>

</HTML>

 

登錄頁面

login.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY  bgcolor=pink ><Font size=1>

 <P>成績輸入人員登錄

<FORM action="login.jsp" Method="post">

<BR>輸入帳號:

<BR><Input type=text name="account">

<BR>輸入密碼:

<BR><Input type=password name="secret">

<BR><Input type=submit name="g" value="提交">

</FORM>

<%  //獲取提交的帳號:

    String account=request.getParameter("account");

       if(account==null)

            {account="";

            }

       byte b[]=account.getBytes("ISO-8859-1");

       account=new String(b);

    //獲取提交的密碼:

    String secret=request.getParameter("secret");

       if(secret==null)

            {secret="";

            }

     byte c[]=secret.getBytes("ISO-8859-1");

     secret=new String(c);

    //查詢數據庫信息,驗證身份:

    Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          }

    catch(ClassNotFoundException event){}

    try

      {con=DriverManager.getConnection("jdbc:odbc:manage","","");

       sql=con.createStatement();

       String condition="SELECT * FROM verify WHERE 帳號 = "+"'"+account+"'";

       rs =sql.executeQuery(condition);

       while(rs.next())

            { String n=rs.getString("帳號");

              String s=rs.getString("密碼");

              if(account.equals(n)&&secret.equals(s))

                { //將帳號和密碼存入session對象,以備在輸入界面:inputMessage.jsp中使用:

                   session.setAttribute("account",account);

                   session.setAttribute("secret",secret);

                 //爲了防止客戶瀏覽器限制了Cooker的使用,需對連接進行重定向處理:

                 String s1=response.encodeRedirectURL("inputMessage.jsp");

                 String s2=response.encodeRedirectURL("inputResult.jsp");

                 //連接到基本信息輸入頁面:

                 response.sendRedirect(s1);

                }

            }

       if(!(session.isNew()))

           { out.print("<BR>您輸入的帳號或密碼不正確"+account+":"+secret);

           }

      }

    catch(SQLException e1) {}

%>

<BR><A HREF="main.jsp">返回主頁</A>

</FONT>

</BODY>

</HTML>

 

基本信息輸入頁面(效果如圖5.45所示)

inputMessage.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY  bgcolor=pink ><Font size=1>

<P>在該頁面輸入若干個學生的基本信息,<BR>或直接連接到成績輸入頁面。

 <%!//處理字符串的一個常用方法:

    public String getString(String s)

     { if(s==null) s="";

       try {byte a[]=s.getBytes("ISO-8859-1");

            s=new String(a);

           }

       catch(Exception e)

           {

           }

       return s;

     }

 %>

<% //爲了防止客戶瀏覽器限制了Cooker的使用,需對連接進行重定向處理:

   String s1=response.encodeRedirectURL("inputMessage.jsp");

   String s2=response.encodeRedirectURL("inputResult.jsp");

%>

<% //爲了防止客戶直接進入該頁面,首先從session對象獲取密碼和帳號信息:

    String account="",secret="";

    if(session.isNew())

       {//如果直接進入該頁面就再連接到登錄頁面:

         response.sendRedirect("login.jsp");

       }

    else

       { account=(String)session.getAttribute("account");

         secret=(String)session.getAttribute("secret");

         secret=getString(secret);

         account=getString(account);

       }

   //連接到數據庫驗證帳號和密碼:

    Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

    boolean boo=false;

    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

       }

    catch(ClassNotFoundException event){}

    try

      {con=DriverManager.getConnection("jdbc:odbc:manage","","");

       sql=con.createStatement();

       String condition="SELECT * FROM verify WHERE 帳號 = "+"'"+account+"'";

       rs =sql.executeQuery(condition);

       while(rs.next())

            { String n=rs.getString("帳號");

              String s=rs.getString("密碼");

              if(account.equals(n)&&secret.equals(s))

                {boo=true; break;

                }

            }

      }

    catch(SQLException e1) {}

   //如果帳號密碼正確,就顯示輸入學生基本信息的表單界面:

   if(boo)

    {out.print("<FORM action= "+s1+" method=post>");

     out.print("<P>輸入學生的基本信息:");

     out.print("<BR>學號:");

     out.print("<Input type=text name=number1>");

     out.print("<BR>姓名:");

     out.print("<Input type=text name=name>");

     out.print("<BR>專業:");

     out.print("<Input type=text name=zhuanye>");

     out.print("<BR>年級:");

     out.print("<Input type=text name=grade>");

     out.print("<BR> <Input type=submit value=提交>");

     out.print("</FORM>");

    }

   else

    {response.sendRedirect("login.jsp");

    }

%>

<% //獲取基本信息存入數據庫中的"基本信息"表中:

   String number1=request.getParameter("number1"),

          name   =request.getParameter("name"),

          zhuanye=request.getParameter("zhuanye"),

          grade  =request.getParameter("grade");

   if(number1==null)

      {number1="????????";

      }

   number1=getString(number1);

   number1=number1.trim();

   name   =getString(name);

   zhuanye=getString(zhuanye);

   grade  =getString(grade);  

   String  basicmessage=

   "INSERT INTO 基本信息 VALUES"+"("+"'"+number1+"','"+name+" ',' "+

                                      zhuanye+" ',' "+grade+" ' "+")";

      if(!(number1.startsWith("?")))

        { //首先查找基本信息表中是否已存在該學生的信息:

          rs=sql.executeQuery("SELECT * FROM 基本信息 WHERE 學號 ="+" '"+number1+"' " );

          //如果該學號的學生已經存在,就轉入成績輸入頁面:

          boolean line=rs.next();

          //通過line判斷結果集是否有記錄

           if(line==true)

              {  out.print("該考號已經存在,請再錄入其它學生的基本信息");

                 out.print("<BR>也可以點擊按鈕:進入成績錄入頁面");

                 //顯示該生的基本信息:

                 out.print("<BR>學號"+rs.getString(1)) ;

                 out.print("<BR>姓名"+rs.getString(2)) ;

                 out.print("<BR>專業"+rs.getString(3)) ;

                 out.print("<BR>年級"+rs.getString(4)) ;

              }

          //如果該學號的學生不存在,就將信息寫入基本信息表,再轉入成績輸入頁面:

         else

             {sql.executeUpdate(basicmessage);

              out.print("<BR>該學生的信息已錄入成功,請再錄入其它學生的基本信息");

              out.print("<BR>也可以點擊按鈕:進入成績錄入頁面");

             }

        }

     else

        {out.print("必須輸入學號,學號不可以用?開頭");

        }

    con.close();

 %>

<FORM action=<%=s2%>>

<P>點擊按鈕連接到學生成績輸入頁面:

<BR><Input type="submit" value="連接到學生成績輸入頁面">

<BR><A HREF="main.jsp">返回主頁</A>

</BODY>

</HTML>

 

成績錄入頁面

inputResult.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY  bgcolor=yellow ><Font size=1>

 <%!//處理字符串的一個常用方法:

    public String getString(String s)

     { if(s==null) s="";

       try {byte a[]=s.getBytes("ISO-8859-1");

            s=new String(a);

           }

       catch(Exception e)

           { }

       return s;

     }

 %>

<% String s1=response.encodeRedirectURL("inputMessage.jsp");

   String s2=response.encodeRedirectURL("inputResult.jsp");

%>

<% //爲了防止客戶直接進入該頁面,首先從session對象獲取密碼和帳號信息:

    String account="",secret="";

    if(session.isNew())

       {//如果直接進入該頁面就連接到登錄頁面:

         response.sendRedirect("login.jsp");

       }

    else

       { account=(String)session.getAttribute("account");

         secret=(String)session.getAttribute("secret");

         secret=getString(secret);

         account=getString(account);

       }

//連接到數據庫驗證帳號和密碼:

    Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

    boolean boo=false;

    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

       }

    catch(ClassNotFoundException event){}

    try

      {con=DriverManager.getConnection("jdbc:odbc:manage","","");

       sql=con.createStatement();

       String condition="SELECT * FROM verify WHERE 帳號 = "+"'"+account+"'";

       rs =sql.executeQuery(condition);

       while(rs.next())

            { String n=rs.getString("帳號");

              String s=rs.getString("密碼");

              if(account.equals(n)&&secret.equals(s))

                {boo=true; break;

                }

            }

      }

    catch(SQLException e1) {}

   //如果帳號密碼正確,就顯示輸入成績的表單界面:

  if(boo)

    {out.print("<P>輸入學生的考試科目、成績等信息:");

     out.print("<FORM action="+s2+" method=post>");

     out.print("<BR>學號:");

     out.print("<Input type=text name=number2>");

     out.print("<BR>科目:");

     out.print("<Input type=text name=subject>");

     out.print("<BR>成績:");

     out.print("<Input type=text name=result>");

     out.print("<BR> <Input type=submit value=提交>");

     out.print("</FORM>");

    }

   else

    {response.sendRedirect("login.jsp");

    }

%>

<%     String number2=request.getParameter("number2"),

        subject=request.getParameter("subject"),

        result=request.getParameter("result");

        if(number2==null)

          {number2="########";

          }

         number2=getString(number2);

         subject=getString(subject);

         result=getString(result);

         number2=number2.trim();

    //"基本信息"表中查找學號是nunumber2的記錄:

         String basicmessage=

         "SELECT * FROM 基本信息 WHERE 學號 = "+" '"+number2+"'";

    try {  sql=con.createStatement();

           rs=sql.executeQuery(basicmessage);

           boolean line=rs.next();

          //通過line判斷結果集是否有記錄,

          //如果沒有該學生的基本信息就返回提示:

         if(line==false)

            {out.print("你還沒有輸入成績呢,");

             out.print("如果你輸入的學號不在<BR>學生的基本信息表中,");

             out.print("請點擊按鈕:連接到學生<BR>基本信息輸入頁面.");

            }

         else

            {  //顯示該生的基本信息:

               out.print("<BR>學號"+rs.getString(1)) ;

               out.print("<BR>姓名"+rs.getString(2)) ;

               out.print("<BR>專業"+rs.getString(3)) ;

               out.print("<BR>年級"+rs.getString(4)) ;

               String resultmessage=

               "INSERT INTO 成績 VALUES"+"("+"'"+number2+"','"+subject+" ','"+result+"' "+")";

               sql.executeUpdate(resultmessage);

               out.print("<BR>成績已被錄入");

            }

        }

     catch(SQLException e)

        {out.print("<BR>"+subject+"該課程的成績已經存在<BR>不允許重複錄入");

        }

  con.close();

%>

<FORM action=<%=s1%>>

<P>點擊按鈕連接到學生信息輸入頁面:

<BR><Input type="submit" value="連接到學生基本信息輸入頁面">

</FORM>

</BODY>

</HTML>

 

成績查詢頁面

inquire.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY bgcolor=orange ><Font size=1>

 <FORM action="" Method=post>

  輸入學生的學號:

 <Input type=text name=number>

 <Input type=submit name=g vale=提交>

 </FORM>

 <%!  Connection con=null; //聲明一個共享的連接對象

  %>

 <% //獲取學號:

    String studentNumber=request.getParameter("number");

        if(studentNumber==null)

          {studentNumber="?";

          }

    byte b[]=studentNumber.getBytes("ISO-8859-1");

    studentNumber=new String(b);

    Statement sql=null;

    ResultSet rs=null;

    if(con==null)

      { try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

           }

           catch(ClassNotFoundException e)

           {out.print(e);

           }

        try {con=DriverManager.getConnection("jdbc:odbc:manage","","");

          String condition="SELECT * FROM 成績 WHERE 學號 = "+"'"+studentNumber+"'";

                 rs =sql.executeQuery(condition);

          }

        catch(SQLException e)

          {out.print(e);

          }

      }

     else

      { synchronized(con)

        {  try { sql=con.createStatement();

             String condition="SELECT * FROM 成績 WHERE 學號 = "+"'"+studentNumber+"'";

                 rs =sql.executeQuery(condition);

               }

          catch(SQLException e)

               {out.print(e);

               }

        }

      }

    try {  out.print("<Table Border>");

         out.print("<TR>");

            out.print("<TH width=100>"+"學號");

            out.print("<TH width=100>"+"課程名稱");

            out.print("<TH width=50>"+"成績");

        out.print("</TR>");

       while(rs.next())

       { out.print("<TR>");

           String  number=rs.getString(1);

             out.print("<TD >"+number+"</TD>");

           String  subjectName=rs.getString(2);

             out.print("<TD >"+subjectName+"</TD>");

           String  chengji=rs.getString("成績");

             out.print("<TD >"+chengji+"</TD>");

        out.print("</TR>") ;

        }

      out.print("</Table>");

    }

   catch(SQLException e1) {}

 %>

<BR><A HREF="main.jsp">返回主頁</A>

</FONT>

</BODY>

</HTML>

 

修改密碼頁面

modifySecret.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.sql.*" %>

<HTML>

<BODY  bgcolor=pink ><Font size=1>

 <P>修改密碼,密碼長度不能超過30個字符:

<FORM action="" Method="post">

<BR>輸入您的帳號:

<BR><Input type=text name="account">

<BR>輸入您的密碼:

<BR><Input type=password name="secret">

<BR>輸入您的新的密碼:

<BR><Input type=text name="newSecret1">

<BR>請再輸入一次新密碼:

<BR><Input type=text name="newSecret2">

<BR><Input type=submit name="g" value="提交">

</FORM>

<%!//處理字符串的一個常用方法:

    public String getString(String s)

     { if(s==null) s="";

       try {byte a[]=s.getBytes("ISO-8859-1");

            s=new String(a);

           }

       catch(Exception e)

           { }

       return s;

     }

 %>

<%  //獲取提交的帳號:

    String account=request.getParameter("account");

           account=getString(account);

    //獲取提交的密碼:

    String secret=request.getParameter("secret");

           secret=getString(secret);

   //獲取提交的新密碼:

    String newSecret1=request.getParameter("newSecret1");

           newSecret1=getString(newSecret1);

    //獲取提交的新密碼:

    String newSecret2=request.getParameter("newSecret2");

       newSecret2=getString(newSecret2);

     try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          }

     catch(ClassNotFoundException event){}

    //查詢數據庫信息,驗證身份:

    Connection con=null;

    Statement sql=null;

    ResultSet rs=null;

    boolean modify=false;

    boolean ifEquals=false;

            ifEquals=(newSecret1.equals(newSecret2))&&(newSecret1.length()<=30);

    if(ifEquals==true)

        {try

           { con=DriverManager.getConnection("jdbc:odbc:manage","","");

             sql=con.createStatement();

             String condition="SELECT * FROM verify WHERE 帳號 = "+"'"+account+"'";

             rs =sql.executeQuery(condition);

             while(rs.next())

                 { String n=rs.getString("帳號");

                   String s=rs.getString("密碼");

                   if(account.equals(n)&&secret.equals(s))

                    {  //修改密碼:

                     modify=true;

                     out.print("您的密碼已經更新");

                     String c=

         "UPDATE verify SET 密碼 = "+"'"+newSecret1+"'"+" WHERE 帳號 = "+"'"+account+"'";

                     rs =sql.executeQuery(c);

                    }

                  }

           }

         catch(SQLException e1) {}

        }

    else

       { out.print("你兩次輸入的密碼不一致或長度過大");

       }

    if(modify==false&&ifEquals==true)

     { out.print("<BR>您沒有輸入密碼帳號或<BR>您輸入的帳號或密碼不正確"+account+":"+secret);

     }

%>

</FONT>

</BODY>

</HTML>

 

呵呵,上面舉的例子都是具有代表性的例子。

在文章最後還要聲明一下:本篇文章是參考JSP實用教程寫的,再次提出感謝,另外該書不錯,本人看了,推薦JSP初學者可以買一本看看,獲益非淺的。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章