日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP快速入门教程——全十讲

發(fā)布時間:2025/3/21 javascript 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP快速入门教程——全十讲 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一講(參考《Java?Web程序設計基礎(chǔ)教程》第1章)
1 JSP 和?Java的關(guān)系

?? 一般Java指的標注版?Java SE
?? 另外兩個版本:Java EE?和 Java ME

?? JSP屬于Java EE的一部分。
?? Java EE:
???? 組件:Web層組件(JSP+Servlet)+業(yè)務層組件(EJB)
???? 服務:JNDI JDBC RMI JAAS JavaMail等等

?? Java EE包括2個體系:標準(上面介紹的)+流行(Struts+hibernate+spring)
?? 兩套體系都是JSP+Servlet為基礎(chǔ)。

2 JSP會涉及哪些內(nèi)容
??
?? JSP語法基礎(chǔ)(Java+HTML):
?????? 對于Java,需要掌握Java的基本語法(類定義 對象定義和使用 常用類庫java.lang.*,java.util.*)
?????? 對于HTML,主要表單元素(輸入)+表格(顯示信息)+基本HTML
?? JSTL,標準標簽庫,用于輸出和控制
?? EL,通常與JSTL一起使用,主要用于輸出
?? Servlet,幾乎所有介紹JSP的書和課程都包含Servlet,因為JSP實際上指的是Java Web開發(fā)。用Servlet主要是控制器。
?? JDBC,對數(shù)據(jù)庫的訪問。
?? JavaBean(Java類)

3 JSP的運行環(huán)境

?? JDK
?? 服務器:我們用Tomcat。其它的服務器:IBM Websphere + BEA WebLogic? + JBoss(免費的) + GlassFish(新出的Java EE 5服務器)

4 JSP的開發(fā)環(huán)境
?
?? 頁面:DreamWeaver開發(fā)頁面
?? 代碼:本文編輯器 Eclipse NetBeans JBuilder
?? 注:我們采用記事本。

5 Tomcat文件夾
?
?? webapps? 主要各個應用,編寫的每個應用(網(wǎng)站)都可以放在這個位置
?? bin? 這個是啟動服務器的相關(guān)文件,tomcat6用于命令行方式的啟動,tomcat6w用于windows方式的啟動
?? conf? 用于配置,常用的是server.xml 另外一個是web.xml
?? work 存放臨時文件
?? logs? 系統(tǒng)運行時候的日志信息

6 實例:hello.jsp

?? 創(chuàng)建一個應用,實際上需要在webapps中創(chuàng)建文件夾,bookstore,相當于應用的名字

?? 文件夾中要創(chuàng)建一個子文件夾WEB-INF,這個每個應用web應用都需要的。

?? 在WEB-INF中需要web.xml,是web應用的配置文件,還應該有classes和lib子文件夾(存放類文件)

?? JSP文件和HTML文件直接放在bookstore下面。

?? hello.jsp文件內(nèi)容如下:
<%@ page contentType="text/html;charset=gb2312"%>
<!-- 上面的代碼聲明文檔類型和編碼方式,每個JSP文件基本上都會有 -->
<html>
?? <head>
????? <title>第一個JSP程序</title>
?? </head>

?? <body>
????? Hello,晚上好!
?? </body>???
</html>

?? 先啟動服務器:
?? 訪問程序:http://127.0.0.1:8080/bookstore/hello.jsp
?? http表示協(xié)議
?? 127.0.0.1表示主機IP地址,也可以寫主機名字
?? 8080表示服務的端口,上網(wǎng)的時候不用輸入端口,因為采用了默認的端口,默認端口80。
?? bookstore表示應用,是應用的名字
?? hello.jsp就是資源

7 JSP的運行原理

?? 過程:
????? 首先啟動服務器,并且要保證應用在服務器上(把應用放在webapps下面,會自動加載)
????? 在客戶端通過瀏覽器發(fā)送請求(在地址欄中輸入地址)
????? 服務器接收到請求之后,查找有沒有這個文件對應的Java文件的對象。如果沒有這個對象,需要創(chuàng)建(先把JSP文件轉(zhuǎn)換成Java文件,
????? 編譯成.class文件,加載類并創(chuàng)建對象),然后調(diào)用對象的相應方法,方法完成對用戶的響應,通常是輸出的html代碼)
????? 客戶端接收到的是html代碼,瀏覽器解析這個代碼生成頁面。
???
8 表格的語法
?? 開始標志:<table>??
?? 結(jié)束標志:</table>
?? 中間是行,每行是一個<tr>? </tr>
?? 每行之間是列,每一列對應<td> </td>
?? <td></td>之間的內(nèi)容就是每個表格中的信息

******http://blog.csdn.NET/javaeeteacher*******************************************************************
*************************************************第一講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************


第二講(參考《Java Web程序設計基礎(chǔ)教程》第2章)
1、form
?? 只要是涉及向服務器提交信息,都應該使用form。
?? 基本語法結(jié)構(gòu):
?? <form action="目標文件" method="get|post">
????? 各種表單元素
?? </form>
?? action屬性決定的目標文件來對用戶提交的信息進行處理。

2、常用的表單元素

?? 單行文本框:用于輸入少量的信息。
?? 基本語法格式:
?? <input type="text" name="名字" value="值">
?? type="text"就說明這是單行文本框;
?? name指出文本框的名字,最好不要用漢字,最好使用有意義的名字;
?? value指出默認值,如果沒有默認值,可以不要value屬性,value屬性經(jīng)常在修改的時候使用。
?? 注意:如果有格式要求,要明確的告訴用戶。


?? 密碼框:用于輸入密碼。
?? 基本的語法格式:
?? <input type="password" name="名字" value="值">
?? 注意:設置密碼的時候,應該使用確認密碼,應該有兩個密碼框。


?? 提交按鈕:當點擊它的時候,會把輸入的信息提交給服務器。
?? 基本語法格式:
?? <input type="submit" value="值">
?? type應該為submit,value是顯示在按鈕上面的信息。

??
?? 復位按鈕:當點擊它的時候,會把各個表單元素的值恢復到默認值。
?? 基本語法格式:
?? <input type="reset" value="值">
??

?? 普通按鈕:也可以完成提交,還可以完成方法的調(diào)用。
?? 基本語法格式:
?? <input type="button" value="值">


?? 單選按鈕:通用用于在多個選項中選擇一個。
?? 基本語法格式:
?? <input type="radio" name="名字" value="值">
?? 這個表示一個單選按鈕,并且僅僅是一個按鈕。
?? 例,選擇性別:
?? <input type="radio" name="sex" value="1" checked>男
?? <input type="radio" name="sex" value="0">女
?? 如果希望在多個選項中選擇一個(有互斥性),必須讓他們的名字一致。


?? 復選框:用于多選。
?? 基本的語法格式:
?? <input type="checkbox" name="名字" value="值">
?? 顯示給用戶的信息與提交給服務器的信息沒有關(guān)系。
?? 如果希望多個選項是一組,應該使用相同的名字。


?? 下拉列表:用于選擇,可以單選,也可以多選。
?? 基本語法格式:
?? <select name="名字">
????? <option value="1" selected>1</option>
????? <option value="2">2</option>
????? ...
?? </select>
?? 每個選項使用一個option,使用value屬性指出該選項的值,在<option>和</option>之間是顯示給用戶的值。


?? 文本域:用于輸入大量的信息。
?? 基本語法格式:
?? <textarea name="名字" cols="列數(shù)" rows="行數(shù)">
???? 默認值
?? </textarea>
?? 要為這個文本域賦默認值,需要把值放在開始標志和結(jié)束標志之間,而不是使用value屬性。

3、完成輸入的時候應該注意的問題
?? 對格式的要求必須明確,包括長度、數(shù)字、日期、email、電話、必添。
?? 能夠從系統(tǒng)中獲取的信息不要讓用戶提供,例如當前時間。
?? 能夠選擇的信息不要讓用戶輸入。
?? 按照信息的重要程度安排表單元素在界面中的位置。

4、對用戶輸入信息進行驗證
?? 要用JavaScript,使用下面的標記:
?? <script language="javascript">
????? //JavaScript代碼
?? </script>

?? 要寫方法
?? function check(){
?? }
?? 方法可以不用定義返回值,但是可以有返回值

?? 獲取用戶輸入的值:
?? document.form1.username.value
?? document表示當前文檔,form1表示表單的名字,username表示該表單中表單元素的名字,value表示得到值

?? 把表單提交與方法關(guān)聯(lián):可以使用表單的onSubmit事件。
?? onSubmit="return check();"

?? 例:
<script language="javascript">
?? function check(){
????? username = document.form1.username.value;
????? if(username.length<6 || username.length>8){
???????? alert("用戶名長度不合適!");
???????? return false;
????? }else{
???????? return true;
????? }
?? }
</script>

?? 使用button的onClick事件進行驗證:
?? 首先要把提交按鈕修改成普通按鈕;
?? 在普通按鈕上增加事件:onClick="javascript:check()"?
?? 在驗證成功的時候,提交表單:document.form1.submit();

******http://blog.csdn.Net/javaeeteacher*******************************************************************
*************************************************第二講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************

第三講(參考《Java Web程序設計基礎(chǔ)教程》第3.4章)
1、include指令
??? 作用:把多個文件中需要共享的代碼放在單獨的文件中,然后在需要的時候使用該指令引入這個文件。典型的應用,把網(wǎng)站的頭部和版權(quán)信息放在單獨的文件中,在其他文件中包含這兩部分。
??? 基本的語法格式:
??????? <%@ include file="目標文件"%>
??? file屬性指出目標文件。
??? 例:把index.jsp和register.jsp中的共同部分做成單獨的文件header.jsp(后綴名不一定是.jsp),然后在index.jsp和register.jsp中調(diào)用。
??? header.jsp中的內(nèi)容如下:

<%@ page contentType="text/html;charset=gb2312"%>
<table? align="center" width=780>
?? <tr height="100">
????? <td align="center"><h1>電子書店</h1></td>
?? </tr>
?? <tr>
????? <td align="center">
???????? <!-- 超鏈接的基本格式? -->
???????? <a href="register.jsp">注冊</a>?
???????? 最新圖書 最暢銷圖書 查詢圖書 修改密碼 查詢訂單 購物車</td>
?? </tr>
?? <tr>
????? <td><hr></td>
?? </tr>

在index.jsp中引入header.jsp的代碼:
<%@ page contentType="text/html;charset=gb2312"%>

<%@ include file="header.jsp"%>

?? <tr>
????? <td>
???????? <table>
???????????? <tr>
???????????????? <td>
???????????????????? <!--登錄界面代碼-->
???????????????????? <form action="login_process.jsp" method="post">
??????????????????????? <!-- 主要是涉及提交信息,就要用到form,action決定了提交給哪個文件處理 -->
??????????????????????? 用戶名:<input type="text" name="username" value="aaa"> <br>
??????????????????????? 口令:<input type="password" name="userpass" value=""> <br>?
??????????????????????? <input type="submit" value="登錄"><input type="reset" value="重寫">
???????????????????? </form>
???????????????? </td>
???????????????? <td>
????????????????????? 歡迎光臨我們的書店!
???????????????? </td>
???????????? </tr>
???????? </table>
????? </td>
?? </tr>
</table>
?
運行過程:在轉(zhuǎn)換的時候,當遇到include指令的時候會把include指令指向的目標文件的內(nèi)容拷貝到當前位置,替換include指令,這樣最后形成一個文件。然后才編譯形成class文件,然后運行。

2、<jsp:forward>標簽

?? 我們使用登錄功能的模擬來介紹。
?? 首先,使用Java代碼完成判斷,使用<jsp:forward>完成跳轉(zhuǎn),代碼:
<%@ page contentType="text/html;charset=gb2312"%>

<%
?? // 先獲取用戶輸入的用戶名和口令,然后判斷是否合法
?? String username = request.getParameter("username");

?? String userpass = request.getParameter("userpass");

?? if(username.equals("zhangsan") && userpass.equals("zhangsan"))
?? {
%>

?????? <jsp:forward page="success.jsp"/>
<%
?? }else{
%>
?????? <jsp:forward page="index.jsp"/>
<%
?? }
%>

?? 注意:不管跳轉(zhuǎn)到success.jsp還是index.jsp,地址欄都是處理文件的名字。
?? <jsp:forward>的語法格式:
?????? <jsp:forward page="目標文件"/>
?? page屬性指出轉(zhuǎn)向的目標文件。最后的結(jié)束符為“/>”,斜杠不能省略。

?? 另外一個可以完成跳轉(zhuǎn)的方式是采用response.sendRedirect()。response和request一樣,都是內(nèi)容對象,可以直接訪問。修改上面的文件:
<%@ page contentType="text/html;charset=gb2312"%>

<%
?? // 先獲取用戶輸入的用戶名和口令,然后判斷是否合法
?? String username = request.getParameter("username");

?? String userpass = request.getParameter("userpass");

?? if(username.equals("zhangsan") && userpass.equals("zhangsan"))
?? {
?????? response.sendRedirect("success.jsp");
?? }else{
?????? response.sendRedirect("index.jsp");
?? }
%>

?? <jsp:forward>和response.sendRedirect的運行效果相同(針對上面的這個例子)。
?? 相同點:都是轉(zhuǎn)向目標文件。
?? 不同點:地址欄中顯示的內(nèi)容是不相同的,如果使用<jsp:forward>,地址欄顯示當前文件的名字,如果使用response,地址欄顯示的是轉(zhuǎn)向后的文件的名字。執(zhí)行過程不同:使用<jsp:forward>相當于一次請求,使用response相當于兩次請求。
?? 使用<jsp:forward>的情況:
?? index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務器保存用戶的輸入信息,使用<jsp:forward>轉(zhuǎn)向success.jsp之后,success.jsp還可以訪問用戶輸入的信息,因為輸入同一次請求。
?? 使用response的請求:
?? index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務器保存用戶的輸入信息,使用response的sendRedirect方法相當于重新向服務器發(fā)送一次請求,這樣上次的請求內(nèi)容(用戶名和口令)就不能共享了。
???
3、<jsp:include>標簽
?? 把index.jsp中<%@ include="header.jsp"%>替換成<jsp:include page="header.jsp"/>
?? 從運行效果上相同。
?? 不同點:1、兩個文件,目標文件是單獨運行的,當前文件運行到<jsp:include>標簽的時候,轉(zhuǎn)向執(zhí)行標簽所指向的目標文件,執(zhí)行之后返回繼續(xù)標簽之后的內(nèi)容。
?? 2、<%@ include%>指令是在編譯(轉(zhuǎn)換)的時候使用,<jsp:include>在運行的時候起作用。

?? 程序中如何選用:要導入的內(nèi)容是不是每次都執(zhí)行,如果每次都執(zhí)行的話,應該使用<%@ include%>,如果是在特定的條件下,應該使用<jsp:include>。例如,登錄之后要么轉(zhuǎn)向success.jsp要么轉(zhuǎn)向index.jsp,如果在程序中使用導入,應該用<jsp:include>。

4、<jsp:include>和<jsp:forward>區(qū)別

?? 把login_process.jsp中的<jsp:forward>替換成<jsp:include>:
<%@ page contentType="text/html;charset=gb2312"%>

<%
?? // 先獲取用戶輸入的用戶名和口令,然后判斷是否合法
?? String username = request.getParameter("username");

?? String userpass = request.getParameter("userpass");

?? if(username.equals("zhangsan") && userpass.equals("zhangsan"))
?? {
%>

?????? <jsp:include page="success.jsp"/>
<%
?? }else{
%>
?????? <jsp:include page="index.jsp"/>
<%
?? }
%>
??? 運行效果是相同的。但是有不同點,修改代碼如下:
<%@ page contentType="text/html;charset=gb2312"%>
處理文件的前半部分<br>
<%
?? // 先獲取用戶輸入的用戶名和口令,然后判斷是否合法
?? String username = request.getParameter("username");

?? String userpass = request.getParameter("userpass");

?? if(username.equals("zhangsan") && userpass.equals("zhangsan"))
?? {
%>

?????? <jsp:include page="success.jsp"/>
<%
?? }else{
%>
?????? <jsp:include page="index.jsp"/>
<%
?? }
%>
<br>處理文件的后半部分

兩次運行結(jié)果不相同。
分析原因:
?? <jsp:forward>:先執(zhí)行標簽之前的內(nèi)容,遇到標簽的時候轉(zhuǎn)向執(zhí)行目標文件,執(zhí)行完不返回,顯示的內(nèi)容為目標文件的內(nèi)容,標簽之前的內(nèi)容執(zhí)行,但是不顯示。標簽之后的內(nèi)容不會執(zhí)行,當然更不會顯示。
?? <jsp:include>:先執(zhí)行標簽之前的內(nèi)容,遇到標簽轉(zhuǎn)向執(zhí)行目標文件,執(zhí)行完返回,繼續(xù)執(zhí)行標簽之后的內(nèi)容,顯示的內(nèi)容為:標簽之前的內(nèi)容+目標文件的內(nèi)容+標簽之后的內(nèi)容,標簽的前后都執(zhí)行,都顯示。

5、使用標準標簽庫(JSTL)完成登錄的判斷過程
?? 如何使用標簽標簽庫:(1)得到標簽庫的實現(xiàn)文件,jstl.jar和standard.jar,放在WEB-INF下面的lib子文件夾。(2)在JSP文件中要聲明標簽庫,通過tablib指令進行聲明:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> (3)使用標簽:<c:if test="">? </c:if>
?? 要完成判斷,可以使用標簽標簽庫中的c:if標簽。標簽的基本格式:
?? <c:if? test="">條件成功要執(zhí)行的內(nèi)容</c:if>
?? test表示測試條件,測試條件可以寫常量,可以是表達式語言(EL,主要用于輸出),主要使用表達式語言。
?? 例如:要判斷用戶提交的用戶名和口令是否是zhangsan。
?? <c:if test="${param.username==/"zhangsan/" && param.userpass==/"zhangsan/"}">?
?????? <jsp:forward page="success.jsp"/>?
?? </c:if>

?? 注意:添加完標準標簽庫之后,需要重新啟動服務器。

6、使用session保存登錄后的信息
?? 在網(wǎng)站中設置了application session request pageContext對象保存內(nèi)存中的信息。application是網(wǎng)站所有用戶共享的存儲變量的位置。session是網(wǎng)站為每個訪問網(wǎng)站的人創(chuàng)建的,每個用戶對應一個session,也是存放變量的位置。request是為每個用戶的每次請求設置的存儲信息的位置,每次訪問會有一個request。pageContext是每次訪問的每個頁面對應一個。常用的session和request。多次訪問之間要共享信息可以使用session,如果在某次訪問的多個頁面之間共享信息使用request(例如,使用jsp:forwrad轉(zhuǎn)向的文件和當前文件就屬于同一次請求)。

?? 登錄后的用戶信息應該放在session中。

?? 要在這些范圍中保存信息,可以使用標準標簽庫中的<c:set>標簽完成。
?? <c:set>的基本語法格式:
?? <c:set var="變量的名字" scope="范圍" value="值"/>
???
?? 要把用戶名放到session中:
?? <c:set var="username" scope="session" value="${param.username}"/>

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第三講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************

第四講(參考《Java Web程序設計基礎(chǔ)教程》第6章)
1、對Servlet的理解

??? Servlet是一種Java類。
??? Servlet能夠完成與JSP相同的功能。能夠接收用戶的請求,能夠調(diào)用功能類的方法,可以對用戶進行響應。
??? Servlet和JSP同屬于Java EE中Web層組件。

2、如何編寫一個Servlet

??? 假設:該Servlet的功能為顯示歡迎信息。

??? Java文件的編寫過程:(1)聲明包 (2)引入用到的其他的類 (3)類的編寫
??? 對于類:(1)類頭——修飾符 class關(guān)鍵字 類名 繼承父類 實現(xiàn)接口
??????????? (2)類體——成員變量 構(gòu)造方法 對屬性進行操作的方法 功能類方法
??? 對于成員變量:修飾符 類型 變量名(對象名)?
??? 對于方法(不包括構(gòu)造方法):修飾符 返回值類型 方法名 參數(shù)列表 異常列表 方法體
??? 對于方法體:變量的聲明 各種運算 調(diào)用其他的方法 返回結(jié)果

??? (1)聲明包,假設包名為servlet

package servlet;

??? (2)引入用到的類,javax.servlet.* javax.servlet.http.* java.io.*
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

??? (3)類頭的定義
??? 訪問控制符:public
??? 類名:HelloServlet
??? 繼承父類:javax.servlet.http.HttpServlet?
??? 實現(xiàn)接口:沒有要實現(xiàn)的接口

public class HelloServlet extends HttpServlet

??? (4)方法的定義
??? 主要的方法:init方法(用于初始化) destroy方法(釋放資源) doGet或者doPost(完成主要功能)
??? 通常主要實現(xiàn)doGet方法或者doPost方法,分別對應客戶端的get請求和post請求。


public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
??? // 設置編碼方式
??? response.setContentType("text/html;charset=gb2312");
??? // 得到輸出流對象
??? PrintWriter out = response.getWriter();
??? out.println("歡迎學習JSP!");
}

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
?? doGet(request,response);
}

3、編譯存放

?? 需要用到javax.servlet.*和javax.servlet.http.*,兩個包的實現(xiàn)在tomcat下面的lib中,名字為servlet-api.jar。
?? 放在(編譯后的Servlet):WEB-INF/classes
?? 配置path: 把C:/Program Files/Java/jdk1.6.0/bin添加到path中,但是不能破壞原有的路徑。
?? 配置classpath:把C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib/servlet-api.jar;添加到classpath中。
?? 編譯:在命令行方式下進入到classes目錄,然后使用 javac -d . HelloServlet.java?? -d表示生成包的路徑,.表示在當前位置生成。

4、配置Servlet
?? 配置文件及位置:WEB-INF下面的web.xml。
?? 配置包括兩個方面:Servlet的聲明 以及 Servlet訪問方式的聲明
?? Servlet的聲明:
?? <servlet>
????? <servlet-name>hello</servlet-name>
????? <servlet-class>servlet.HelloServlet</servlet-class>
?? </servlet>
???
?? 其中,<servlet-name>表示這個servlet的名字,可以隨便起。<servlet-class>是對應的Servlet類,應該包含包的信息。

?? Servlet訪問方式的聲明:
?? <servlet-mapping>
????? <servlet-name>hello</servlet-name>
????? <url-pattern>/hello</url-pattern>
?? </servlet-mapping>
?? 其中,<servlet-name>和Servlet聲明中的用法相同,并且應該與Servlet聲明中的名字保持一致。<url-pattern>表示訪問方式,決定了在客戶端如何訪問這個Servlet。

5、訪問Servlet
???http://127.0.0.1:8080/bookstore/hello

6、用Servlet完成login_process.jsp的功能
??? login_process.jsp主要功能,判斷用戶輸入的用戶名和口令是否合法,然后根據(jù)判斷的結(jié)果選擇界面對用戶響應。
??? 對于JSP文件來說,優(yōu)勢在于顯示信息,login_process.jsp中的代碼都不是顯示信息的,主要用于控制。在Java Web應用中存在大量的這種現(xiàn)象。是Java Web中的控制功能。主要使用Servlet完成控制。
??? login_process.jsp的基本功能:獲取用戶的輸入信息;進行判斷;轉(zhuǎn)向。
??? 如果使用Servlet完成,功能代碼應該寫在doGet或者doPost方法中。對應上面的3個功能分別實現(xiàn)如下:
??? 獲取用戶信息:用戶信息存儲在doGet或者doPost方法的第一個參數(shù)中,所以從參數(shù)中獲取,獲取的代碼為
??????? String username = request.getParameter("username");
??????? String userpass = request.getParameter("userpass");
??? 判斷:
??????? if( username.equals("zhangsan") && userpass.equals("zhangsan") )
??? 轉(zhuǎn)向響應界面:
??????? 第一種方式:response.sendRedirect("index.jsp");
??????? 第二種方式:與<jsp:forward>功能相同
??????? RequestDispatcher rd = request.getRequestDispatcher("index.jsp");? // 參數(shù)是要轉(zhuǎn)向的頁面
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

LoginProcessServlet.java代碼如下:

package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginProcessServlet extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? // 獲取用戶輸入的信息
??????? String username = request.getParameter("username");
??????? String userpass = request.getParameter("userpass");

??????? if( username.equals("zhangsan") && userpass.equals("zhangsan") )
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");? // 跳轉(zhuǎn)到成功的頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }else
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("index1.jsp");? // 跳轉(zhuǎn)到登錄頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }
? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}

配置文件中添加如下代碼:
?? <servlet>
????? <servlet-name>login_process</servlet-name>
????? <servlet-class>servlet.LoginProcessServlet</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>login_process</servlet-name>
????? <url-pattern>/login_process</url-pattern>
?? </servlet-mapping>

修改index1.jsp的代碼(修改form所在行),修改前:
<form action="login_process.jsp" method="post">
修改后:
<form action="login_process" method="post">

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第四講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************


第五講(參考《Java Web程序設計基礎(chǔ)教程》第5、7章)

1、JavaBean
?
??? JavaBean是使用Java語言編寫的組件。組件是組成一個大的系統(tǒng)的一部分,并且組件能夠完成特定的功能,能夠共享。
??? 可以認為JavaBean是Java類,但是具有特定的功能,并且這些功能是共享的。例如,連接數(shù)據(jù)庫的功能可以封裝單獨的Java類,常用處理方法可以封裝成JavaBean。

2、早期的JSP中提供的對JavaBean的支持

?? <jsp:useBean>標簽用于定義JavaBean的對象;<jsp:setProperty>標簽用于設置JavaBean的屬性;<jsp:getProperty>用于獲取并輸出JavaBean的屬性。
?? 因為Java Web中,很少在JSP中直接訪問JavaBean,所以實際上這些標簽幾乎沒有用。現(xiàn)在主要在Servlet中訪問JavaBean。

3、JavaBean的編寫和用法

?? 例:以用戶信息驗證為例介紹JavaBean的編寫。
??
?? 1)聲明包
package bean;

?? 2)引入相應的類或者包
import java.sql.*;
// java.sql是訪問數(shù)據(jù)庫所需要的包

?? 3)類頭的定義
public class UserBean

?? 4)成員變量
private String username;
private String userpass;

?? 5)構(gòu)造方法
// JavaBean要求應該提供一個無參數(shù)的構(gòu)造方法
?? public UserBean(){
?? }

?? public UserBean(String username,String userpass){
????? this.username = username;
????? this.userpass = userpass;
?? }

?? 6)對屬性進行操作的方法
?? 包括獲取屬性值的方法和對屬性進行賦值的方法。
?? 命名方法:
?? 對于普通屬性來說,如果屬性為a,應該提供setA(屬性類型 a)方法和getA()方法。
?? 對于布爾類型的屬性來說,應該提供類似于isA()方法。
?? public void setUsername(String username){
????? this.username = username;
?? }

?? public String getUsername(){
????? return username;
?? }

?? public void setUserpass(String userpass){
????? this.userpass = userpass;
?? }

?? public String getUserpass(){
????? return userpass;
?? }

?? 7)功能類方法
?? 該JavaBean完成的功能是判斷用戶信息是否合法,需要在JavaBean中編寫相應的方法。???
?? public boolean login(){
????? return username.equals(userpass);
?? }

?? 8)編譯JavaBean
?? 9)部署
?? 所有的Java類都應該放在WEB-INF下面的classes下面,所以該JavaBean也應該放在這個地方。

4、使用JDBC的準備工作

?? JDBC是Java DataBase Connectivity的縮寫,是一組標準的接口,用于完成Java應用與各種數(shù)據(jù)庫之間的交互。
?? 要使用JDBC需要做哪些準備工作?
?? 1)創(chuàng)建數(shù)據(jù)庫?
?? 2)得到JDBC驅(qū)動程序,驅(qū)動程序是完成具體的交互過程的,每種數(shù)據(jù)庫有自己特定的驅(qū)動程序,從數(shù)據(jù)庫管理系統(tǒng)的提供商的網(wǎng)站下載?
?? 3)要知道數(shù)據(jù)庫的相關(guān)信息:JDBC驅(qū)動程序的名字、數(shù)據(jù)庫的位置、數(shù)據(jù)庫的端口、用戶名和口令、url的格式(建立連接的時候用)
?? 注意:我們使用JDBC-ODBC橋的方式連接數(shù)據(jù)庫。JDBC-ODBC橋是一種類型的驅(qū)動程序,共有4種類型的驅(qū)動程序,JDBC-ODBC橋是建立在ODBC數(shù)據(jù)源基礎(chǔ)上的。驅(qū)動是JDK中附帶的,不用下載。

5、創(chuàng)建數(shù)據(jù)庫及測試數(shù)據(jù)
create table usertable
(
?? username varchar(10) primary key,
?? userpass varchar(10)
)
insert into usertable values('lisi','lisi');
insert into usertable values('zhangsan','zhangsan');

6、創(chuàng)建ODBC數(shù)據(jù)源
?? 在 開始--〉設置--〉控制面板-->管理工具--〉數(shù)據(jù)源(ODBC)? 設置ODBC數(shù)據(jù)源的名字為bookstore
7、修改login方法,通過數(shù)據(jù)庫進行驗證
?? 1)使用JDBC連接數(shù)據(jù)庫的基本過程
?? 加載驅(qū)動程序;
?? 建立與數(shù)據(jù)庫之間的連接;
?? 創(chuàng)建一個執(zhí)行SQL語句的語句對象;
?? 編寫要執(zhí)行的SQL語句;
?? 使用語句對象執(zhí)行SQL語句;
?? 如果有結(jié)果,需要對結(jié)果進行處理;
?? 關(guān)閉相關(guān)對象;
?? 注意:異常處理。

?? 2)修改login方法
?? public boolean login() throws Exception{
????? // return username.equals(userpass);
????? // 第一步:加載驅(qū)動程序,如果使用其它的驅(qū)動程序,寫出相應的名字即可
????? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

????? // 第二步:建立連接,第一個參數(shù)是url(定位數(shù)據(jù)庫),第二個參數(shù)是用戶名,第三個參數(shù)是口令
????? Connection con = DriverManager.getConnection("jdbc:odbc:bookstore","","");? // bookstore是所創(chuàng)建的ODBC數(shù)據(jù)源的名字

????? // 第三步:創(chuàng)建SQL語句
????? String sql = "select * from usertable where username=? and userpass=?";

????? // 第四步:創(chuàng)建語句對象,用于執(zhí)行SQL語句的
????? PreparedStatement stmt = con.prepareStatement(sql);

????? // 對變量賦值,第一個參數(shù)表示變量的序號(第幾個問號),第二個參數(shù)表示所賦的值
????? stmt.setString(1,username);
????? stmt.setString(2,userpass);

????? // 第五步:執(zhí)行SQL語句,因為有查詢結(jié)果,所以使用executeQuery方法,結(jié)果保存在rs中
????? ResultSet rs = stmt.executeQuery();

????? //? rs相當于一個表格,有若干行、若干列組成,指針指向第一條記錄的前面
????? // 第六步:對結(jié)果進行處理,使用next方法進行遍歷,使用get方法得到當前行的列
????? boolean b = rs.next();

????? // 第七步:關(guān)閉相關(guān)對象
????? rs.close();?
????? stmt.close();
????? con.close();

????? return b;??????
?? }

?? 3)修改LoginProcessServlet.java

修改后的代碼為:

package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;

public class LoginProcessServlet extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? // 獲取用戶輸入的信息
??????? String username = request.getParameter("username");
??????? String userpass = request.getParameter("userpass");

??????? // 調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? UserBean user = new UserBean();
??????? user.setUsername(username);
??????? user.setUserpass(userpass);
??????? boolean b = false;
??????? try{
??????????? b = user.login();
??????? }catch(Exception e){
??????????? // 當產(chǎn)生異常的時候,把異常信息輸出在界面上
??????????????? // 設置編碼方式
??????????????? response.setContentType("text/html;charset=gb2312");
??????????????? // 得到輸出流對象
??????????????? PrintWriter out = response.getWriter();
??????????????? out.println(e.toString());
??????????????? return;
??????? }

??????? // 轉(zhuǎn)向響應界面
??????? if(b){
?????????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");? // 跳轉(zhuǎn)到成功的頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }else{
?????????? RequestDispatcher rd = request.getRequestDispatcher("index1.jsp");? // 跳轉(zhuǎn)到登錄頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }
/*
??????? if( username.equals("zhangsan") && userpass.equals("zhangsan") )
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");? // 跳轉(zhuǎn)到成功的頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }else
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("index1.jsp");? // 跳轉(zhuǎn)到登錄頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }
*/
? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}


找到:
??????? boolean b = user.login();
修改為:??????
??????? boolean b = false;
??????? try{
??????????? b = user.login();
??????? }catch(Exception e){
??????????? // 當產(chǎn)生異常的時候,把異常信息輸出在界面上
??????????????? // 設置編碼方式
??????????????? response.setContentType("text/html;charset=gb2312");
??????????????? // 得到輸出流對象
??????????????? PrintWriter out = response.getWriter();
??????????????? out.println(e.toString());
??????????????? return;
??????? }


******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第五講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************


第六講(參考《Java Web程序設計基礎(chǔ)教程》第6、9章)
1、分析登錄功能

?? 界面:登錄界面index1.jsp;登錄成功的界面login_success.jsp。
?? 功能:UserBean的login方法完成登錄的判斷。
?? Servlet:LoginServlet.java
????? (1)接收用戶輸入的用戶名和口令(2)調(diào)用UserBean的login方法進行判斷(3)根據(jù)方法的返回值選擇界面響應。

2、MVC模式

??? M表示模型,主要表示系統(tǒng)中的功能處理部分。例如,上面的UserBean就是一個模型,描述用戶信息以及相關(guān)功能。
??? V表示視圖,表示系統(tǒng)中與人進行交互的部分。例如,上面的index1.jsp和login_success.jsp。
??? C表示控制器,建立模型與視圖之間的關(guān)聯(lián)關(guān)系。例如,上面的LoginServlet.java。
?????? 輸入界面直接調(diào)用控制器,控制器接收用戶在輸入界面上輸入的信息,控制器把信息傳遞給模型,調(diào)用模型的方法,方法會給控制器返回一個值,控制器根據(jù)這個值選擇輸出界面對用戶響應。
??? MVC模式把系統(tǒng)的每一個功能都分解成這個3個部分。然后分別實現(xiàn)。

3、采用MVC模式實現(xiàn)注冊功能

??? 一般先考慮V,包括輸入界面和輸出界面,對于注冊功能來說,輸入是注冊界面,輸出是注冊成功或者失敗的界面,通常使用JSP文件。
??? 接下來考慮M,功能如何實現(xiàn),對于注冊功能來說,需要把用戶提交的信息寫到數(shù)據(jù)庫中。需要在UserBean中編寫添加用戶的方法。
??? 考慮C,如何協(xié)調(diào)M和V。需要編寫Servlet,在doGet或者doPost方法中主要完成:接收輸入;調(diào)用UserBean的方法;選擇界面響應。

4、創(chuàng)建注冊用的表

create table usertable2
(
?? username varchar(10) primary key,
?? userpass varchar(10),
?? sex char(2),
?? fav varchar(20),
?? degree varchar(8),
?? comment varchar(100),
?? email varchar(30)
)

5、V部分

?? 采用原來的register.jsp和success.jsp。

6、M部分
???
?? 在UserBean中添加方法,add方法。方法代碼如下:
?? public boolean add(){
????? // 定義變量
????? Connection con = null;
????? PreparedStatement stmt = null;
????? String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
????? String url = "jdbc:odbc:bookstore";
????? String sql = "insert into usertable2 values(?,?,?,?,?,?,?)";
????? boolean success = true;

????? try{
???????? // 第一步:加載驅(qū)動
???????? Class.forName(driverClass);
???????? // 第二步:建立連接
???????? con = DriverManager.getConnection(url,"","");
???????? // 第三步:創(chuàng)建語句對象
???????? stmt = con.prepareStatement(sql);
???????? // 第四步:對SQL語句中參數(shù)賦值
???????? stmt.setString(1,username);
???????? stmt.setString(2,userpass);
???????? stmt.setString(3,sex);
???????? stmt.setString(4,fav);
???????? stmt.setString(5,degree);
???????? stmt.setString(6,comment);
???????? stmt.setString(7,email);
???????? // 第五步:執(zhí)行SQL語句
???????? int n = stmt.executeUpdate();
???????? // 執(zhí)行沒有結(jié)果集返回的SQL語句使用executeUpdate方法,方法的返回值是整數(shù),表示操作成功的記錄數(shù)
???????? if(n==0)
??????????? success = false;
????? }catch(Exception e){
???????? success = false;
???????? System.out.println(e.getMessage());
????? }finally{
???????? try{ stmt.close(); }catch(Exception ee){}
???????? try{ con.close(); }catch(Exception ee){}
????? }
????? return success;
?? }

7、C部分
??? 編寫Servlet,完成添加的控制。控制器的代碼如下:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;

public class AddUserServlet extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? // 請求中采用的編碼方式是8859_1,當前的編碼是gb2312,需要轉(zhuǎn)換
??????? request.setCharacterEncoding("gb2312");

??????? // 第一句話:獲取用戶輸入的信息
??????? String username = request.getParameter("username");

??????? String userpass1 = request.getParameter("userpass1");

??????? String sex = request.getParameter("sex");

??????? // 因為允許多選,所以結(jié)果有可能是多個,應該使用數(shù)組接收。
??????? String fav[] = request.getParameterValues("fav");
??????? String favStr = "";
??????? for(int i=0;i<fav.length;i++)
??????? {
?????????? favStr += fav[i]+";";
??????? }

??????? String degree = request.getParameter("degree");

??????? String comment = request.getParameter("content");

??????? String email = request.getParameter("email");

??????? // 第二句話:調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? UserBean user = new UserBean();
??????? user.setUsername(username);
??????? user.setUserpass(userpass1);
??????? user.setSex(sex);
??????? user.setFav(favStr);
??????? user.setDegree(degree);
??????? user.setEmail(email);
??????? user.setComment(comment);

??????? boolean b = user.add();

??????? // 第三句話:向頁面?zhèn)鬟f信息
??????? if(b)
??????????? request.setAttribute("info","注冊成功!");
??????? else
??????????? request.setAttribute("info","注冊失敗!");

??????? // 第四句話:轉(zhuǎn)向響應界面
??????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");?
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

/*
??????? if( username.equals("zhangsan") && userpass.equals("zhangsan") )
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");? // 跳轉(zhuǎn)到成功的頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }else
??????? {
?????????? RequestDispatcher rd = request.getRequestDispatcher("index1.jsp");? // 跳轉(zhuǎn)到登錄頁面
?????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
??????? }
*/
? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}
??? 之后對Servlet進行配置,在web.xml中添加如下代碼:
?? <servlet>
????? <servlet-name>addUser</servlet-name>
????? <servlet-class>servlet.AddUserServlet</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>addUser</servlet-name>
????? <url-pattern>/addUser</url-pattern>
?? </servlet-mapping>

?? 需要修改register.jsp中的form的屬性action:
?????????? <form action="addUser" method="post" name="form1">
8、測試
??? 編譯、啟動服務器,然后運行。

本人的blog:??http://blog.csdn.net/javaeeteacher

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第六講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************


第七講(參考《Java Web程序設計基礎(chǔ)教程》第7章)
1、共享連接數(shù)據(jù)庫的代碼

??? 連接數(shù)據(jù)庫的基本過程:
??? 1)加載驅(qū)動程序;
??? 2)創(chuàng)建連接;
??? 3)編寫SQL語句;
??? 4)創(chuàng)建語句對象;
??? 5)對參數(shù)賦值;
??? 6)執(zhí)行SQL 語句;
??? 7)對結(jié)果進行處理;
??? 8)關(guān)閉對象。

??? 對于不同的SQL的執(zhí)行,不同的地方:
??? SQL語句;
??? 參數(shù);
??? 結(jié)果的處理方式;

??? 提取相同部分分別編寫成方法:

?? Connection con = null;
?? PreparedStatement stmt = null;
?? ResultSet rs = null;
?? String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
?? String url = "jdbc:odbc:bookstore";

?? // 完成連接的創(chuàng)建,相當于第1.2步
?? public Connection getConnection() throws Exception{
????? Class.forName(driverClass); // 加載驅(qū)動程序
????? if(con == null)
???????? con = DriverManager.getConnection(url,"","");
????? return con;
?? }

?? // 創(chuàng)建語句對象
?? public PreparedStatement createStatement(String sql) throws Exception{
????? stmt = getConnection().prepareStatement(sql);
????? return stmt;
?? }??

?? // 執(zhí)行有結(jié)果集返回的方法
?? public ResultSet executeQuery() throws Exception{
????? rs = stmt.executeQuery();
????? return rs;
?? }

?? // 執(zhí)行沒有結(jié)果集返回的方法
?? public int executeUpdate() throws Exception{
????? return stmt.executeUpdate();
?? }

?? // 關(guān)閉對象
?? public void close(){
????? if(rs != null)?
???????? try{ rs.close();? }catch(Exception e){}?
????? if(stmt != null)?
???????? try{ stmt.close();? }catch(Exception e){}?
????? if(con != null)?
???????? try{ con.close();? }catch(Exception e){}?
?? }

2、修改上一次課的添加功能,使用這些共享方法

????? String sql = "insert into usertable2 values(?,?,?,?,?,?,?)";
????? boolean success = true;????
????? try{
???????? // 創(chuàng)建語句對象
???????? createStatement(sql);
?????????
???????? // 對SQL語句中參數(shù)賦值
???????? stmt.setString(1,username);
???????? stmt.setString(2,userpass);
???????? stmt.setString(3,sex);
???????? stmt.setString(4,fav);
???????? stmt.setString(5,degree);
???????? stmt.setString(6,comment);
???????? stmt.setString(7,email);

???????? // 執(zhí)行SQL語句
???????? int n = executeUpdate();
???????? // 執(zhí)行沒有結(jié)果集返回的SQL語句使用executeUpdate方法,方法的返回值是整數(shù),表示操作成功的記錄數(shù)
???????? if(n==0)
??????????? success = false;
????? }catch(Exception e){
???????? success = false;
???????? System.out.println(e.getMessage());
????? }finally{
???????? close();
????? }??
????? return success;
3、查詢所有圖書

?? 1)創(chuàng)建圖書表
?? create table books(
????? bookid varchar(10) primary key,
????? bookname varchar(30),
????? author varchar(20),
????? price float,
????? publisher varchar(20)
?? )
?? 插入一些模擬數(shù)據(jù)

insert into books values('00001','Java','zhangsan',20,'電子工業(yè)')
insert into books values('00002','JSP','lisi',22,'人民郵電')
insert into books values('00003','Java EE','wang',30,'人民郵電')

?? 2)V部分
?? V主要與人進行交互,要考慮輸入和輸出
?? 輸入:在導航條中添加“查看所有圖書”的超鏈。

<a href="findAllBooks">顯示所有圖書</a>

?? 輸出:顯示所有圖書信息的JSP文件。
文件名:books.jsp
文件內(nèi)容:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ include file="header.jsp"%>

?? <tr>
????? <td>
????????? <table align="center" border="1">
???????????? <tr>
??????????????? <td>圖書編號</td><td>圖書名稱</td><td>作者</td><td>價格</td><td>出版社</td>
???????????? </tr>
???????????? <!--? c:forEach用于循環(huán)控制,items屬性指出要循環(huán)遍歷的集合,var定義一個循環(huán)變量,表示集合中的一個元素 -->
???????????? <c:forEach var="book" items="${books}">
??????????????? <tr>
??????????????????? <td>${book.bookid}</td>
??????????????????? <td>${book.bookname}</td>
??????????????????? <td>${book.author}</td>
??????????????????? <td>${book.price}</td>
??????????????????? <td>${book.publisher}</td>
??????????????? </tr>
???????????? </c:forEach>
????????? </table>
????? </td>
?? </tr>
</table>

?? 3)M部分
?? 完成功能:從數(shù)據(jù)庫中查詢所有的圖書。
文件名:BookBean.java
文件內(nèi)容:
package bean;

import java.sql.*;?
import java.util.ArrayList;

public class BookBean extends Base{

?? // 描述圖書的屬性
?? private String bookid;
?? private String bookname;
?? private String author;
?? private float price;
?? private String publisher;

?? // 編寫對乘員進行操作的方法
?? public void setBookid(String bookid){
????? this.bookid = bookid;
?? }

?? public String getBookid(){
????? return bookid;
?? }

?? public void setBookname(String bookname){
????? this.bookname = bookname;
?? }

?? public String getBookname(){
????? return bookname;
?? }

?? public void setAuthor(String author){
????? this.author = author;
?? }

?? public String getAuthor(){
????? return author;
?? }

?? public void setPrice(float price){
????? this.price = price;
?? }
???
?? public float getPrice(){
????? return price;
?? }

?? public void setPublisher(String publisher){
????? this.publisher = publisher;
?? }

?? public String getPublisher(){
????? return publisher;
?? }??

?? public ArrayList findAllBooks(){
????? ArrayList books = new ArrayList();
????? String sql = "select * from books";
????? try{
???????? createStatement(sql);
???????? rs = executeQuery();
???????? // 使用while循環(huán)遍歷結(jié)果集
???????? while(rs.next())
???????? {
??????????? // 使用rs的getString方法,以字符串的形式獲取第一列,參數(shù)也可以是列的名字
??????????? // 可以得到當前記錄的每一列
??????????? String tempBookid = rs.getString(1);
??????????? String tempBookname = rs.getString(2);
??????????? String tempAuthor = rs.getString(3);
??????????? float tempPrice = rs.getFloat(4);
??????????? String tempPublisher = rs.getString(5);

??????????? // 創(chuàng)建圖書對象
??????????? BookBean book = new BookBean();
??????????? book.setBookid(tempBookid);
??????????? book.setBookname(tempBookname);
??????????? book.setAuthor(tempAuthor);
??????????? book.setPrice(tempPrice);
??????????? book.setPublisher(tempPublisher);

??????????? // 把書添加到鏈表中
??????????? books.add(book);
???????? }
????? }catch(Exception e){
???????? System.out.println(e.toString());
????? }finally{
???????? close();
????? }
????? return books;
?? }
}
?? 4)C部分
?? 控制器:4句話。本功能只用到3句。
文件名:FindAllBooks。
文件內(nèi)容:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class FindAllBooks extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {

??????? // 第二句話:調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? BookBean book = new BookBean();
??????? ArrayList books = book.findAllBooks();

??????? // 第三句話:向頁面?zhèn)鬟f信息,第一個參數(shù)是使用的名字,應該和顯示時候使用的名字一致,第二個參數(shù)傳遞的值本身
??????? request.setAttribute("books",books);

??????? // 第四句話:轉(zhuǎn)向響應界面
??????? RequestDispatcher rd = request.getRequestDispatcher("books.jsp");?
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}
在web.xml中進行配置
?? <servlet>
????? <servlet-name>findAllBooks</servlet-name>
????? <servlet-class>servlet.FindAllBooks</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>findAllBooks</servlet-name>
????? <url-pattern>/findAllBooks</url-pattern>
?? </servlet-mapping>

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第七講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************


第八講(參考《Java Web程序設計基礎(chǔ)教程》第10章)
1、刪除功能設計

?? 1)V部分
?? 輸入:可以在圖書列表界面中添加一列,使用超鏈鏈接到刪除功能,需要把將要刪除的圖書的編號傳遞過去。
?? 輸出:刪除成功或者失敗的提示界面。

?? 2)M部分
?? 刪除功能需要在BookBean添加一個刪除的方法,方法需要參數(shù)來指定刪除哪一本書。

?? 3)C部分
?? 4句話:從輸入界面獲取要刪除的圖書的編號;根據(jù)編號調(diào)用JavaBean的刪除圖書的方法;把刪除成功或者失敗的消息傳遞到界面(通過request);轉(zhuǎn)向響應界面。

2、輸入界面

?? 在books.jsp中的表格后面增加一列。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ include file="header.jsp"%>

?? <tr>
????? <td>
????????? <table align="center" border="1">
???????????? <tr>
??????????????? <td>圖書編號</td><td>圖書名稱</td><td>作者</td><td>價格</td><td>出版社</td><td></td>
???????????? </tr>
???????????? <!--? c:forEach用于循環(huán)控制,items屬性指出要循環(huán)遍歷的集合,var定義一個循環(huán)變量,表示集合中的一個元素 -->
???????????? <c:forEach var="book" items="${books}">
??????????????? <tr>
??????????????????? <td>${book.bookid}</td>
??????????????????? <td>${book.bookname}</td>
??????????????????? <td>${book.author}</td>
??????????????????? <td>${book.price}</td>
??????????????????? <td>${book.publisher}</td>
??????????????????? <td> <a href="deleteBook?bookid=${book.bookid}">刪除</a> </td>
??????????????? </tr>
???????????? </c:forEach>
????????? </table>
????? </td>
?? </tr>
</table>

3、輸出界面
??? 把success.jsp作為輸出界面。

4、M部分
??? 在BookBean中添加deleteBook方法,代碼如下:
?? // 根據(jù)編號刪除圖書
?? public boolean deleteBook(String bookid){
????? // 表示刪除成功還是失敗
????? boolean success=true;
????? // 編寫SQL語句
????? String sql = "delete from books where bookid=?";
????? try{
???????? // 創(chuàng)建語句對象
???????? createStatement(sql);
???????? // 對SQL中的參數(shù)賦值
???????? stmt.setString(1,bookid);
???????? if( stmt.executeUpdate()>0 )
??????????? success = true;
???????? else
??????????? success = false;
????? }catch(Exception e){
???????? success = false;
???????? System.out.println(e.toString());?????????
????? }finally{
???????? close();
????? }
????? return success;
?? }

5、C部分
?? 記住4句話即可。參考代碼如下:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class DeleteBook extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? // 第一句話:獲取要刪除的圖書?
??????? String bookid = request.getParameter("bookid");

??????? // 第二句話:調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? BookBean book = new BookBean();
??????? boolean success = book.deleteBook(bookid);

??????? // 第三句話:向頁面?zhèn)鬟f信息,第一個參數(shù)是使用的名字,應該和顯示時候使用的名字一致,第二個參數(shù)傳遞的值本身
??????? String info;
??????? if(success)
?????????? info="刪除成功!";
??????? else
?????????? info="刪除失敗";
??????? request.setAttribute("info",info);

??????? // 第四句話:轉(zhuǎn)向響應界面
??????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");?
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}

在web.xml中添加配置,相關(guān)代碼如下:
?? <servlet>
????? <servlet-name>deleteBook</servlet-name>
????? <servlet-class>servlet.DeleteBook</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>deleteBook</servlet-name>
????? <url-pattern>/deleteBook</url-pattern>
?? </servlet-mapping>

6、圖書信息修改功能設計

?? 用戶操作過程:首先先顯示要修改的圖書信息,然后修改后提交更新數(shù)據(jù)庫。
?? 首先考慮顯示信息的過程:根據(jù)用戶的選擇顯示相應圖書的信息。
?? 采用MVC模式設計如下:
?? V部分:輸入可以采用與刪除功能類似的方式,在圖書列表之后增加一修改列。輸出是修改界面。
?? M部分:根據(jù)圖書編號查詢圖書信息。需要在BookBean中添加一個根據(jù)編號查詢圖書的方法。
?? C部分:4句話,獲取圖書編號;把編號作為參數(shù)調(diào)用JavaBean中查詢圖書的方法;把查詢到的圖書對象保存到request;轉(zhuǎn)向修改界面。

7、輸入界面
?? 修改books.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ include file="header.jsp"%>

?? <tr>
????? <td>
????????? <table align="center" border="1">
???????????? <tr>
??????????????? <td>圖書編號</td><td>圖書名稱</td><td>作者</td><td>價格</td><td>出版社</td><td></td><td></td>
???????????? </tr>
???????????? <!--? c:forEach用于循環(huán)控制,items屬性指出要循環(huán)遍歷的集合,var定義一個循環(huán)變量,表示集合中的一個元素 -->
???????????? <c:forEach var="book" items="${books}">
??????????????? <tr>
??????????????????? <td>${book.bookid}</td>
??????????????????? <td>${book.bookname}</td>
??????????????????? <td>${book.author}</td>
??????????????????? <td>${book.price}</td>
??????????????????? <td>${book.publisher}</td>
??????????????????? <td> <a href="deleteBook?bookid=${book.bookid}">刪除</a> </td>
??????????????????? <td> <a href="findBookByID?bookid=${book.bookid}">修改</a> </td>
??????????????? </tr>
???????????? </c:forEach>
????????? </table>
????? </td>
?? </tr>
</table>

8、輸出界面
? 修改界面:顯示從控制器傳遞過來的BookBean對象book。
<%@ page contentType="text/html;charset=gb2312"%>

<%@ include file="header.jsp"%>

?? <tr>
????? <td>
?????????? <form action="updateBook" method="post" name="form1">
?????????????? <table align="center">
????????????????? <tr>?
????????????????????? <td>圖書編號:</td>
????????????????????? <td><input type="hidden" name="bookid" value="${book.bookid}">${book.bookid}</td>
????????????????? </tr>
????????????????? <tr>
????????????????????? <td>圖書名:</td>
????????????????????? <td><input type="text" name="bookname" value="${book.bookname}"></td>
????????????????? </tr>
????????????????? <tr>
????????????????????? <td>作者:</td>
????????????????????? <td><input type="text" name="author"? value="${book.author}"></td>
????????????????? </tr>
????????????????? <tr>
????????????????????? <td>價格:</td>
????????????????????? <td><input type="text" name="price"? value="${book.price}"></td>
????????????????? </tr>
????????????????? <tr>
????????????????????? <td>出版社:</td>
????????????????????? <td><input type="text" name="publisher"? value="${book.publisher}"></td>
????????????????? </tr>
????????????????? <tr>
????????????????????? <td><input type="submit" value="提交"></td>
????????????????????? <td><input type="reset" value="重寫"></td>
????????????????? </tr>
?????????????? </table>
?????????? </form>
????? </td>
?? </tr>
</table>
9、編寫根據(jù)ID查詢圖書的方法
??? 在BookBean中添加方法
?? // 根據(jù)編號查詢圖書
?? public BookBean findBookByID(String bookid){
????? BookBean book=new BookBean();
????? String sql = "select * from books where bookid=?";
????? try{
???????? createStatement(sql);
???????? stmt.setString(1,bookid);
???????? rs = executeQuery();
???????? // 轉(zhuǎn)換成對象
???????? rs.next();

???????? // 使用rs的getString方法,以字符串的形式獲取第一列,參數(shù)也可以是列的名字
???????? // 可以得到當前記錄的每一列
???????? String tempBookname = rs.getString(2);
???????? String tempAuthor = rs.getString(3);
???????? float tempPrice = rs.getFloat(4);
???????? String tempPublisher = rs.getString(5);

???????? // 創(chuàng)建圖書對象
???????? book.setBookid(bookid);
???????? book.setBookname(tempBookname);
???????? book.setAuthor(tempAuthor);
???????? book.setPrice(tempPrice);
???????? book.setPublisher(tempPublisher);

????? }catch(Exception e){
???????? System.out.println(e.toString());
????? }finally{
???????? close();
????? }
????? return book;
?? }
10、編寫Servlet控制器
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class FindBookByID extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? // 第一句話:獲取用戶選擇圖書編號
??????? String bookid = request.getParameter("bookid");

??????? // 第二句話:調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? BookBean book = new BookBean();
??????? book = book.findBookByID(bookid);

??????? // 第三句話:向頁面?zhèn)鬟f信息,第一個參數(shù)是使用的名字,應該和顯示時候使用的名字一致,第二個參數(shù)傳遞的值本身
??????? request.setAttribute("book",book);

??????? // 第四句話:轉(zhuǎn)向響應界面
??????? RequestDispatcher rd = request.getRequestDispatcher("updateBook.jsp");?
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }

}

在web.xml中配置:
?? <servlet>
????? <servlet-name>findBookByID</servlet-name>
????? <servlet-class>servlet.FindBookByID</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>findBookByID</servlet-name>
????? <url-pattern>/findBookByID</url-pattern>
?? </servlet-mapping>

11、修改功能的設計

??? V部分:輸入是修改界面不用修改,只要設置form的action屬性為updateBook即可。輸出可以采用success.jsp界面。
??? M部分:在BookBean中添加修改方法。
??? C部分:4句話,獲取用戶修改后的信息;調(diào)用JavaBean,包括初始化;把執(zhí)行的結(jié)果傳遞到界面;轉(zhuǎn)向界面。
12、修改BookBean中的代碼
?? 增加update方法,代碼如下:
?? // 更新圖書信息
?? public boolean update(){
????? boolean success = false;
????? String sql = "update books set bookname=?,author=?,price=?,publisher=? where bookid=?";
????? try{
???????? createStatement(sql);
???????? stmt.setString(1,bookname);
???????? stmt.setString(2,author);
???????? stmt.setFloat(3,price);
???????? stmt.setString(4,publisher);
???????? stmt.setString(5,bookid);
??
???????? int n = executeUpdate();
?????????
???????? if(n>0)
??????????? success = true;
???????? else
??????????? success = false;
????? }catch(Exception e){
???????? success = false;?????
???????? System.out.println(e.toString());
????? }finally{
???????? close();
????? }
????? return success;
?? }
13、編寫控制器
??? 為了解決亂碼,在控制器中獲取信息之前,增加如下語句:
??????? request.setCharacterEncoding("gb2312");
??? 代碼如下:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class UpdateBook extends HttpServlet
{
? public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
??????? request.setCharacterEncoding("gb2312");
??????? // 第一句話:獲取用戶選擇圖書編號
??????? String bookid = request.getParameter("bookid");
??????? String bookname = request.getParameter("bookname");
??????? String price = request.getParameter("price");
??????? String author = request.getParameter("author");
??????? String publisher = request.getParameter("publisher");
???
??????? float fPrice = 0f;
??????? try{
?????????? // 把字符串轉(zhuǎn)換成浮點型變量
?????????? fPrice = Float.parseFloat(price);?
??????? }catch(Exception e){
??????? }

??????? // 第二句話:調(diào)用JavaBean,創(chuàng)建對象、初始化、然后調(diào)用方法
??????? BookBean book = new BookBean();
??????? book.setBookid(bookid);
??????? book.setBookname(bookname);
??????? book.setPrice(fPrice);?
??????? book.setAuthor(author);
??????? book.setPublisher(publisher);

??????? boolean success = book.update();

??????? String info ;
??????? if(success)
?????????? info = "修改成功!";
??????? else
?????????? info = "修改失敗";

??????? // 第三句話:向頁面?zhèn)鬟f信息,第一個參數(shù)是使用的名字,應該和顯示時候使用的名字一致,第二個參數(shù)傳遞的值本身
??????? request.setAttribute("info",info);

??????? // 第四句話:轉(zhuǎn)向響應界面
??????? RequestDispatcher rd = request.getRequestDispatcher("success.jsp");?
??????? rd.forward(request,response); // 完成跳轉(zhuǎn)

? }

? public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
? {
???? doGet(request,response);
? }
}

修改配置文件:
?? <servlet>
????? <servlet-name>updateBook</servlet-name>
????? <servlet-class>servlet.UpdateBook</servlet-class>
?? </servlet>

?? <servlet-mapping>
????? <servlet-name>updateBook</servlet-name>
????? <url-pattern>/updateBook</url-pattern>
?? </servlet-mapping>


******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第八講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************

第九講(參考《Java Web程序設計基礎(chǔ)教程》第14章)
1、在JSP中如何存儲信息

??? 前面介紹過的:在數(shù)據(jù)庫中存儲信息;在request對象中存儲信息。
??? 分為兩類:內(nèi)存 和 持久存儲
??? 內(nèi)存中如何組織數(shù)據(jù):
??? pageContext對象,存儲當前頁面的信息;請求涉及多少個文件,就會創(chuàng)建多少個pageContext對象。
??? request對象,一次請求會創(chuàng)建一個request對象,如果希望在同一次請求的多個文件之間共享信息,可以保存在request中。
??? session對象,每個客戶端對應一個session,session中用于存儲在用戶的整個訪問過程中要使用的信息。最典型的應用把用戶的登錄信息保存在session中,這樣在后續(xù)的頁面中使用登錄信息。
??? application對象,整個網(wǎng)站對應這樣一個對象,訪問網(wǎng)站的所有用戶在訪問所有網(wǎng)頁的時候都可以使用。典型的應用是公有的聊天室,聊天信息所有人都可以看到,這時候就應該使用application對象。

??? 持久存儲:
??? 數(shù)據(jù)庫,通過JDBC訪問。
??? 文件,通過IO進行操作。
??? Cookie,信息存儲在客戶端。如果使用數(shù)據(jù)庫和文件,信息都存在服務器端。

2、網(wǎng)上購物車的基本功能
???
?? 瀏覽圖書信息;
?? 把圖書添加到購物車中;
?? 對購物車中的物品進行管理;
?? 查看購物車的信息;
?? 生成訂單。

3、如何保存在購物過程中選擇的物品?

?? 關(guān)心購物車中有哪些類型的物品,每種類型的物品有多少。物品的種類數(shù)量不確定。每次請求只能選擇某一種物品。根據(jù)這些特點,應該設計購物車的存儲結(jié)構(gòu)如下:

?? 1)需要把購物車放到session中,這樣才能進行多個頁面之間的共享;
?? 2)因為物品種類不確定,所以一般選擇ArrayList來存儲物品種類以及數(shù)量;
?? 3)對于每一種物品,包含物品本身的信息以及物品的購買數(shù)量,通常使用訂單項來表示,里面包含了物品對象及其數(shù)量。

4、完成向購物車中添加圖書的功能

?? V部分:輸入,是選擇物品向購物車添加的界面,使用物品信息查看界面;
????????? 輸出,顯示購物車信息的頁面。
?? M部分:把選擇的物品添加到購物車中,需要知道原來購物車中有什么信息,購物車在session中保存,所以需要對session進行操作。
?? C部分:第一句話,獲取信息,從輸入界面獲取要添加的圖書,從session中獲取原有的購物車信息。
????????? 第二句話,調(diào)用M部分的添加購物車功能。
????????? 第三句話,保存信息,把修改后的購物車重新寫入session中。
????????? 第四句話,轉(zhuǎn)向顯示購物車信息的頁面。
5、構(gòu)建訂單項類
package bean;

// 表示購物項
public class Item{
?? private BookBean book;
?? private int quantity;
?? public void setBook(BookBean book){
????? this.book = book;
?? }
?? public BookBean getBook(){
????? return book;
?? }

?? public void setQuantity(int quantity){
????? this.quantity = quantity;
?? }
?? public int getQuantity(){
????? return quantity;
?? }
}

6、輸入界面
???
?? 在books.jsp中的圖書列表后增加“添加到購物車”這樣的超鏈接。
7、刪除功能、修改購物車信息
?? 界面:
?? 刪除的代碼:
?? <form action="deleteItem" method="post">
????? <input type="hidden" name="bookid" value="${item.book.bookid}">
????? <input type="submit" value="刪除">?
?? </form>
?? 修改的:
?? <form action="updateCart" method="post">
????? <input type="text" name="quantity" value="${item.quantity}">
????? <input type="hidden" name="bookid" value="${item.book.bookid}">
????? <input type="submit" value="修改">?
?? </form>

?? M部分:
?? 從ArrayList對象cart中刪除Item對象item:cart.remove(item)?? cart.remove(i)
?? 修改功能:在添加過程中如果要添加的圖書已經(jīng)存在,就相當于修改。

?? C部分:與添加功能中的代碼非常類似。

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************第九講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************

第十講
1、MVC模式分析

?? 對任何功能來說,首先考慮人如何來使用這個功能。如何把人的請求發(fā)送給系統(tǒng),系統(tǒng)如何把處理的結(jié)果返回給用戶,實際上就是輸入和輸出。輸入MVC模式中的V部分。
?? 輸入:用戶發(fā)送請求,通過超鏈接,通過瀏覽器的地址欄,通過表單提交。請求時候如何要提交數(shù)據(jù),在超鏈接中以及地址欄中可以通過?的形式來傳遞值,表單方式通過表單元素提交信息。非常典型的應用,隱藏域,用于在多個頁面之間傳遞信息。注意:輸入一定要進行客戶端的格式驗證。
?? 輸出:主要服務器得到的信息顯示給用戶。輸出提示信息:${info}? 輸出對象信息:在更新界面中顯示信息${book.bookid}? 輸出多個對象的信息:
??????????? <c:forEach var="book" items="${books}">
??????????????? <tr>
??????????????????? <td>${book.bookid}</td>
??????????????????? <td>${book.bookname}</td>
??????????????????? <td>${book.author}</td>
??????????????????? <td>${book.price}</td>
??????????????????? <td>${book.publisher}</td>
??????????????????? <td> <a href="deleteBook?bookid=${book.bookid}">刪除</a> </td>
??????????????????? <td> <a href="findBookByID?bookid=${book.bookid}">修改</a> </td>
??????????????????? <td> <a href="addToCart?bookid=${book.bookid}">添加到購物車</a> </td>
??????????????? </tr>
???????????? </c:forEach>
??? 功能(M部分):通常轉(zhuǎn)換成方法。因為Java是面向?qū)ο蟮恼Z言,方法應該輸入某個類的。所以通常需要創(chuàng)建JavaBean(比較特殊的類),然后在JavaBean中添加這個方法。方法的實現(xiàn)主要依賴你的Java基本功。
??? 控制器(C部分):通常使用Servlet來實現(xiàn)。對于控制器需要記住4句話:獲取信息;調(diào)用JavaBean;保存信息;響應。
??????? 獲取信息:
??????????? 獲取請求信息request.getParameter(paraname)? request.getParameterValues(paraname)
??????????? 獲取session中信息? session.getAttribute(屬性名)? 注意:獲取到之后需要進行強制類型轉(zhuǎn)換
??????????? 獲取Cookie中信息? request.getCookies()? 返回的是Cookie數(shù)組
??????????? 獲取請求頭信息?
??????????? 獲取Servlet的配置信息
??????????? 通過其他的JavaBean來獲取一些信息
??????? 調(diào)用JavaBean的方法:
??????????? 實例化,使用new加上構(gòu)造方法來實例化,如果要調(diào)用的方法是靜態(tài)方法,不需要實例化。
??????????? 初始化,可能需要使用上面獲取的信息來對JavaBean進行初始化。
??????????? 調(diào)用方法,可以通過參數(shù)傳遞需要的信息
??????? 保存信息(主要為后續(xù)的頁面和處理服務的):
??????????? 保存到session中,session.setAttribute(屬性名,要保存的對象),供用戶后續(xù)的所有訪問過程使用。
??????????? 保存到request中,request.setAttribute(屬性名,要保存的對象),供后續(xù)頁面使用(頁面與當前的Servlet屬于同一次請求)
??????????? 保存到cookie,Cookie cookie = new Cookie("name","value"); response.addCookie(cookie);? ,供客戶端在以后的時間訪問
??????? 響應:
??????????? 直接輸出:
?????????????? response.setContentType("text/html;charset=gb2312");
?????????????? PrintWriter out = response.getWriter();
?????????????? out.println("歡迎學習JSP!");
??????????? 使用專門的文件進行響應:
?????????????? 方式一:
?????????????????? RequestDispatcher rd = request.getRequestDispatcher(目標文件);?
?????????????????? rd.forward(request,response); // 完成跳轉(zhuǎn)?
?????????????? 方式二:
?????????????????? response.sendRedirect(目標文件);
?????????????? 注意:如果當前功能完成的是對數(shù)據(jù)庫的插入操作,如果用戶刷新就會產(chǎn)生錯誤。要避免錯誤,不能使用RequestDispatcher,可以使用方式二。如果使用方式二,就不能在當前文件和目標文件之間通過request共享信息了。如果要共享可以session,使用session的時候,用完之后一定要刪除這個對象session.removeAttribute(屬性名)。

2、如何使用其他的數(shù)據(jù)庫管理系統(tǒng)

?? 準備工作:
?? 1)安裝數(shù)據(jù)庫;創(chuàng)建表。(這個過程通常是由數(shù)據(jù)庫管理員完成的,對于變成人員來說需要知道數(shù)據(jù)庫的IP地址、端口、數(shù)據(jù)庫名字、用戶名、口令)。
?? 2) 要得到數(shù)據(jù)庫的JDBC驅(qū)動程序,通常是壓縮包,可以從響應的數(shù)據(jù)庫提供商的網(wǎng)站上下載。需要把驅(qū)動程序放在:C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib 或者 應用的WEB-INF/lib下面。
?? 在程序中使用:
?? 與現(xiàn)在使用JDBC-ODBC橋方式基本相同,不同點在于:驅(qū)動程序的名字;URL(通常包含IP地址、端口、數(shù)據(jù)庫名字)的格式不同(與驅(qū)動程序有關(guān));用戶名和口令。
?? 常見的錯誤:
?? 1)ClassNotFoundException?? 通常是因為JDBC驅(qū)動程序加載失敗,找不到。確認JDBC驅(qū)動程序在正確的位置以及版本是否正確。
?? 2)沒有合適的驅(qū)動程序 Not a suitable driver? 通常是因為URL的格式不正確。
?? 3)連接不能被創(chuàng)建,數(shù)據(jù)庫服務器沒有正常運行獲取主機、端口、數(shù)據(jù)庫名有誤。
?? 4)Access Denied? 用戶名和口令錯誤
?? 5)java.sql.SQLException 通常SQL語句錯誤。

******http://blog.csdn.net/javaeeteacher*******************************************************************
*************************************************全十講結(jié)束************************************************
***********************************************************************李老師的一畝三分地******************?


from:?http://blog.csdn.net/javaeeteacher/article/details/1932447

總結(jié)

以上是生活随笔為你收集整理的JSP快速入门教程——全十讲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。