java--動態頁面技術--JSP、EL、JSTL

jsp腳本:

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

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

3)<%!java代碼%> ---- 會被翻譯成servlet的成員的內容--成員變量web

 

jsp註釋:  不一樣的註釋可見範圍是不一樣

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

2)java註釋://單行註釋  /*多行註釋*/ --可見範圍 jsp源碼 翻譯後的servlet設計模式

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

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

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

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

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

jsp指令

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

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:當前頁面是一個處理錯誤的頁面

2include指令 

頁面包含(靜態包含)指令,能夠將一個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的值,有返回false

${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   <c:forEach begin="0" end="4" var="i">          //普通for
 2         ${i }<br>
 3     </c:forEach>
 4     
 5     <%
 6         List<User> list=new ArrayList<User>();
 7         User u1=new User();
 8         u1.setName("張三");
 9         u1.setAge(18);
10         list.add(u1);
11         User u2=new User();
12         u2.setName("李四");
13         u2.setAge(15);
14         list.add(u2);
15         Map<String,User> map=new HashMap<String,User>();
16         map.put("1",u1);
17         map.put("2",u2);
18         session.setAttribute("userlist", list);
19         session.setAttribute("usermap", map);
20     %>
21     <!-- 取集合list中的值 -->
22     <c:forEach items="${userlist }" var="user">         //加強for
23         ${user.name }...${user.age }<br>
24     </c:forEach>
25     <!-- 取map中的值 -->
26     <c:forEach items="${usermap }" var="entry">
27         ${entry.key }...${entry.value }<br>
28     </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層:數據庫的訪問代碼的編寫

1) --成員變量

相關文章
相關標籤/搜索