JSP基礎概要


[版權申明:本文系做者原創,轉載請註明出處]
文章出處:http://blog.csdn.net/sdksdk0/article/details/51925232
做者:朱培 ID:sdksdk0html


1、JSP簡介

JSP全名爲Java Server Pages,中文名叫java服務器頁面。是一種用於開發動態web資源的技術。容許用戶嵌套html和java代碼。JSP實際上就是servlet。java

JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能經過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。git

重點在於顯示數據。github

2、JSP的原理

jsp頁面中的java代碼服務器是如何執行的?web

  • 一、從瀏覽器輸入地址,
  • 二、瀏覽器拿到這個地址而後去Tomach中進行查找,找到demo1.jsp,
  • 三、到work/catalina/localhost/JSP中招demo1.class文件,
  • 四、若是沒有找到,就把demo1.jsp翻譯爲demo1.java文件
  • 五、把demo1.java編譯爲demo1.class文件
  • 六、執行servlet。

web服務器在執行jsp頁面時,是如何把jsp頁面中的html標籤發送到客戶端的?
經過標籤中的等部分。out.write方法寫(以下圖)。
jsp輸出模板內容:把html內容翻譯到對應servlet的service方法中,由一個JspWriter的對象進行輸出。
在tomach中通過轉換的demo1.java文件中的內容。
這裏寫圖片描述編程

web服務器在調用jsp時,會提供jsp一些什麼java對象?
pageContext、HttpSession、ServletContext、ServletConfig等瀏覽器

3、JSP基本語法

3.1 腳本表達式

3.2 JSP腳本

3.3 JSP聲明

語法:
<%!
java代碼緩存

%>
做用:定義jsp對應類的成員。服務器

3.4 JSP註釋

語法:<%– 這是註釋 –%>
做用:註釋JSP中的代碼markdown

注意:它的做用和HTML註釋的做用是徹底不一樣的。JSP註釋根本不會被翻譯到servlet中,而HTML註釋是把代碼運行後的結果註釋掉,運行效率低。

4、JSP的指令

4.1 page

<% @指令名稱  屬性1="值1"  屬性2="值2"  %>

page指令不管出如今jsp頁面中什麼地方,它的做用都是整個jsp頁面。

做用:
import:導入jsp中的java類,默認導入lang.*,servlet.*jar包。

<%@page import="java.util.Date,java.util.List" %>

buffer:jsp頁面中有一個字符輸出流java.servlet.jsp.JspWriter,它的緩存大小默認爲8kb.

errorPage:噹噹前JSP頁面發生異常時轉向(轉發)的一個地址,若是地址以」/」開頭,/表明當前應用,絕對路徑。不以/開頭,表示相對路徑。

<error-page>
   <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

isErrorPage:是否產生Throwable對象,默認是false.
<%=exception.getMessage() %>

contentType:指示響應正文的MIME類型和編碼.

pageEncoding:JSP引擎讀取JSP文件時使用的編碼。

isELIgnored:是否忽略EL表達式。默認值是false,不忽略.

4.2 include

靜態包含:

<%@include  file="/index.jsp" %>

動態包含:

<jsp:include page="/index.jsp"></jsp:include>

4.3 taglib

導入外部標籤庫,替換jsp中的java片斷。

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

5、JSP的九大隱式對象

5.1 分類

指在jsp的<%=%>和<% %>能夠直接使用的對象。

request、response、session、exception、application、config、page、out、pageContext

這裏寫圖片描述

5.2 pageContext

自己是一個域對象,還能操做其餘三個域對象(ServletRequest、HttpServlet、ServletContext)中的數據。

操做其餘三個域對象:

PageContext.PAGE_SCOPE|PageContext.REQUEST_SCOPE|PageContext.SESSION_SCOPE|PageContext.APPLICATION_SCOPE

  • void setAttribute(String name,Object v,int Scope);
  • Object getAttribute(String name,int Scope);
  • void removeAttribute(String name,int Scope);

pageContext對象提供了對JSP頁面內全部的對象及名字空間的訪問,也就是說他能夠訪問到本頁所在的SESSION,也能夠取本頁面所在的application的某一屬性值,他至關於頁面中全部功能的集大成者,它的本 類名也叫pageContext。

6、JSP的四大域對象

  1. PageContext:存放的數據只能當前頁面使用。
  2. ServletRequest:存放的數據能夠經過轉發傳遞給下一個轉發目標。
  3. HttpServlet:存放的數據能夠同一次會話中取出。例如:登錄,購物車信息等
  4. ServletContext:存放的數據被整個應用所共享。

7、內置標籤

jsp:include:動態包含

jsp:forward:請求轉發
jsp:param:結合以上標籤使用。

<jsp:forward page="pageContext/demo2.jsp"  >
    <jsp:param  value="abc"  name="username"   />
    <jsp:param  value="123"  name="pwd"   />
</jsp:forward>

8、JSP與JavaBean的使用

jsp中操做javabean

jsp:useBean

先查找再建立。

<jsp:useBean  id="student"  class="cn.tf.domain.Student"  scope="page" />

jsp:setProperty

<jsp:setProperty property="name" name="student"  value="學生"/>
<jsp:getProperty property="name" name="student" />

這裏寫圖片描述

9、EL表達式

不是單獨的語言,而是jsp規範中獲取數據的一種方式。能夠獲取數據、運算、訪問普通靜態方法等功能。
不支持字符串鏈接操做。

9.1 獲取數據

只能獲取存在於四個域對象中的數據。
EL對於null這樣的數據,顯示在頁面上表現爲一個空字符串。

${s} pageContext.findAttribute(「s」);
無空指針問題。

運算符:
.
[]

<!-- 獲取javabean的屬性 -->
<%
  Student student=new Student();
  student.setAddress(new Address());
    pageContext.setAttribute("s",student);
 %>

 ${s.name}==${s['name']}

${s.address.province }

<!-- 獲取List集合中的元素 -->
<%

List  list=new ArrayList();
list.add("a");
list.add("b");
list.add("c");

pageContext.setAttribute("list",list);

 %>

${list[1] }


<!-- 獲取map中的元素 -->
<%
    Map  map=new HashMap();
    map.put("a","1111");
    map.put("b","2222");
    map.put("c","3333");

    pageContext.setAttribute("map",map);
 %>
${map.b}

這裏寫圖片描述

9.2 運算

empty:判斷null、空字符串和沒有元素的集合(

${empty p }

三元運算符:
${布爾表達式?true:false}

<%
        List list=new ArrayList();
        list.add("a");
        pageContext.setAttribute("list",list);
     %>
     ${empty list }  <!--  false-->

     ${empty list ?'您未購買任何東西':'您購買的物品以下'} 

     <%
        session.setAttribute("user","張三"); 

      %>

       ${empty user? '您還未登錄':'歡迎您' } ${user }

9.3 隱式對象(11個)

這裏寫圖片描述

9.4 自定義EL表達式

一、編寫一個類

public class Function {

public static String toUppercase(String data){
    return data.toUpperCase();  
}

}

二、在WEB-INF目錄下建一個擴展名爲tld的xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://www.tianfang1314.cn/myfunctions</uri>
    <function>
<name>toUpperCase</name>
<function-class>cn.tf.functions.Function</function-class>
<function-signature>java.lang.String toUppercase( java.lang.String )</function-signature>
</function>
</taglib>

三、在jsp中使用
引入taglib文件:

<%@ taglib uri="http://www.tianfang1314.cn/functions"   prefix="my" %>

使用自定義的el表達式「data」,將小寫的a轉換爲大寫的A。

<%
            pageContext.setAttribute("data","aaaaaaa");
         %>
         ${my:toUpperCase(data) }

實際項目中不少都是使用JSTL來進行操做的。

源碼地址:https://github.com/sdksdk0/JSP

相關文章
相關標籤/搜索