JSP規範、Servlet關係、基礎
部落格目錄
1、什麼是JSP
2、JSP與Servlet的關係
3、JSP規範
4、JSP註釋、程式碼塊、宣告語句塊、表示式塊
5、JSP基礎總結
一、什麼是JSP
- JSP全稱:Java Server Pages
- JSP是在傳統靜態網頁HTML中插入Java程式碼片段和JSP標籤的一直檔案,字尾為.jsp
- 因為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註釋<%– –%>
- 翻譯引擎會將HTML註釋翻譯到Service方法中的out.write()中,而JSP註釋會被忽略成一個\t
- 在客戶瀏覽器檢視原始碼時,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>
- 可以寫在任意位置
- 每個<% %>都是聯絡的,因為都翻譯到一個Service中
- <% %>中宣告變數不能加許可權訪問控制符,因為<% %>會被翻譯到Service方法中,而方法中的變數不能用許可權訪問控制符
- <% %>中不能定義方法,因為被翻譯到Service方法中又有方法,在Java中不允許方法的巢狀
- <% %>中不能定義靜態語句塊: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>
- 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>
- 會在瀏覽器顯示name的值
- 被翻譯到Service中out.print(name);
五、總結
1、JSP程式碼塊
- <% %>
- 不能寫方法、訪問控制符、靜態語句塊
- 翻譯到Service方法中
2、JSP宣告語句塊
- <%! %>
- 能寫方法、訪問控制符、靜態語句塊
- 翻譯到類中
- 但由於Servlet是單例多執行緒,其中如果加了可修改成員變數會引起執行緒安全問題
3、JSP表示式塊
- <%= %>
- 沒有分號
- <%=name %>:即在瀏覽器中顯示name的值
- 被翻譯到Service方法中:out.print(name);
相關文章
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- Servlet 規範Servlet
- Servlet 規範和 Servlet 容器Servlet
- 從規範看ECMAScript(一):規範基礎
- jsp基礎-初識jspJS
- Python基礎:編碼規範(4)Python
- 【Java基礎】ServletJavaServlet
- 設計模式-UML關係基礎設計模式
- JSP基礎知識JS
- 前端基礎(四):前端國際規範收集前端
- 03 AMD規範的基礎使用詳解
- 大資料基礎(一)——關係+文章大資料
- jsp隱式物件-Servlet物件JS物件Servlet
- jsp進階教程和ServletJSServlet
- 基於jsp和servlet簡單的java web開發(idea)JSServletJavaWebIdea
- Day91.Servlet基本內容① -Servlet、jsp和表示式ServletJS
- Servlet基礎知識點整理Servlet
- Servlet基礎教程之呼叫流程Servlet
- JavaWeb開發基礎Servlet APIJavaWebServletAPI
- Jsp+JavaBean模式,Jsp+Servlet模式,MVC模式介紹JSJavaBean模式ServletMVC
- [譯]前端基礎知識儲備——Promise/A+規範前端Promise
- 零基礎快速入門:java的命名規範Java
- Jsp和Servlet有什麼區別?JSServlet
- maven中新增Servlet和jsp依賴MavenServletJS
- java基礎學習:JavaWeb之ServletJavaWebServlet
- Servlet基礎教程之生命週期Servlet
- JavaWeb基礎總結:Servlet專題JavaWebServlet
- java基礎學習:JavaWeb之JSPJavaWebJS
- 【JS基礎】一文看懂前端模組化規範JS前端
- tomact和javaee、jsp、servlet對應的版本MacJavaJSServlet
- jsp+servlet登入註冊頁面JSServlet
- 小米商城專案(JSP+Servlet專案)JSServlet
- Web 基礎17 JSP之JSTL入門WebJS
- python基礎1 - 多檔案專案和程式碼規範Python
- 開發基於JSP Servlet JavaBean的網上交易系統(含原始檔)JSServletJavaBean
- JS基礎-函式、物件和原型、原型鏈的關係JS函式物件原型
- Java基礎:如何在IDEA中檢視依賴關係JavaIdea
- Go基礎:路徑、檔名和包名的關係Go