2020-03-19

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? jsp入門 & MVC



(一)JSP的概述

一、什么是JSP

? ? JSP:JavaServer Pages(Java服務(wù)器頁面),其實就是在HTML中嵌入Java代碼

二、為什么學(xué)習(xí)JSP

SUN公司提供了動態(tài)網(wǎng)頁開發(fā)技術(shù):Servlet,Servlet自身有一些缺點,SUN公司發(fā)現(xiàn)了這些問題,就推出了一個新的動態(tài)網(wǎng)頁開發(fā)技術(shù)JSP

Servlet的缺點:

? ? Servlet需要進行配置,不方便維護

? ? Servlet很難向網(wǎng)頁中輸出HTML頁面內(nèi)容

(二)JSP的運行原理

一、JSP的簡單使用

1、創(chuàng)建一個JSP頁面

2、運行JSP(JSP需要發(fā)布到服務(wù)器中才能運行)

發(fā)布項目到Tomcat中

? ? 訪問JSP頁面

http://localhost:8080/web02/demo1/demo1.jsp

二、JSP的運行原理

JSP的運行原理分析

JSP文件會翻譯成Java文件,將這個Java文件編譯生成class文件,再運行class文件

(三)JSP的腳本元素

一、JSP的腳本元素概述

什么是JSP的腳本元素

JSP=HTML+Java代碼+JSP自身的東西

JSP的腳本元素就是在JSP中嵌入Java代碼

二、JSP的腳本元素的分類

1、聲明標(biāo)簽

(1)語法:

<%!?變量或方法聲明 %>

寫在這個腳本中的代碼,會被翻譯成Servlet內(nèi)部的成員變量、或成員方法

(2)用法:

?? ?<%!

??????? ?//聲明變量

??????? ?int i = 3;

%>

2、表達式標(biāo)簽

(1)語法:

<%=?表達式?%>

寫在這個腳本中的代碼,會被翻譯成方法內(nèi)部的out.print();當(dāng)中的內(nèi)容

(2)用法:

<%= i %>

3、程序代碼標(biāo)簽

(1)語法:

<%?程序代碼 %>

寫在這個腳本中的代碼,會被翻譯成方法內(nèi)部的局部變量或方法內(nèi)部的代碼片段

(2)用法:

<%

//程序代碼

int x = 5;

%>


(四)JSP的開發(fā)模式之MVC模式

一、JSP開發(fā)模式

動態(tài)網(wǎng)頁開發(fā)模式的發(fā)展


(五)開發(fā)中的路徑問題

一、路徑問題描述

什么時候會遇到路徑問題

開發(fā)中我們會提供一些頁面,在頁面中會提供鏈接或者表單,當(dāng)點擊鏈接或表單時,需要進行提交,提交到Servlet中,從頁面向Servlet發(fā)送請求的地址(路徑)應(yīng)該如何編寫

二、路徑的分類

1、相對路徑

(1)相對路徑的寫法:

相對路徑不是以/開頭的

(2)相對路徑的使用:

1)在根路徑下的頁面訪問Servlet

demo2.jsp的訪問路徑:

?? ??? ?http://localhost:8080/web02/demo2.jsp

ServletDemo1的訪問路徑:

?? ??? ?http://localhost:8080/web02/ServletDemo1

2)在某個目錄下的頁面訪問Servlet

demo2.jsp的訪問路徑:

????????http://localhost:8080/web02/demo2/demo2.jsp

ServletDemo1的訪問路徑(不變):

????????http://localhost:8080/web02/ServletDemo1

2、絕對路徑

(1)絕對路徑的寫法:

通常以/開頭

使用絕對路徑,就不需要關(guān)心當(dāng)前文件和要請求的文件之間的相對位置關(guān)系了

(2)注意:

絕對路徑分成服務(wù)器端路徑和客戶端路徑

客戶端路徑需要帶工程名

服務(wù)器端路徑不需要帶工程名


(六)案例需求介紹

一、案例需求描述

1、提供登錄頁面,用于用戶登錄(用戶名和密碼需要查詢數(shù)據(jù)庫)

2、如果登錄失敗,需要回到登錄頁面(給出提示信息)

3、如果登錄成功,頁面進行跳轉(zhuǎn),在成功頁面上顯示登錄成功的總?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ū)ο蟮淖饔梅秶?/p>

Request對象其實就是從客戶端瀏覽器,向服務(wù)器發(fā)送的一次請求信息的封裝,那么實質(zhì)上向Request中所保存的數(shù)據(jù),有效期也是一次請求范圍

一次請求范圍:從客戶端瀏覽器向服務(wù)器發(fā)送一次請求,服務(wù)器針對這次請求對瀏覽器作出響應(yīng),當(dāng)服務(wù)器作出響應(yīng)之后,請求對象就銷毀了,保存在其中的數(shù)據(jù)就無效了

(八)請求轉(zhuǎn)發(fā)和重定向完成頁面的跳轉(zhuǎn)

一、請求轉(zhuǎn)發(fā)

1、請求轉(zhuǎn)發(fā)的寫法

(1)通過ServletRequest對象獲得RequestDispatcher對象

getRequestDispatcher(String path)

(2)再根據(jù)RequestDispatcher中的方法進行請求轉(zhuǎn)發(fā)

forward(ServletRequest request, ServletResponse response)

2、請求轉(zhuǎn)發(fā)的代碼實現(xiàn)


3、請求轉(zhuǎn)發(fā)的效果(請求Servlet顯示JSP)


二、重定向

1、重定向的寫法

(1)通過HttpServletResponse對象中的方法實現(xiàn):

sendRedirect(String location)

2、重定向的代碼實現(xiàn)


3、重定向的效果


三、請求轉(zhuǎn)發(fā)和重定向的區(qū)別

1、請求轉(zhuǎn)發(fā)和重定向的原理


2、請求轉(zhuǎn)發(fā)和重定向區(qū)別總結(jié)

(1)請求轉(zhuǎn)發(fā)是一次請求一次響應(yīng),而重定向是兩次請求兩次響應(yīng)

(2)請求轉(zhuǎn)發(fā)地址欄不會變化,重定向地址欄發(fā)生變化

(3)請求轉(zhuǎn)發(fā)路徑不帶工程名,重定向需要帶工程名路徑

(4)請求轉(zhuǎn)發(fā)只能在本網(wǎng)站內(nèi)部,重定向可以定向到任何網(wǎng)站

3、代碼演示請求轉(zhuǎn)發(fā)和重定向區(qū)別


4、注意:如果需要使用Request進行值傳遞,需要通過請求轉(zhuǎn)發(fā)完成,如果頁面需要跳轉(zhuǎn)到其他網(wǎng)站,必須使用重定向

(九)案例準備-MVC的準備

一、MVC如何在案例中應(yīng)用


二、案例準備-創(chuàng)建數(shù)據(jù)庫

1、創(chuàng)建數(shù)據(jù)庫

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’, ‘王五’);

三、案例準備-項目環(huán)境搭建

1、項目環(huán)境搭建

(1)創(chuàng)建Web項目

(2)創(chuàng)建相關(guān)的包結(jié)構(gòu)

四、案例準備-引入相關(guān)資源

1、引入相關(guān)的jar包:

? ? MySQL數(shù)據(jù)庫驅(qū)動包

? ? C3P0連接池所需jar包

? ? DBUtils開發(fā)的jar包

2、引入C3P0配置文件

? ? 將配置文件放到工程的src下即可

3、引入JDBC開發(fā)的工具類

五、案例準備-創(chuàng)建登錄頁面

1、創(chuàng)建登錄頁面

2、登錄頁面實現(xiàn)


(十)案例代碼-登錄代碼實現(xiàn)

一、登錄代碼實現(xiàn)

1、登錄代碼實現(xiàn)流程

? ? 登錄頁面(login.jsp)→登錄的Servlet(LoginServlet),在這個Servlet中需要接收數(shù)據(jù),將這個數(shù)據(jù)封裝到一個JavaBean中,調(diào)用另一個JavaBean處理數(shù)據(jù)(就是查詢數(shù)據(jù)庫),根據(jù)處理結(jié)果進行頁面跳轉(zhuǎn)

2、登錄代碼實現(xiàn)

第一步:在controller包下創(chuàng)建LoginServlet


第二步:在domain下創(chuàng)建一個User類


第三步:在model包下創(chuàng)建一個UserModel類


第四步:根據(jù)處理結(jié)果進行頁面跳轉(zhuǎn)

3、登錄的Servlet的業(yè)務(wù)代碼


二、登錄代碼底層實現(xiàn)

處理數(shù)據(jù)部分的代碼

三、登錄代碼錯誤信息的回顯

1、錯誤信息的回顯代碼

2、錯誤信息顯示效果

四、記錄登錄成功人數(shù)分析

五、記錄登錄成功人數(shù)代碼實現(xiàn)

1、完成初始化操作

? ? 在服務(wù)器啟動的時候初始化一個值為0,將這個值存入到ServletContext域中

? ? 將這個Servlet配置成啟動時加載

2、記錄登錄成功的人數(shù)

3、在登錄成功頁面上顯示總?cè)藬?shù)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作業(yè): 一)JSP的概述 一、什么是JSPJSP:JavaServer Pages(Java服務(wù)器頁面),其實就是...
    常樂_b00d閱讀 360評論 0 0
  • JSP的概述 一、什么是JSPJSP:JavaServerPages(Java服務(wù)器頁面),其實就是在HTML中嵌...
    H_5a8d閱讀 232評論 0 0
  • JSP的概述 一、什么是JSPJSP:JavaServer Pa...
    王月坤閱讀 219評論 0 0
  • (一)Response對象的概述 一、什么是Response我們開發(fā)的軟件是B/S結(jié)構(gòu)的軟件,是可以通過瀏覽器訪問...
    01_ff7c閱讀 234評論 0 0
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,093評論 0 0

友情鏈接更多精彩內(nèi)容