jspNote

jsp個人筆記

靜態網頁 html/css
動態網頁 jsp,asp,php

安裝tomcat服務器
配置環境變量

#set tomcat
export TOMCAT_HOME=/home/juedaiyuer/apache-tomcat-9.0.0.M4

啓動
startup.sh

測試是否啓動成功
http://localhost:8080/

tomcat的目錄結構

bin 命令文件
conf 配置文件
lib 所需的各種JAR文件
logs 日誌文件
temp 臨時文件
webapp 發佈web應用時,默認會將Web應用的文件發佈到此目錄中
work 由jsp生成的servelet存放在此目錄下

WEB-INF目錄結構

是web應用的安全目錄,客戶端無法訪問,只有服務端可以訪問的目錄
web.xml項目部署文件
默認歡迎頁面:index.jsp

/**
    1.配置默認歡迎頁面
    2.web.xml上面添加下面的代碼  
*/
<welcome-file-list>
    <welcome-file>/yourfile.jsp</welcome-file>
</welcome-file-list>

classes文件夾,用以放置*.class文件
lib文件夾,用於存放需要的jar包

myEclipse

配置

配置JRE
preferences-java-Installed JRES 自行add,添加你想要的jdk安裝目錄即可

集成Tomcat服務器

preferences-myEclipse-servers-tomcat 設置你想要的tomcat目錄即可

虛擬路徑

修改tomcat服務器默認端口

/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

javaEE方向:電子銀行,網上證券交易所,鐵路,中國移動…

jsp頁面組成部分

jsp指令
page指令,通常位於jsp頁面的頂部,同一個頁面可以有多個page指令
include指令,外部文件嵌入當前jsp頁面的指令
taglib指令,使用標籤庫定義新的自定義標籤,在jsp頁面啓動定製行爲

<%@page
    屬性1 = "屬性值" 屬性2 = "屬性值"...      
%>

屬性:
language ;
import 通過該屬性來引用腳本語言中使用到的類文件
contentType 用來指定jsp頁面所採用的編碼方式,默認text/html,ISO-8859-1

jsp註釋:
使用html註釋 ,客戶端可見

使用jsp註釋,客戶端不可見
<%–html註釋–%>
jsp腳本註釋
//單行註釋
/**/多行註釋

jsp腳本:
在jsp頁面中執行的java代碼

<% java 代碼 %>

jsp聲明:
在jsp頁面中定義變量或者方法

<%! java 代碼 %>

jsp表達式:

<% =表達式 %> 表達式不以分號結束

生命週期:
jsp頁面生命週期:

  1. 用戶發出請求index.jsp
  2. 是否是第一次請求
  3. 如果是第一次請求,jsp引擎把該jsp文件轉換成爲一個servlet,生成字節碼文件,並執行jspInit()
  4. 生成字節碼文件(如果不是第一次請求,直接訪問該字節碼文件)
  5. 解析執行,jspService()

Jsp內置對象

jsp內置對象是web容器創建的一組對象,不使用new關鍵字就可以使用的內置對象

例子

<%
int[] value = {60,70,80};
    for(int i:value){
        out.println(i);
    }
%>

out對象
jspWriter類的實例,向客戶端輸出內容

常用方法
println() 向客戶端打印字符串
flush() 將緩存區內容輸出到客戶端
clear() 清除緩衝區的內容,在flush調用會拋出異常
clearBuffer() …不會拋出異常
getBufferSize() 返回緩衝區大小(字節數)
getRemaining() 緩存區剩餘
isAutoFlush() 緩存區滿,自動清空或者拋出異常
close() 關閉輸出流

表單提交方式

get
以明文的方式通過URL提交數據,數據在URL中可以看到,提交的數據最多不超過2KB,安全性較低效率較高.適合提交數據量不大,安全性不高的數據.比如:搜索,查詢功能
post
將用戶提交的信息封裝在HTML HEADER內.適合提交數據量大,安全性高的用戶信息.比如:註冊,修改,上傳等功能

<form name="regForm.jsp" action="動作" method="get/post">

</form>

request對象

客戶端請求信息封裝在request對象中,通過它瞭解客戶的需求,做出響應.
它是HttpServletRequest的實例
具有請求域,完成請求之前一直有效

request對象的方法:

getParameter(string name) 返回指定參數的參數值
getParameterValues(string name) 返回包含參數name的所有值數組,比如checkbox複選表單

//解決中文亂碼問題,無法解決URL傳遞參數的中文亂碼問題
<%
    request.setCharacterEncoding("UTF-8");
%>

//URL傳遞參數中文亂碼,conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443" URIEncoding="utf-8"/>


setAttribute(string,obj)
getAttribute(string)

getContentType() 請求體的MIME類型
getProtocol() 返回請求的協議類型及版本號
getServerName() 返回接受請求的服務器主機名

getServerPort() 服務器端口號
getCharacterEncoding() 字符編碼方式
setCharacterEncoding() 設定請求字符編碼方式
getContentLength() 請求體長度
getRemoteAddr() 返回發送此請求體的客戶端IP地址
getRealPath() 返回虛擬路徑的真實地址
getContextPath() 上下文路徑

reponse對象

reponse對象包含了響應客戶請求的有關信息,但在JSP中很少直接用到它
HttpServletResponse類的實例
具有頁面作用域

reponse對象常用方法

PrintWriter getWriter() 向客戶端輸出字符的一個對象
sendRedirect(java.lang.String location) 重新定向客戶端的請求


PrintWriter outer = reponse.getWriter(); //提前於內置out對象
outer.println("---string---");

請求轉發與請求重定向

請求重定向:
客戶端行爲,本質上等於兩次請求,前一次的請求對象不會保存,地址欄的URL地址會改變

請求轉發:
服務器行爲,是一次請求,轉發後請求對象會保存,地址欄的URL地址不會改變

request.getRequestDispatcher().forward(req,resp);

面試經常問到的問題,方向javaEE

session

客戶端和服務器的一次會話
在服務器內存中保存着不同用戶的session

jsp內置對象
在第一個JSP頁面被裝載時自動創建,完成會話期管理
當一個客戶訪問一個服務器時,可能在服務器的不同頁面之間切換,需要session對象管理
session對象是httpsession類的實例

long getCreationTime() 
getId()
setAttribute(string name,Obj value) 屬性保存,類似於key-value
getAttribute(string name)
String[] getValueNames() 所有可用屬性的數組
getMaxInactiveInterval() 兩次請求間隔多長時間session被取消,存活時間
setMaxInactiveInterval() 

程序demo:

<%
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");//需要倒入java.text.*

    Date d = new Date(session.getCreateTime());
%>

Session創建時間: <%=sdf.format(d)%>

session的生命週期

創建

當客戶端第一次訪問某個jsp或者Servlet時候,服務器會爲當前會話創建一個SessionId,每次客戶端向服務器發送請求,都會將此id攜帶過去,服務器進行校驗

活動

  1. 通過超鏈接打開的是同一會話
  2. 當前會話頁面沒有全部關閉,重新打開新的瀏覽器窗口訪問同一項目資源時,屬於同一次會話

銷燬

  1. 調用了session.invalidate()方法
  2. session過期
  3. 服務器重新啓動

    //設置session存活時間,web.xml



    10

application對象

實現了用戶間數據的共享,可存放全局變量
開始於服務器的啓動,終止於服務器的關閉
在用戶的前後連接或不同用戶之間的連接中,可以對application對象的同一屬性進行操作
是ServletContext類的實例

常用方法

setAttribute(string name,obj value) 屬性 K-V
getAttribute(string name)

getAttributeNames() 返回所有可用屬性名的枚舉

getServletInfo() 返回JSP(servlet)引擎名及版本號

page對象

指向當前JSP頁面本身,類似類中的this指針.
java.lang.Object類的實例

getClass() 
hashCode()
equals(Object obj)
copy(Object obj)
clone()
toString()
notify() 喚醒一個等待的線程
notifyAll() 喚醒所有等待的線程
wait(int taimeout) 線程等待,直到timeout結束或者喚醒
wati() 

pageContext對象

提供了對JSP頁面內所有對象及名字空間的訪問
可以訪問到本頁所在的sessio,也可以取本頁面所在的application的某一屬性值
頁面中所有功能的集大成者
類名叫pageContext

常用方法

getOut() 當前客戶端響應被使用的JspWriter流(out)
getSession() 
getPage()
getRequest() 
getResponse()
setAttribute()
getAttribute(String name,int scope) 在指定範圍內取屬性的值
getAttributeScope() 返回某屬性的作用範圍
forward(String relativeUrlPath) 重導到另一頁面(相對路徑)
include(String relativeUrlPath) 在當前頁面包含另一頁面

config對象
在一個servlet初始化時,jsp引擎向它傳遞信息用的.此信息包含Servlet初始化時所要用到的參數以及服務器相關信息.

常用方法

ServletContext getServletContext() 服務器相關信息
String getInitParameter(Sting name) 返回初始化參數的值
Enumeration getInitParameterNames() 返回Servlet初始化所需要參數的枚舉

exception對象

是一個異常對象,當一個頁面在運行過程中發生了異常,就產生這個對象.如果一個JSP頁面要應用此對象,就必須把isErrorPage設爲true,否則無法編譯.是java.lang.Throwable的對象.

常用方法

getMessage() 描述異常的信息
toString() 關於異常的簡短描述消息
printSrackTrace() 顯示異常及其棧軌跡
FillInStackTrace() 重寫異常的執行棧軌跡

程序demo

<%@page
屬性1 = "屬性值" 屬性2 = "屬性值"...errorPage="yourfile.jsp"      
%>

//yourfile.jsp

TODO...

javabean

設計原則
1. 公有類
2. 無參的共有構造方法
3. 屬性私有
4. getter和setter方法

創建getter和setter的快捷方法—MyEclipse

source-generator getters and setters 選項

使用普通方式創建javabean的實例

<%@ page import="包.類名" %>

new方法->get/set方式

使用jsp動作標籤創建實例

<jsp:useBean id="標識符(實例化的對象名)" class="java類名" scope="作用範圍" />

jsp:setProperty 給已經實例化的javabean對象的屬性賦值

<jsp:setProperty name="id" property="*"/> 跟表單關聯
<jsp:setProperty name="id" property="屬性名"/>
<jsp:setProperty name="id" property="屬性名" value="數值"/> 手工設置
<jsp:setProperty name="id" property="propertyName" param="request對象中的參數名"/> 跟request參數關聯

jsp:getProperty

獲取javabean對象的屬性

作用域範圍

page 當前頁面有效
request 可以通過HttpRequest.getAttribute()方法取得Javabean對象
session HttpSession.getAttribute()
application application.getAttribute(),全局範圍

各個變量的生存週期

Model1

狀態管理

http協議的無狀態性
保存用戶狀態的兩大機制
1. Session
2. Cookie

Cookie
是web服務器保存在客戶端的一系列文本信息

典型應用
1. 判定註冊用戶是否已經登陸網站
2. 購物車的處理
3. 系統自動記錄已經瀏覽過的視頻
4. 登陸是否記住登陸狀態


JSP創建與使用Cookie

Cookie newCookie = new Cookie(String key,Object value);

response.addCookie(newCookie); //寫入cookie對象

Cookie[] cookies = request.getCookies(); //讀取Cookie對象

常用方法

setMaxAge(int expiry) 設置有效期,以秒爲單位

setValue(String value) cookie賦值

getName() 獲取cookie的名稱

getValue() 獲取cookie的值

getMaxAge() 獲取cookie的有效時間

cookie 登陸示例

使用URLEncode解決無法在Cookie中保存中文字符串問題
URLDecoder函數

Session與Cookie對比

Session
1. 在服務器保存用戶信息
2. 保存的是Object類型
3. 隨會話的結束而將其存儲的數據銷燬
4. 保存重要的信息

cookie
1. 在客戶端保存用戶信息
2. cookie保存的是String類型
3. 可以長期保存在客戶端
4. 保存不重要的用戶信息

jsp動作元素

動作標籤

指令與動作

指令

<%@ include file="URL" %> 
  1. 發生作用的時間:頁面轉換期間
  2. 包含內容:文件的實際內容
  3. 轉換成Servlet,主頁面和包含頁面轉換爲一個Servlet
  4. 編譯時間 較慢,資源必須被解析
  5. 執行時間 較快

動作

<jsp:include page="" />
  1. 發生動作時間:請求期間
  2. 包含內容:頁面的輸出
  3. 主頁面和包含頁面分別轉換成獨立的Servlet
  4. 編譯時間 較快
  5. 執行時間 較慢,每次資源必須被解析

<jsp:forward page="" />

等同於request.getRequestDispatcher("/url").forward(request,response);


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

通常與forward動作一起使用,作爲其子標籤;傳遞參數,可以覆蓋掉表單提交

myEclipse使用技巧

alt+/ 自動提示

按鈕 deploy Myeclipse j2ee project to server 發佈項目

tomcat用戶名和密碼配置

conf/tomcat-users.xml

tomcat處理靜態Html的能力不如apache
集成方式:apache處理html;tomcat處理jsp和servlet

tomcat在線管理

發佈了187 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章