(一)JSP的概述
一、什么是JSP
? ? JSP:JavaServer Pages(Java服務(wù)器頁(yè)面)坷剧,其實(shí)就是在HTML中嵌入Java代碼
二、為什么學(xué)習(xí)JSP
SUN公司提供了動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)技術(shù):Servlet喊暖,Servlet自身有一些缺點(diǎn)惫企,SUN公司發(fā)現(xiàn)了這些問題,就推出了一個(gè)新的動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)技術(shù)JSP
Servlet的缺點(diǎn):
? ? Servlet需要進(jìn)行配置陵叽,不方便維護(hù)
? ? Servlet很難向網(wǎng)頁(yè)中輸出HTML頁(yè)面內(nèi)容
(二)JSP的運(yùn)行原理
一狞尔、JSP的簡(jiǎn)單使用
1、創(chuàng)建一個(gè)JSP頁(yè)面
2巩掺、運(yùn)行JSP(JSP需要發(fā)布到服務(wù)器中才能運(yùn)行)
發(fā)布項(xiàng)目到Tomcat中
? ? 訪問JSP頁(yè)面
http://localhost:8080/web02/demo1/demo1.jsp
二偏序、JSP的運(yùn)行原理
JSP的運(yùn)行原理分析
JSP文件會(huì)翻譯成Java文件,將這個(gè)Java文件編譯生成class文件胖替,再運(yùn)行class文件
(三)JSP的腳本元素
一禽车、JSP的腳本元素概述
什么是JSP的腳本元素
JSP=HTML+Java代碼+JSP自身的東西
JSP的腳本元素就是在JSP中嵌入Java代碼
二、JSP的腳本元素的分類
1刊殉、聲明標(biāo)簽
(1)語法:
<%! 變量或方法聲明 %>
寫在這個(gè)腳本中的代碼,會(huì)被翻譯成Servlet內(nèi)部的成員變量州胳、或成員方法
(2)用法:
? ? <%!
? ? ? ? //聲明變量
? ? ? ? int i = 3;
%>
2记焊、表達(dá)式標(biāo)簽
(1)語法:
<%= 表達(dá)式 %>
寫在這個(gè)腳本中的代碼,會(huì)被翻譯成方法內(nèi)部的out.print();當(dāng)中的內(nèi)容
(2)用法:
<%= i %>
3栓撞、程序代碼標(biāo)簽
(1)語法:
<% 程序代碼 %>
寫在這個(gè)腳本中的代碼遍膜,會(huì)被翻譯成方法內(nèi)部的局部變量或方法內(nèi)部的代碼片段
(2)用法:
<%
//程序代碼
int x = 5;
%>
(四)JSP的開發(fā)模式之MVC模式
一碗硬、JSP開發(fā)模式
動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)模式的發(fā)展
(五)開發(fā)中的路徑問題
一、路徑問題描述
什么時(shí)候會(huì)遇到路徑問題
開發(fā)中我們會(huì)提供一些頁(yè)面瓢颅,在頁(yè)面中會(huì)提供鏈接或者表單恩尾,當(dāng)點(diǎn)擊鏈接或表單時(shí),需要進(jìn)行提交挽懦,提交到Servlet中翰意,從頁(yè)面向Servlet發(fā)送請(qǐng)求的地址(路徑)應(yīng)該如何編寫
二、路徑的分類
1信柿、相對(duì)路徑
(1)相對(duì)路徑的寫法:
相對(duì)路徑不是以/開頭的
(2)相對(duì)路徑的使用:
1)在根路徑下的頁(yè)面訪問Servlet
demo2.jsp的訪問路徑:
? ? ? ? http://localhost:8080/web02/demo2.jsp
ServletDemo1的訪問路徑:
? ? ? ? http://localhost:8080/web02/ServletDemo1
2)在某個(gè)目錄下的頁(yè)面訪問Servlet
demo2.jsp的訪問路徑:
? ? ? ? http://localhost:8080/web02/demo2/demo2.jsp
ServletDemo1的訪問路徑(不變):
? ? ? ? http://localhost:8080/web02/ServletDemo1
2冀偶、絕對(duì)路徑
(1)絕對(duì)路徑的寫法:
通常以/開頭
使用絕對(duì)路徑,就不需要關(guān)心當(dāng)前文件和要請(qǐng)求的文件之間的相對(duì)位置關(guān)系了
(2)注意:
絕對(duì)路徑分成服務(wù)器端路徑和客戶端路徑
客戶端路徑需要帶工程名
服務(wù)器端路徑不需要帶工程名
(六)案例需求介紹
一渔嚷、案例需求描述
1进鸠、提供登錄頁(yè)面,用于用戶登錄(用戶名和密碼需要查詢數(shù)據(jù)庫(kù))
2形病、如果登錄失敗客年,需要回到登錄頁(yè)面(給出提示信息)
3、如果登錄成功漠吻,頁(yè)面進(jìn)行跳轉(zhuǎn)量瓜,在成功頁(yè)面上顯示登錄成功的總?cè)藬?shù)
二、案例流程分析
(七)Request作為域?qū)ο蟠嫒?shù)據(jù)
一侥猩、Request作為域?qū)ο蟮腁PI
向Request域中保存數(shù)據(jù)
setAttribute(String name, Object o)
從Request域中獲取數(shù)據(jù)
getAttribute(String name)
從Request域中移除數(shù)據(jù)
removeAttribute(String name)
二榔至、Request作為域?qū)ο蟮淖饔梅秶?br>
Request對(duì)象其實(shí)就是從客戶端瀏覽器,向服務(wù)器發(fā)送的一次請(qǐng)求信息的封裝欺劳,那么實(shí)質(zhì)上向Request中所保存的數(shù)據(jù)唧取,有效期也是一次請(qǐng)求范圍
一次請(qǐng)求范圍:從客戶端瀏覽器向服務(wù)器發(fā)送一次請(qǐng)求,服務(wù)器針對(duì)這次請(qǐng)求對(duì)瀏覽器作出響應(yīng)划提,當(dāng)服務(wù)器作出響應(yīng)之后枫弟,請(qǐng)求對(duì)象就銷毀了,保存在其中的數(shù)據(jù)就無效了
(八)請(qǐng)求轉(zhuǎn)發(fā)和重定向完成頁(yè)面的跳轉(zhuǎn)
一鹏往、請(qǐng)求轉(zhuǎn)發(fā)
1淡诗、請(qǐng)求轉(zhuǎn)發(fā)的寫法
(1)通過ServletRequest對(duì)象獲得RequestDispatcher對(duì)象
getRequestDispatcher(String path)
(2)再根據(jù)RequestDispatcher中的方法進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)
forward(ServletRequest request, ServletResponse response)
2、請(qǐng)求轉(zhuǎn)發(fā)的代碼實(shí)現(xiàn)
3伊履、請(qǐng)求轉(zhuǎn)發(fā)的效果(請(qǐng)求Servlet顯示JSP)
二韩容、重定向
1、重定向的寫法
(1)通過HttpServletResponse對(duì)象中的方法實(shí)現(xiàn):
sendRedirect(String location)
2唐瀑、重定向的代碼實(shí)現(xiàn)
3群凶、重定向的效果
三、請(qǐng)求轉(zhuǎn)發(fā)和重定向的區(qū)別
1哄辣、請(qǐng)求轉(zhuǎn)發(fā)和重定向的原理
2请梢、請(qǐng)求轉(zhuǎn)發(fā)和重定向區(qū)別總結(jié)
(1)請(qǐng)求轉(zhuǎn)發(fā)是一次請(qǐng)求一次響應(yīng)赠尾,而重定向是兩次請(qǐng)求兩次響應(yīng)
(2)請(qǐng)求轉(zhuǎn)發(fā)地址欄不會(huì)變化,重定向地址欄發(fā)生變化
(3)請(qǐng)求轉(zhuǎn)發(fā)路徑不帶工程名毅弧,重定向需要帶工程名路徑
(4)請(qǐng)求轉(zhuǎn)發(fā)只能在本網(wǎng)站內(nèi)部气嫁,重定向可以定向到任何網(wǎng)站
3、代碼演示請(qǐng)求轉(zhuǎn)發(fā)和重定向區(qū)別
4够坐、注意:如果需要使用Request進(jìn)行值傳遞寸宵,需要通過請(qǐng)求轉(zhuǎn)發(fā)完成,如果頁(yè)面需要跳轉(zhuǎn)到其他網(wǎng)站咆霜,必須使用重定向
(九)案例準(zhǔn)備-MVC的準(zhǔn)備
一邓馒、MVC如何在案例中應(yīng)用
二、案例準(zhǔn)備-創(chuàng)建數(shù)據(jù)庫(kù)
1蛾坯、創(chuàng)建數(shù)據(jù)庫(kù)
create database web02_login charset utf8;
use web02_login;
2光酣、建表語句
create table user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
nickname varchar(20)
);
insert into user values(null, ‘zs’, ‘123’, ‘張三’);
insert into user values(null, ‘ls’, ‘123’, ‘李四’);
insert into user values(null, ‘ww’, ‘123’, ‘王五’);
三、案例準(zhǔn)備-項(xiàng)目環(huán)境搭建
1脉课、項(xiàng)目環(huán)境搭建
(1)創(chuàng)建Web項(xiàng)目
(2)創(chuàng)建相關(guān)的包結(jié)構(gòu)
四救军、案例準(zhǔn)備-引入相關(guān)資源
1、引入相關(guān)的jar包:
? ? MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)包
? ? C3P0連接池所需jar包
? ? DBUtils開發(fā)的jar包
2倘零、引入C3P0配置文件
? ? 將配置文件放到工程的src下即可
3唱遭、引入JDBC開發(fā)的工具類
五、案例準(zhǔn)備-創(chuàng)建登錄頁(yè)面
1呈驶、創(chuàng)建登錄頁(yè)面
2拷泽、登錄頁(yè)面實(shí)現(xiàn)
(十)案例代碼-登錄代碼實(shí)現(xiàn)
一、登錄代碼實(shí)現(xiàn)
1袖瞻、登錄代碼實(shí)現(xiàn)流程
? ? 登錄頁(yè)面(login.jsp)→登錄的Servlet(LoginServlet)司致,在這個(gè)Servlet中需要接收數(shù)據(jù),將這個(gè)數(shù)據(jù)封裝到一個(gè)JavaBean中聋迎,調(diào)用另一個(gè)JavaBean處理數(shù)據(jù)(就是查詢數(shù)據(jù)庫(kù))脂矫,根據(jù)處理結(jié)果進(jìn)行頁(yè)面跳轉(zhuǎn)
2、登錄代碼實(shí)現(xiàn)
第一步:在controller包下創(chuàng)建LoginServlet
第二步:在domain下創(chuàng)建一個(gè)User類
第三步:在model包下創(chuàng)建一個(gè)UserModel類
第四步:根據(jù)處理結(jié)果進(jìn)行頁(yè)面跳轉(zhuǎn)
3霉晕、登錄的Servlet的業(yè)務(wù)代碼
二庭再、登錄代碼底層實(shí)現(xiàn)
處理數(shù)據(jù)部分的代碼
三、登錄代碼錯(cuò)誤信息的回顯
1牺堰、錯(cuò)誤信息的回顯代碼
2拄轻、錯(cuò)誤信息顯示效果
四、記錄登錄成功人數(shù)分析
五伟葫、記錄登錄成功人數(shù)代碼實(shí)現(xiàn)
1恨搓、完成初始化操作
? ? 在服務(wù)器啟動(dòng)的時(shí)候初始化一個(gè)值為0,將這個(gè)值存入到ServletContext域中
? ? 將這個(gè)Servlet配置成啟動(dòng)時(shí)加載
2扒俯、記錄登錄成功的人數(shù)
3奶卓、在登錄成功頁(yè)面上顯示總?cè)藬?shù)