JSP規範、Servlet關係、基礎

淺然_發表於2018-04-01

部落格目錄

1、什麼是JSP
2、JSP與Servlet的關係
3、JSP規範
4、JSP註釋、程式碼塊、宣告語句塊、表示式塊
5、JSP基礎總結

一、什麼是JSP

  1. JSP全稱:Java Server Pages
  2. JSP是在傳統靜態網頁HTML中插入Java程式碼片段和JSP標籤的一直檔案,字尾為.jsp
  3. 因為Java是跨平臺的,所以JSP也是跨平臺

二、JSP與Servlet的關係

JSP檔案的本質是Servlet,只不過JSP與Servlet不同的是,JSP是專門用於進行資料展示的Servlet,其有特殊的寫法。而普通的Servlet是用於完成業務邏輯處理的。由於Servlet是執行在單例多執行緒環境下的,所以JSP同樣也是執行在單例多執行緒環境下


三、JSP規範

將JSP頁面翻譯為Servlet的過程,是由Tomcat完成的。在Tomcat內建了一個JSP翻譯引擎,當第一次訪問該JSP頁面時,翻譯引擎會將JSP頁面翻譯為Servlet,例如JSP頁面中的HTML,CSS,JavaScript,及普通文字均被翻譯到out.write中(例如下圖就是JSP編譯後的Servlet),Tomcat中的JSP翻譯引擎,就遵循了這個JSP規範

這裡寫圖片描述

這裡寫圖片描述

如何找到JSP編譯成Java後的檔案

在Tomcat目錄下

work>Catalina>localhost>專案名稱>org>apache>jsp>.java檔案


四、JSP註釋、程式碼塊、宣告語句塊、表示式塊

1、JSP註釋<%– –%>

  1. 翻譯引擎會將HTML註釋翻譯到Service方法中的out.write()中,而JSP註釋會被忽略成一個\t
  2. 在客戶瀏覽器檢視原始碼時,HTML註釋是可以檢視到的,但JSP註釋是無法檢視的,所以如果是很重要的註釋可以寫成JSP註釋
圖1是JSP註釋和HTML註釋的區別
圖2是HTML註釋被翻譯到了Service方法中,而JSP註釋被忽略成一個\t

圖1
這裡寫圖片描述


圖2

這裡寫圖片描述



2、JSP程式碼塊<% %>

<%@ 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>

    <!-- JSP程式碼塊 -->
    <%
        String name="linjie";
    %>
    <%
        System.out.println(name);
        System.out.println("這是Java程式碼塊");
    %>

</body>
</html>
  1. 可以寫在任意位置
  2. 每個<% %>都是聯絡的,因為都翻譯到一個Service中
  3. <% %>中宣告變數不能加許可權訪問控制符,因為<% %>會被翻譯到Service方法中,而方法中的變數不能用許可權訪問控制符
  4. <% %>中不能定義方法,因為被翻譯到Service方法中又有方法,在Java中不允許方法的巢狀
  5. <% %>中不能定義靜態語句塊:static{},方法中不能有靜態程式碼塊,靜態程式碼塊應該在類中



3、JSP宣告語句塊<%! %>

<%@ 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>

    <!--JSP宣告語句塊 -->
    <%!
        public void show()
        {
            System.out.println("Java宣告語句塊");
        }
    %>
    <%
        show();
    %>

</body>
</html>
  1. JSP宣告語句塊被翻譯的位置改變了:翻譯到了類中,成為了成員變數、成員方法,可以修改(但會造成執行緒安全問題,因為Servlet是單例多執行緒的,如果有可修改的成員變數,則會引起執行緒安全問題,所以一般Servlet不加成員變數)



4、JSP表示式塊<%= %>

<%@ 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>
    <%
        String name="linjie";
    %>

    <!-- JSP表示式塊 -->
    <%=name %>
</body>
</html>
  1. 會在瀏覽器顯示name的值
  2. 被翻譯到Service中out.print(name);
    這裡寫圖片描述

五、總結

1、JSP程式碼塊

  • <% %>
  • 不能寫方法、訪問控制符、靜態語句塊
  • 翻譯到Service方法中

2、JSP宣告語句塊

  • <%! %>
  • 能寫方法、訪問控制符、靜態語句塊
  • 翻譯到類中
  • 但由於Servlet是單例多執行緒,其中如果加了可修改成員變數會引起執行緒安全問題

3、JSP表示式塊

  • <%= %>
  • 沒有分號
  • <%=name %>:即在瀏覽器中顯示name的值
  • 被翻譯到Service方法中:out.print(name);

相關文章