動態頁面技術JSP/EL/JSTL

JSP技術html

jsp腳本和註釋java

jsp腳本:web

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

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

3)<%!java代碼%>   ---- 會被翻譯成servlet的成員的內容服務器

 

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

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

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

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

jsp運行原理

jsp本質就是servlet

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

過程:

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

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

JSP指令(三個)

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

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

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

格式:

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

經常使用屬性以下:

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

  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九大內置/隱式對象

 

名稱

類型

描述

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.ServletContext

全部用戶的共享信息

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對象

jsp頁面的上下文對象,做用以下:

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域:一次會話

  application域:整個web應用

2)能夠得到其餘8大隱式對象

例如: pageContext.getRequest()

  pageContext.getSession()

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%/* pageContext.setAttribute("name", "張三"); */
    /* request.setAttribute("name", "李思思");
    session.setAttribute("name", "李三思");
    application.setAttribute("name", "李思"); */

    pageContext.setAttribute("name", "李思思",PageContext.SESSION_SCOPE);
    pageContext.setAttribute("name", "張三1",PageContext.REQUEST_SCOPE);
    pageContext.setAttribute("name", "李三思",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE) %>
<%=pageContext.findAttribute("name") %>
</body>
</html>

JSP標籤(動做)

 

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

 

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

 

 

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>的值

 

<!-- 模擬域中的數據 -->
<%
    pageContext.setAttribute("name", "pageContxt");
    //存儲字符串
    request.setAttribute("name", "request");
//存儲一個對象
    Users user=new Users();
    user.setId(1);
    user.setUsername("lisi");
    user.setPwd("123");
    session.setAttribute("user", user);
    //存儲一個集合
    List<Users> list=new ArrayList<Users>();
    Users user1=new Users();
    user1.setId(1);
    user1.setUsername("wangwu");
    user1.setPwd("123");
    list.add(user1);
    Users user2=new Users();
    user2.setId(1);
    user2.setUsername("zhaoliu");
    user2.setPwd("123");
    list.add(user2);
    application.setAttribute("List", list);
%>
<hr>
<!-- 使用腳本取出域中的值 -->
<%=request.getAttribute("name") %>
<%Users u=(Users)session.getAttribute("user");
    out.write(u.getUsername());
%>
<hr>
<!-- 使用EL表達式取出域中的值 -->
${requestScope.name}
${sessionScope.user.username}
${applicationScope.List[0].pwd}
<hr>
<!-- 使用el表達式 全域查找(會從最小的找,底層就是findAttribute()) -->
${name }
${user.username}
${List[0].pwd}

 

EL的11個內置對象

pageScope,requestScope,sessionScope,applicationScope

 

---- 獲取JSP中域中的數據

 

param,paramValues        - 接收參數.

 

至關於request.getParameter()  request.getParameterValues()

 

header,headerValues       - 獲取請求頭信息

 

至關於request.getHeader(name)

 

initParam                            - 獲取全局初始化參數

 

至關於this.getServletContext().getInitParameter(name)

 

cookie                                          - WEB開發中cookie

 

至關於request.getCookies()---cookie.getName()---cookie.getValue()

 

 

Form.html

 

 

<form action="/WEB02/form.jsp" method="get">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="提交">
</form>

 

Form.jsp

<!-- 得到表單的參數 -->
<% 
    request.getParameter("username");
    //.....
%>
<!-- 使用EL得到參數 -->
    ${param.username }
    ${header["User-Agent"] }
    ${cookie.abc.value }
<!-- 經過el表達式得到request對象 -->
    <%--${requestScope } --%>
    ${pageContext.request }
    

Cookie.jsp

<%
        Cookie cookie=new Cookie("abc","zhangsan");
        response.addCookie(cookie);
%>

Index.jsp

<form action="${pageContext.request.contextPath }/form.jsp" method="get">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="提交">
</form>

pageContext得到其餘八大對象

  ${pageContext.request.contextPath}

 

EL執行表達式

例如:

${1+1}

${empty user}

${user==null?true:false}

JSTL技術

 

JSTL概述

 

JSTLJSP Standard Tag Library)JSP標準標籤庫,能夠嵌入在jsp頁面中使用標籤的形式完成業務邏輯等功能。jstl出現的目的同el同樣也是要代替jsp頁面中的腳本代碼。JSTL標準標準標籤庫有5個子庫,但隨着發展,目前常使用的是他的核心庫

 

標籤庫

標籤庫的URI

前綴

Core

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

c

I18N

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

fmt

SQL

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

sql

XML

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

x

Functions

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

fn

 

 

 

JSTL下載與導入

 

Apache的網站下載JSTLJAR包。進入                 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/」網址下載        JSTL的安裝包。jakarta-taglibs-standard-1.1.2.zip,而後將下載好的JSTL安裝包       進行解壓,此時,在lib目錄下能夠看到兩個JAR文件,分別爲jstl.jarstandard.jar    其中,jstl.jar文件包含JSTL規範中定義的接口和相關類,standard.jar文件包含用於         實現JSTL.class文件以及JSTL5個標籤庫描述符文件(TLD

將兩個jar包導入咱們工程的lib 

使用jsptaglib指令導入核心標籤庫

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>

JSTL核心庫的經常使用標籤

 

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

其中test是返回boolean的條件

<%request.setAttribute("count", 10); %>
<!--jstl標籤常常會和el配合使用  -->
<!-- test表明的返回boolean的表達式 -->
<c:if test="${count==10 }">
    xxxx
</c:if>

index.jsp

<!-- 用戶沒有登錄 -->
<c:if test="${empty user }">
    <a href="login.jsp">登錄</a>
    <a href="register.jsp">註冊</a>
</c:if>
<!-- 用戶已經登錄 -->
<c:if test="${!empty user }">
    <span>${user.name }</span>
    <a href="#">退出</a>
</c:if>

Ceshi.jsp

<%
    //模擬用戶已經登陸成功
    User user=new User();
    user.setId(100);
    user.setName("張三");
    user.setPwd("123");
    session.setAttribute("user", user);
%>

2)<c:forEach>標籤

 

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="com.oracle.domain.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- <%for(int i=0;i<=5;i++){
        out.print(i);
    }%> --%>
<c:forEach begin="0" end="4" var="i">
    ${i }<br>
</c:forEach>
<% 
    List<User>list=new ArrayList<User>();
User u1=new User();
u1.setAge(17);
u1.setName("zhangsan");
User u2=new User();
u2.setAge(18);
u2.setName("lisi");
list.add(u1);
list.add(u2);
Map<String,User> map=new HashMap<String ,User>();
map.put("1", u1);
map.put("2", u2);
session.setAttribute("userlist", list);
session.setAttribute("usermap", map);
 %>
<c:forEach  items="${userlist }" var="user">
    ${user.name}...${user.age }
</c:forEach>
<!-- 取map中的值 -->
<c:forEach  items="${usermap }" var="entry">
    ${entry.key }....${entry.value }~${entry.value.name }<br>

</c:forEach>
</body>
</html>
相關文章
相關標籤/搜索