1. 程式人生 > 實用技巧 >3.servlet之jsp相關內容

3.servlet之jsp相關內容

1、JSP

1.是什麼

JSP 是簡 Servlet 編寫的一種技術, 它將 Java 程式碼和 HTML 語句混合在同一個檔案中編寫,只對網頁中的要動態產生的內容採用 Java 程式碼來編寫,而對固定不變的靜態內容採用普通靜態 HTML 頁面的方式編寫。

Java Server Page:Java 伺服器端網頁。在 HTML 頁面中編寫 Java 程式碼的頁面。

JSP 可以放置在 WEB 應用程式中的除了 WEB-INF 及其子目錄外的其他任何目錄中,JSP 頁面的訪問路徑與普通 HTML 頁面的訪問路徑形式也完全一樣。

2.第一個helloworld

新建一個 JSP 頁面, 在 body 節點內的 <% %> 即可編寫 Java 程式碼

<body>

    <% 
        Date date = new Date();
        System.out.print(date); 
    %>

</body>

3.JSP的執行原理

JSP 本質上是一個 Servlet

每個JSP 頁面在第一次被訪問時, JSP 引擎將它翻譯成一個 Servlet 源程式, 接著再把這個 Servlet 源程式編譯成 Servlet 的 class 類檔案.然後再由WEB容器(Servlet引擎)像呼叫普通Servlet程式一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程式。

4.JSP 頁面的隱含變數

隱含變數是沒有宣告就可以使用的物件。JSP頁面一共有 9 個隱含物件

public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config 
= null; JspWriter out = null; Object page = this; //... //使用 <% %> 編寫的程式碼在此位置.可以用到 request, response, pageContext, session //application, config, out, page 這 8 個隱含物件.(實際上還可以使用一個叫 exception 的隱含物件) }

①、request: HttpServletRequest 的一個物件

②、response: HttpServletResponse 的一個物件(在 JSP 頁面中幾乎不會呼叫 response 的任何方法.)

③、pageContext: 頁面的上下文, 是 PageContext 的一個物件;可以從該物件中獲取到其他 8 個隱含物件;也可以從中獲取到當前頁面的其他資訊.(學習自定義標籤時使用它)

④、session: 代表瀏覽器和伺服器的一次會話, 是 HttpSession 的一個物件;

⑤、application: 代表當前 WEB 應用.是 ServletContext 物件

⑥、config: 當前 JSP 對應的 Servlet 的 ServletConfig 物件(幾乎不使用);若需要訪問當前 JSP 配置的初始化引數, 需要通過對映的地址才可以.

對映 JSP:

  <servlet>
      <servlet-name>hellojsp</servlet-name>
      <jsp-file>/hello.jsp</jsp-file>
      <init-param>
          <param-name>test</param-name>
          <param-value>testValue</param-value>
      </init-param>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>hellojsp</servlet-name>
    <url-pattern>/hellojsp</url-pattern>      
  </servlet-mapping>

⑦、out:JspWriter 物件.呼叫 out.println() 可以直接把字串列印到瀏覽器上

⑧、page:指向當前 JSP 對應的 Servlet 物件的引用, 但為 Object 型別, 只能呼叫 Object 類的方法(幾乎不使用)

⑨、exception:在聲明瞭 page 指令的 isErrorPage="true" 時, 才可以使用

<%@ page isErrorPage="true" %>

作用域:pageContext, request, session, application(對屬性的作用域的範圍從小到大)

5.JSP表示式(expression)

JSP表示式(expression)提供了將一個 java 變數或表示式的計算結果輸出到客戶端的簡化方式,它將要輸出的變數或表示式直接封裝在<%= 和 %>之中。

//Java程式碼
<% Date date = new Date(); %>

//通過表示式獲取變數
<%= date.toString() %>

6.JSP指令碼片斷(scriptlet)

JSP指令碼片斷(scriptlet)是指巢狀在<% 和 %>之中的一條或多條Java程式程式碼。 多個指令碼片斷中的程式碼可以相互訪問。

<% 
    String ageStr = request.getParameter("age");
    Integer age = Integer.parseInt(ageStr);
    
    if(age >= 18){
%>
        成人。。。
<%
    }else{
%>
        未成人。。。
<%
    }
%>

7.JSP 宣告

JSP 宣告: JSP 宣告將 Java 程式碼封裝在<%!和 %>之中,它裡面的程式碼將被插入進 Servle t的 _jspService 方法的外面(在 JSP 頁面中幾乎從不這樣使用)

8.JSP註釋的格式

JSP註釋的格式:<%-- JSP 註釋 --%> <!-- HTML 註釋 -->
區別: JSP 註釋可以阻止 Java 程式碼的執行。

  //Java程式碼
  <br>
  <%
    Date date = new Date();
    String str = "";
  %>
  <%--
        str = "我是不會被執行的java程式碼";
  --%>
  str如果有值會被打印出來<%= str.toString() %>
  <br>
  <!--我是不會被列印的html程式碼-->
  //通過表示式獲取變數:
  <br>
  <%= date.toString() %>

2、和屬性相關的方法

1.相關的方法

void setAttribute(String name, Object o); //設定屬性
Object getAttribute(String name); //獲取指定的屬性
Enumeration getAttributeNames(); //獲取所有的屬性的名字組成的 Enumeration 物件
removeAttribute(String name); //移除指定的屬性

2.域物件和相關方法

pageContext, request, session, application 物件都有這些方法!這四個物件也稱之為域物件

pageContext   //屬性的作用範圍僅限於當前 JSP 頁面
request   //屬性的作用範圍僅限於同一個請求
session   //屬性的作用範圍限於一次會話: 瀏覽器開啟直到關閉稱之為一次會話(在此期間會話不失效)
application   //屬性的作用範圍限於當前 WEB 應用.。是範圍最大的屬性作用範圍, 只要在一處設定屬性, 在其他各處的 JSP 或 Servlet 中都可以獲取到
pageContext < request < session < application (對屬性的作用域的範圍從小到大)

3、請求的轉發和重定向

本質區別:請求的轉發只發出了一次請求, 而重定向則發出了兩次請求.

具體:

①、位址列

請求的轉發:位址列初次發出請求的地址
請求的重定向:位址列不再是初次發出的請求地址;位址列為最後響應的那個地址

②、request物件

請求轉發:在最終的 Servlet 中,request 物件和中轉的那個 request 是同一個物件
請求的重定向:在最終的 Servlet 中,request 物件和中轉的那個 request 不是同一個物件

③、資源

請求的轉發:只能轉發給當前 WEB 應用的的資源
請求的重定向:可以重定向到任何資源

④、" / "的作用

請求的轉發:" / " 代表的是當前 WEB 應用的根目錄
請求的重定向:" / " 代表的是當前 WEB 站點的根目錄