1. 程式人生 > >【我的javaEE學習】JSP簡單學習

【我的javaEE學習】JSP簡單學習

一、JSP簡介

1SUN公司推出的開發動態web資源的技術,屬於JavaEE技術之一。由於原理上是Servlet, 所以JSP/Servlet在一起。

二、HTMLServletJSP

1HTML:靜態頁面,不能包含java程式碼,只能有HTML有關的標記

2Servlet:寫java程式碼,做頁面的輸出,不是很方便(開發效率很低)

3JSPHTML+java

三、輸出當前的時間


四、JSP的原理及生命週期

1JSP就是Servlet,學習好JSP的關鍵(語法),時刻想到他對應的Servlet


五、JSP的語法

5.1模板元素

JSP中的那些HTML。開發時先編寫模板元素,因為他們決定頁面的外觀。如

CSS等內容。

5.2 Java程式片段

語法:<%java程式%>

  出現在JSP對應Servletservice方法中。

   <%宣告的變數:區域性變數%>

Jsp中:


Jsp對應的Serclet中:

5.3 Java表示式

語法:<%=表示式%>

   

5.4 JSP宣告

語法:<%!   %>

作用:定義JSP對應Serlvet的成員(變數和方法、靜態方法)(注意這個聲音是全域性的)

注意:開發中很少用。如:



serlvetservice方法裡找不到,因為service方法裡是區域性,該變數是全域性的。不建議使用,因為有執行緒安全問題。

5.5 JSP註釋

語法:<%--這是註釋--%>

作用:註釋掉的程式碼,JSP引擎不會翻譯到Servlet原始碼中。要注意和HTML註釋的區別。

5.6 JSP指令:

指令是為JSP引擎設計的。而只是告訴引擎如何處理JSP頁面中的其餘部分(非指令部分);一般把指令放在JSP頁面的頂部(不是必須的)。

基本語法格式:<%@指令 屬性1=1” ....%>;指令的屬性可以寫在一個指令的中,也可以分開寫,比如:<%@指令 屬性1=1” 屬性2=”2”%>.

        等價於:

        <%@指令 屬性1=1” %>.

        <%@指令 屬性2=2”%>.

page:定義JSP頁面的各種屬性,作用於整個JSP頁面。

        language:告知引擎,指令碼用的是java。預設java,支援java。不寫也行。(瞭解)

        extends:告知引擎,JSP對應的Servlet的父類是哪個。不需要寫,也不要改。

        import:告知引擎,匯入哪些包。

        注意:引擎自動匯入:java.lang.*;javax.servlet.*;javax.servlet.http.*;javax.servlet.jsp.*;

        匯入的形式:<%@page import=”java.util.Date,java.util.UUID”%>

                    等價於

                 <%@page import=”java.util.Date”%>

                 <%@page import=”java.util.UUID”%>  

        session:告知引擎是否產生HttpSession物件,即是否在程式碼中呼叫request.getSession(),預設值true。改成false就不會產生session.

        bufferJspWriter用於輸出JSP的內容到頁面上。告知引擎,設定他的快取大小。預設8Kb(瞭解)

        errorPage:告知引擎,當前頁面出現了異常,應該轉發到哪個頁面上(路徑寫法:/代表著當前應用)

   

      或者配置全域性錯誤頁面:web.xml

   

        isErrorPage:告知引擎,是否抓住異常。預設值為false。如果該屬性為true,頁面中就可以使用exception隱含物件,列印異常的詳細資訊。

    

        contentType:告知引擎,響應正文的MIME型別。

                               contentType=”text/html;charset=UTF-8”  相當於response.setContentType(“text/html;charset=UTF-8”);

        pageEncoding:告知引擎,翻譯JSP時(要從磁碟上讀JSP檔案)所用的碼錶。


        pageEncoding=”UTF-8”:相當於,告知了引擎用UTF-8jsp,還response.setContentType(“text/html;charset=UTF-8”);

        isELIgnored:告知引擎,是否忽略EL表示式。預設值是false,不忽略。 

            總結:屬性眾多。一般都用的預設值。最簡單的形式:<%@ page  pageEncoding="UTF-8"%>

      include

            屬性:file,以”/”開頭,就代表著當前應用。<%@ include file="/public/includefiles/allincludefiles.jsp"%>

      taglib:引入外部的標籤。

            <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  uri:外部的標籤的uri地址,好比名稱空間;prefix:字首。

六、JSP中的轉發和包含

1、轉發:利用JSP的內建標籤來處理(jsp開頭的標籤)(jsp:forward)

<jsp:forward page="/10forward.jsp"></jsp:forward>

轉發後當前訪問地址不會變

等價於request.getRequestDispatcher(“/10forward.jsp”).forward(request,respone);

    引數:不能單獨使用

      向目標傳遞請求引數(傳遞請求引數只認jsp:param,別的包含註釋都是不認的)

      

           即地址:當前專案/10forward.jsp/username=abc

2、包含:

靜態包含:<%@include%>

動態包含:<jsp:include page=””/>  (不推薦使用)

         包含生成的Servlet要注意,A包含B,那就生成AServlet,在AServlet裡面包含了B的內容在裡面,一共生成了一個Servlet

七、JSP的九個隱含物件:

JSP對應的Servletservice方法中的區域性變數

JSP隱含物件名稱

型別

備註

request

javax.servlet.http.HttpServletRequest

response

javax.servlet.http.HttpServletResponse

session

javax.servlet.http.HttpSession

page指令設定session是否存在

application

javax.servlet.ServletContext

config

javax.servlet.ServletConfig

page

javax.servlet.http.HttpServlet

當前jsp對應Servlet的例項引用

exception

java.lang.Throwable

page指令設定exception是否存在

out

javax.servlet.jsp.JspWriter

字元輸出流。相當於PrintWriter

pageContext

javax.servlet.jsp.PageContext

八、JSP中的異常處理

1、執行時異常:找JSP對應的Servlet原始碼。

2、出現的錯誤(語法不對)


直接看頁面的提示

九、四大域物件

實際開發中:存放資料的。

域物件從小到大:

1、PageContext:頁面範圍,最小。開發中很少用。

  ⑴生命週期:當對JSP的請求開始,當相應結束時銷燬。

  ⑵作用範圍:整個JSP頁面,是四大作用域中最小的一個。

  ⑶作用:獲取其他八大隱式物件,可以認為是一個入口物件。

         獲取所有域中的資料。

         跳轉到其他資源。

  PageContext本身是一個域(範圍)物件,還能操作其他3個域物件中的屬性

  ●頁面範圍:

    void setAttribute(String name,Object value);

    void removeAttribute(String name);

    Object getAttribute(String name);

  ●操作其他域物件中的屬性:

    void setAttribute(String name,Object value,int scope);

    void removeAttribute(String name,int scope);

    Object getAttribute(String name,int scope);

  其中int scope:常量,PageContext的取值:PAGE_SCOPE(頁面)REQUEST_SCOPE(請求)、SESSION_SCOPE(會話)和APPLICATION_SCOPE(應用)

  ●在四個範圍中依次查詢指定名稱物件的方法:

    PAGE(頁面)REQUEST(請求)、SESSION(會話)和APPLICATION(應用)

          Object findAttribute(String name);

  ⑷PageContext獲取其他八個JSP隱含物件(自定義標籤時用)

      PageContext.getRequest();

      getServletContext();

      getServletConfig();

      getException();

      get等等....

  ⑸PageContext提供轉發和包含的簡易方法

      request.getRequestDispatcher(“/10forward.jsp”).forward(request,respone);

   等價於PageContext.forward(“/10forward.jsp”);

     或者

     pageContext.include(String url);

2ServletRequest:請求範圍。不同的資源,只有用轉發。

  ⑴生命週期:在Service方法呼叫前由伺服器建立,傳入service發那個發。整個請求結束,request生命結束。

  ⑵作用範圍:整個請求鏈(請求轉發也存在)(一次請求)

  ⑶作用:在整個請求鏈中共享資料,經常用到:在servlet中處理好的資料交給JSP顯示,此時引數就可以放在Request域中。

3、HttpSession:會話範圍。多次請求共享資料,但不同的客戶端不能共享。

  ⑴生命週期:在第一次呼叫request.getSession()方法時,伺服器會檢查是否已經有對應的session,如果沒有就在記憶體中建立一個session並返回。當一段時間內session沒有被使用(預設為30分鐘),則伺服器會銷燬該session。如果伺服器非正常關閉,沒有到期的session也會跟著銷燬。如果呼叫session提供的invalidate(),可以立即銷燬session

  ⑵作用範圍:一次會話。

4、ServletContext:應用範圍,最大。儘量少用,用時要做同步處理。

  ⑴生命週期:當WEB應用被載入進容器建立代表整個WEB應用的ServletContext物件,當伺服器關閉或WEB應用被移除時,ServletContext物件跟著被銷燬。

  ⑵作用範圍:整個WEB應用。

  ⑶在不同Servlet之間轉發、讀取資原始檔

十、JSP開發的最佳實踐

  Servlet:擅長寫Java程式碼邏輯,不擅長輸出html的內容。開發中作為:控制器。

  JSP:不擅長寫Java程式碼邏輯,擅長顯示結果。開發中作為:檢視(顯示結果)