動態頁面技術(JSP/EL/JSTL)

JSP技術

jsp腳本和註釋

jsp腳本:html

1)<%java代碼%> ----- 內部的java代碼翻譯到service方法的內部java

2)<%=java變量或表達式> ----- 會被翻譯成service方法內部out.print()web

3)<%!java代碼%> ---- 會被翻譯成servlet的成員的內容數據庫

 

jsp註釋:  不一樣的註釋可見範圍是不一樣設計模式

1)Html註釋:<!--註釋內容--> ---可見範圍 jsp源碼、翻譯後的servlet、頁面顯示html源碼數組

2)java註釋://單行註釋  /*多行註釋*/ --可見範圍 jsp源碼 翻譯後的servlet服務器

3)jsp註釋:<%--註釋內容--%> ----- 可見範圍 jsp源碼可見session

jsp運行原理-----jsp本質就是servlet架構

 

jsp在第一次被訪問時會被Web容器翻譯成servlet,在執行app

 

過程:

 

第一次訪問---->helloServlet.jsp---->helloServlet_jsp.java---->編譯運行

 

PS:被翻譯後的servlet在Tomcat的work目錄中能夠找到

jsp指令

 

jsp的指令是指導jsp翻譯和運行的命令,jsp包括三大指令:

 

1)page指令 --- 屬性最多的指令(實際開發中page指令默認)

 

屬性最多的一個指令,根據不一樣的屬性,指導整個頁面特性

 

格式:<%@ page 屬性名1= "屬性值1" 屬性名2= "屬性值2" ...%>

 

經常使用屬性以下:

 

language:jsp腳本中能夠嵌入的語言種類

 

pageEncoding:當前jsp文件的自己編碼---內部能夠包含contentType

 

contentType:response.setContentType(text/html;charset=UTF-8)

 

session:是否jsp在翻譯時自動建立session

 

import:導入java的包

 

errorPage:噹噹前頁面出錯後跳轉到哪一個頁面

 

isErrorPage:當前頁面是一個處理錯誤的頁面

 

 

 

2)include指令

 

頁面包含(靜態包含)指令,能夠將一個jsp頁面包含到另外一個jsp頁面中

 

格式:<%@ include file="被包含的文件地址"%>

 

 

 

3)taglib指令

 

在jsp頁面中引入標籤庫(jstl標籤庫、struts2標籤庫)

 

格式:<%@ taglib uri="標籤庫地址" prefix="前綴"%>

 

 jsp內置/隱式對象(9個)

 

名稱

類型

描述

out

javax.servlet.jsp.JspWriter

用於頁面輸出

request

javax.servlet.http.HttpServletRequest

獲得用戶請求信息,

response

javax.servlet.http.HttpServletResponse

服務器向客戶端的迴應信息

config

javax.servlet.ServletConfig

服務器配置,能夠取得初始化參數

session

javax.servlet.http.HttpSession

用來保存用戶的信息

application

javax.servlet.Servl etContext

全部用戶的共享信息

page

java.lang.Object

指當前頁面轉換後的Servlet類的實例(在普通類中的this)

pageContext

javax.servlet.jsp.PageContext

JSP的頁面容器

exception

java.lang.Throwable

表示JSP頁面所發生的異常,在錯誤頁中才起做用

 

 

 

out對象

 

out的類型:JspWriter

 

out做用就是向客戶端輸出內容----out.write()

 

out緩衝區默認8kb 能夠設置成0 表明關閉out緩衝區 內容直接寫到respons緩衝

pageContext對象

page對象與pageContext對象不是一回事

1)pageContext是一個域對象

setAttribute(String name,Object obj)

getAttribute(String name)

removeAttrbute(String name)

 

pageContext能夠向指定的其餘域中存取數據

setAttribute(String name,Object obj,int scope)

getAttribute(String name,int scope)

removeAttrbute(String name,int scope)

findAttribute(String name)

---依次從pageContext域,request域,session域,application中獲   取屬性,在某個域中獲取後將不在向後尋找

 

四大做用域的總結:

pageContext域:當前jsp頁面範圍

request域:一次請求

session域:一次會話

applicationServletContext)域:整個web應用

 

jsp標籤(動做)

1)頁面包含(動態包含):<jsp:include page="被包含的頁面"/>

2)請求轉發:<jsp:forward page="要轉發的資源" />

靜態包含與動態包含的區別?

 

靜態包含(編譯時包含):它包含的全部Jsp會編譯成一個servlet

 

動態包含:(運行時包含),涉及到的jsp都會編譯成一個servlet,在主要servlet運行時再包含進來

 

靜態包含的效率更高一些。

 

EL

EL 表達式概述

EL(Express Lanuage)表達式能夠嵌入在jsp頁面內部,減小jsp腳本的編寫,EL出現的目的是要替代jsp頁面中腳本的編寫。

EL從域中取出數據(EL最重要的做用)

jsp腳本:<%=request.getAttribute(name)%>

EL表達式替代上面的腳本:${requestScope.name}

 

EL最主要的做用是得到四大域中的數據,格式${EL表達式}

EL得到pageContext域中的值:${pageScope.key};

EL得到request域中的值:${requestScope.key};

EL得到session域中的值:${sessionScope.key};

EL得到application域中的值:${applicationScope.key};

EL從四個域中得到某個值${key};

---一樣是依次從pageContext域,request域,session域,application域中 獲取屬性,在某個域中獲取後將不在向後尋找

1)得到普通字符串

2)得到User對象的值 

3)得到List<User>的值

 1     <%
 2         pageContext.setAttribute("username", "張三");  3         User user=new User();  4         user.setName("小紅帽");  5         user.setAge(18);  6         request.setAttribute("User", user);  7         List<User> list=new ArrayList<User>();  8  list.add(user);  9         session.setAttribute("List", list); 10     
11         
12                 
13                 
14                 
15     %>
16  ${username } 17  ${User.name } 18     ${List[0].age } 

執行表達式

 

例如:

 

${1+1}

 

${empty user}

 

${user==null?true:false}

JSTL技術

Core

http://java.sun.com/jsp/jstl/core

c

 

JSTL核心庫的經常使用標籤

1)<c:if test=」」>標籤

其中test是返回boolean的條件

1     <%       session.setAttribute("number", 10); %>
2     <c:if test="${number>11 }">
3  xxxxx 4     </c:if>
5     <c:if test="${number<=11 }">
6  aaaaa 7     </c:if>

1) <c:forEach>標籤

 

1 <%
2     for(int i=0;i<4;i++){ 3  System.out.println(i); 4  } 5 %>
6 <c:forEach begin="0" end="4" var="i">
7     ${i }<br>
8 </c:forEach>

javaEE經歷的模式

model1模式:

技術組成:jsp+javaBean

model1的弊端:隨着業務複雜性 致使jsp頁面比較混亂

model2模式

技術組成:jsp+servlet+javaBean

model2的優勢:開發中 使用各個技術擅長的方面

servlet:擅長處理java業務代碼

jsp:擅長頁面的實現

 

MVC:---- web開發的設計模式

M:Model---模型 javaBean:封裝數據

V:View-----視圖 jsp:單純進行頁面的顯示

C:Controller----控制器 Servelt:獲取數據--對數據進行封裝--傳遞數據--      指派顯示的jsp頁面

 

 

javaEE的三層架構

服務器開發時 分爲三層

web層:與客戶端交互

service層:複雜業務處理

dao層:與數據庫進行交互

開發實踐時 三層架構經過包結構體現

 

 

總結:

EL表達式

從域中取出數據 ${域中存儲的數據的name}

${pageContext.request.contextPath}

 

JSTL標籤(核心庫)

<%@ taglib uri=」」 prefix=」c」%>

<c:if test=」」>

<c:forEach items=」數組或集合」 var=」數組或集合中的每個元素」>

 

javaEE三層架構+MVC

 

web層:收集頁面數據,封裝數據,傳遞數據,指定響應jsp頁面

service層:邏輯業務代碼的編寫

dao層:數據庫的訪問代碼的編寫

相關文章
相關標籤/搜索