引言
JSP其實在大學已經開始學了一部分了,安裝了Myeclipse和Resin用resin搭載服務器,光安裝配置就弄了好長時間,之後的課程更是複雜。雖然老師教的很耐心,但是自己上手操作就一頭霧水。剛好在猿道也開始學習JSP了,要利用好這個機會,好好補補課,期末考試績點就靠猿道了。
JSP概述
Java Server Page
通俗來說,JSP是使用Java語言完成互聯網的網頁(動態網頁)
動態網頁/靜態網頁(HTML)
兩種說法:
1、頁面的效果動態。(JavaScript+CSS,HTML5,Flash......)
2、頁面的內容動態。(JSP)
常見的動態網頁技術:
Sun公司/Oracle公司,Java語言方向:JSP(JavaServerPage)
Microsoft公司,C#語言方向:ASP(ActiveServerPage)
民間組織/技術論壇:PHP(PersonHomePage/Hypertext Preprocessor)
動態網頁一定是運行在服務器上的。不同的動態網頁技術,採用的是不用的服務器,我們也叫做Web容器
Web容器是幹什麼的?
用來管理和維護Web應用程序的一套軟件。
Web應用程序時什麼?
通俗的說,Web應用程序時一組動態網頁以及相關資源組成的
Web容器也叫作Web服務器或者服務端(Web應用程序通常不是放在我們自己的電腦上的,需要通過網絡纔可以訪問)
在學習的餓時候,可以在自己的電腦上安裝一套Web容器(常見的Web容器:Tomcat/Apache/IIS/WebLogic/JBoss/GlassFish)
服務端Server/客戶端Client
常見的客戶端:各種瀏覽器(IE/Netscape/FireFox/Chrome/Opera...)
瀏覽器browser分成兩大塊:
原生瀏覽器(IE(Edge)/FireFox/Chrome/Opera/Safari)
二次開發的瀏覽器:360,QQ,遨遊,等...
C/S和B/S
C/S叫作客戶端/服務器模式
B/S叫作瀏覽器/服務器模式
CS好還是BS好?
CS:運行速度快,圖形效果好。維護麻煩,需要頻繁更新,佔用的客戶端資源較多。
C/S結構的程序,通常叫作富客戶端,功能是放在客戶端中的。
程序的安全性較低,維護升級不便。隨客戶端安裝大量相關資源,空間佔用個較大
BS:無需安裝客戶端,也無需更新。受網絡的制約。
B/S結構的程序。通常叫作瘦客戶端,功能(業務規則)是放在服務端中的。
程序的安全性相對較高。功能增加的時候,客戶端無需更新。
根據不同的業務場景,選擇程序的模式。
JSP屬於BS模式
環境變量配置CMD命令:
set JAVA_HOME=%CD%
set PATH=%JAVA_HOME%\bin;
set CATALINA_HOME=%CD%
set PATH=%CATALINA_HOME%\bin;
startup
shutdown
Tomcat的兩種工作模式:進程模式、服務模式
Tomcat如果以服務的方式運行(windows系統的專利)
首先要檢查Tomcat是否支持服務方式運行,需要有tomcat.exe和service.bat
安裝服務:service install / service install Tomcat
查詢服務是否安裝:sc query Tomcat8
啓動服務:net start Tomcat8
查詢端口打開情況:netstat -an / netstat -abn
停止服務:net stop Tomcat8
刪除服務:service remove \ service remove Tomat
Tomcat的目錄結構
bin:存放的是Tomcat啓動的必須文件,主要是由*.jar/*.xml/*.bat/*.sh/*.tag.gz組成
conf:存放tomcat的配置文件
lib:存放的是Tomcat服務器運行時需要用到的第三方類庫,這一個文件夾的類庫,是Tomcat服務器本身和其管理的所有的Web應有程序都能夠使用的。例如"mysql-jdbc-connection.jar"
logs:存放的是Tomcat運行時產生的日誌
temp:存放的是Tomcat運行時產生的臨時文件(文件可以刪除)
webapps:存放的是Tomcat所管理的Web應用程序
work:存放的是Web應用程序產生的臨時文件(文件可以刪除)
Web應用程序的目錄結構
重要!!!Web應用程序需要部署到Tomcat的webapps文件夾中。
WEB-INF\lib:保存的是Web應用程序需要使用的第三方類庫文件(通常會將驅動類這類的jar包存放在這裏)這一個文件夾中的類庫,只有本Web應用程序可以訪問
WEB-INF\classes:保存的是Web應用程序中的Java程序的*.class文件
WEB-INF\web.xml:Web應用程序部署描述符文件,在後續的課程中,我們有很多地方需要使用到
其他的Web資源文件,例如*.html、*.jsp、*.jpg、*.js、*.css……都可以直接放在Web應用程序的根文件夾中。也可以自己單獨創建其他的文件夾
不顯示進程名
netstat -an
顯示進程名
netstat -abn
直接雙擊文件打開(本地訪問)
file://D:\JavaEE\apache-tomcat-8.0.44\webapps\FirstWeb\first.html
本地訪問使用的是“\”反斜槓
通過網頁地址的方式打開(遠程訪問)
http://localhost:8080/FirstWeb/first.html
遠程訪問使用的是“/”斜槓
JSP動態頁面只支持遠程訪問方式!!!
1、使用純手工方式創建Web應用。
2、使用eclipse for Web工具創建Web應用。
頁面文件,存放的目錄名,默認情況下叫做“WebContent”,該文件夾中保存所有的資源文件。
所謂的資源文件,包括如下內容:
靜態頁面:*.html、*.htm
動態頁面:*.jsp
樣式表:*.css
腳本文件:*.js
圖片:*.jpg、*.png、*.gif、*.bmp
動畫:*.flv、*.swf
音頻:*.mp3、*.flac、*.ape、*.wav
視頻:*.mp4、*.mpeg、*.mpg、*.mov
二進制文件:*.exe、*.bin
壓縮文件:*.zip、*.rar、*.tar.gz
文檔:*.txt、*.doc、*.pdf、*.ppt、*.xls
WebContent這個文件夾,通常我們也叫做資源文件夾,或者Web應用程序根目錄。
允許有子文件夾存在。
特別注意,有幾類文件不存在資源文件夾中!!!
*.jar、*.class、*.java、*.xml
IDE工具中的Tomcat和手工運行的Tomcat不是一個回事。
採用IDE工具開發Wen應用程序,編寫完代碼以後,需要做一件重要的事情:部署!!!
項目中,所有文件編碼,儘可能統一!!!
JSP是什麼??
JSP由7種元素組成的(七種武器)
1、HTML,包括HTML標記、CSS樣式表、JavaScript腳本等等……
2、註釋:
HTML註釋:<!-- -->在網頁源碼中是可以看見的
HTML,Web容器不忽略,將註釋信息輸出到頁面中,但是瀏覽器會忽略這些註釋信息,
所以在頁面源碼中可以看到,但頁面內容中不可見。
HTML註釋不可以註釋JSP代碼
JSP註釋:<%-- --%>在網頁源碼中是不可見的
JSP註釋,Web容器就忽略了。所以在最終的頁面源碼中不可見
JSP註釋可以註釋JSP代碼
3、代碼段/小腳本/ScriptLet:<% Java代碼; %>注意,代碼段中Java代碼結尾一定要有“;”
代碼段中只能有Java的調用語句,不能有定義語句!!!
4、表達式:<%=Java表達式 %>注意,表達式中Java代碼結尾一定不能有“;”
5、聲明:<%! Java代碼; %>
聲明中只能由定義語句,而不能有調用語句!!!
6、指令:<%@ 指令名 指令的屬性列表 %>
作用:指示Web容器處理JSP文件的時候的一些設置
page指令
language屬性:指定JSP頁面的處理語言。取值只能寫"Java",默認值也是Java
contentType屬性:指定JSP頁面內容的字符編碼,指定給瀏覽器看的,值:"text/html; charset=UTF-8"
pageEncoding屬性:指定JSP頁面文件的字符編碼,指定給編輯器看的,值:"UTF-8"
import屬性:指定JSP文件導入非java.lang包以外的其他類,值"java.util.*"
isELIgnored屬性:指定JSP是否跳過處理EL表達式
errorPage屬性:指定JSP頁面是否是錯誤處理頁面
include指令
file屬性:指定包含的文件位置
taglib指令
指令一般在頁面最前面,只有include指令可以放其他位置
7、動作:<jsp:動作名稱 動作屬性列表></jsp:動作名稱>
主要作用是:封裝數據,完成頁面的跳轉
jsp:param(獲取一個數據)
jsp:params(獲取一組數據)
這兩個動作的功能,從請求的查詢字符串中獲取數據
被EL表達式替代
jsp:attribute
這個動作的功能,從作用域範圍中獲取數據
JSTL和EL都可以替代
jsp:useBean
jsp:setProperty
jsp:getProperty
這三個動作的功能,用於封裝數據成對象
使用EL替代
jsp:forward(目前還勉強有用)頁面的轉發
jsp:fallback
jsp:include(目前還勉強有用)頁面的包含
使用EL替代
目前來說,JSP的標準動作不再使用
原因:1、有替代技術。2、JSP標準動作在MVC設計模式中不符合設計模式的思想
常見的瀏覽器錯誤代碼:
500:服務器內部錯誤(通常是Web應用程序產生了 編譯異常)
404:服務器找不到相關資源(文件未找到)
403:訪問被拒絕(通常是沒有相關資源的訪問權限)
JSP的工作原理
1、編寫JSP頁面源碼
使用eclipse完成
2、將(*.jsp)頁面源碼轉義成(*.java)Java源碼
tomcat完成(web容器)
3、將(*.java)Java源碼編譯成(*.class)Java的字節碼
tomcat完成(web容器)
4、通過虛擬機執行(*.class)Java字節碼,將執行的結果處理成(*.html)頁面源碼
tomcat完成(web容器)
5、將最終的HTML頁面源碼發送給瀏覽器
tomcat完成(web容器)
6、瀏覽器解析HTML,以圖形化的方式展示頁面
瀏覽器完成
JSP九大內置對象
第一類:與輸入輸出有關的
request請求對象
response響應對象
out輸出對象
第二類:與作用於範圍有關的
pageContext頁面作用域
request請求作用域
session會話作用域
application應用作用域
第三類:與配置有關的
config配置對象
page頁面本身的對象
第四類:與異常有關的
exception異常對象
主要是研究隱式對象的方法。
研究API的方法
1、提供什麼樣的類(包括類、抽象類、接口,放在什麼包裏,層次關係,這個類提供什麼方法,完成什麼功能)
2、關注方法(方法有什麼參數,包括參數的個數,參數的數據類型,參數的排列順序,返回什麼結果,結果的數據類型,完成什麼功能)
3、關注常量(靜態常量,枚舉類型)
4、關注註解
5、關注異常(異常的名字)
html表單在jsp中的一些補充知識
查詢字符串的格式:?參數的名稱=參數的值&參數的名稱=參數的值
在查詢字符串中,表單元素的name屬性,成爲了查詢字符串的參數的名字,
表單元素的value屬性,將成爲查詢字符串的參數值
在表單提交的時候,可以採用兩種提交方式:分別是get/post
只有當表單採用get方式請求的時候,表單的內容纔會以查詢字符串的形式傳遞
當表單採用post方式請求的時候,表單內容將會被封裝
url的組成
http :// localhost : 8080 / JavaWeb_smith / wx / wx.jsp
協議 :// 主機名,IP,域名 : 端口號 / Web應用名/資源路徑 / 資源名稱
隱式對象的常用方法:
(見https://blog.csdn.net/weixin_42588379/article/details/84557164)
亂碼問題
詳情移步:
https://blog.csdn.net/weixin_42588379/article/details/84638890
JSP中的會話跟蹤:
原因:本質上是因爲Http協議先天的原因。
HTTP協議是一種無狀態通訊協議!
導致多個頁面之間無法直接傳遞數據
JSP頁面間傳遞信息的幾種方式:
//方法一:URL重寫
//通過查詢字符串傳遞參數
//這種方式很麻煩,不適合於傳遞帶有編碼格式的數據
//但是可以很方便地傳遞數字數據
//發送頁面
String url="success.jsp?uName="+uName;
String newUrl=response.encodeRedirectURL(url);
response.sendRedirect(newUrl);
//接收頁面
String uName=request.getParameter("uName");
byte[] b=uName.getBytes("iso-8859-1");
String uNickNew=new String(b,"utf-8");//修改編碼
//方法二:作用域(強烈建議採用)
//發送頁面
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//以上代碼不能處理get請求中的數據的
request.setAttribute("niChen",uName);
request.getRequestDispatcher("success.jsp").forward(request,response);
//接收頁面
String uName=(String)request.getAttribute("niChen");
//方法三:Cookie(很少用)
//Cookie是保存在客戶端瀏覽器的臨時文件夾中的。造成安全隱患
//Cookie內容本身就是文本信息。另外,瀏覽器在讀取Cookie的時候不做任何認證工作。
//還有一個不適用Cookie的理由。Cookie是可以被瀏覽器禁用的
//方法四:隱藏表單域(有侷限性,必須有表單)
<input type="hidden" value="2" name="hide">//發送頁面
String hide=request.getParameter("hide");''接收頁面
EL表達式
叫作表達式語言
在JSP的基礎上升級一種表達式的語言格式,
所以EL表達式不同於Java語言,也不同於JSP標籤
EL的語法規則很簡單:${表達式}
EL表達式是提供一種更簡便的操作查詢字符串和作用域範圍中數據的一種方式
EL表達式的侷限,只能讀,不能寫
JSP表達式和EL表達式的異同
都可讀取數據(查詢字符串或者作用域範圍)
區別在於,JSP表達式讀取失敗,將輸出"null"
EL表達式讀取失敗,則輸出""
EL表達式主要完成兩個工作:計算和輸出
EL表達式主要是爲了替代JSP表達式的。
原因:
1、容易造成<xxxx<%%>/>語法,容易產生歧義。
2、JSP表達式語法要求嚴格。EL表達式更加智能化,更加簡潔
3、從作用域範圍拿數據,無需指定作用域範圍
例:
<h2>EL操縱作用域範圍${data}</h2>
<h2>JSP操作作用域範圍<%=session.getAttribute("data") %></h2>
EL表達式的語法規則有兩種:
1、類似於對象的屬性:${對象.屬性}
2、類似於數組的訪問方式:${對象["屬性"]}
EL表達式中的內置對象(隱式對象)
param,paramValues封裝的是查詢字符串的數據
pageScope,requestScope,sessionScope,applicationScope封裝的是四大作用域範圍
initParam封裝的是初始化參數
head,headValues,pageContext,cookie
EL最大的優勢,可以操作JavaBean