jsp個人筆記

一、jsp簡介

JSP全稱Java Server Pages,是一種動態網頁開發技術。JSP 與 PHP、ASP、ASP.NET 等語言類似,是運行在服務端的語言。JSP 技術是以 Java 語言作爲腳本語言的一種使軟件開發者可以響應客戶端請求,而動態生成 HTML、XML 或其他格式文檔的Web網頁的技術標準。它使用JSP標籤在HTML網頁中插入Java代碼。標籤通常以<%開頭以%>結束,如下JSP的helloworld程序:

<html>
    <head>
           <title>第一個 JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("Hello World!");
           %>
    </body>
</html>

JSP是一種Java servlet,主要用於實現Java web應用程序的用戶界面部分,它通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。JSP標籤有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。

二、開發環境搭建

建議使用 Eclipse 來搭建 JSP 開發環境,步驟:
1、配置Java開發工具(JDK);
2、下載安裝eclipse;
3、Tomcat 下載安裝;
4、將 Tomcat 和 Eclipse 相關聯。
每一步網上都有詳細教程,本文不再贅述,自行百度即可(建議:任何搭建環境的過程中都可能會遇到很多問題,多多動動搜索引擎查查看有沒有朋友遇到同樣的問題看看人家是怎麼解決的,可能一個問題你查好幾篇博文都解決不了,這時候就需要我們多點耐心多點思考,相信最終你會解決的)

三、JSP 生命週期

JSP生命週期就是從創建到銷燬的整個過程,類似於servlet生命週期,區別在於JSP生命週期還包括將JSP文件編譯成servlet。
JSP生命週期中所走過的幾個階段:
1、編譯階段:
servlet容器編譯servlet源文件,生成servlet類。當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。
編譯的過程包括三個步驟:
a.解析JSP文件。
b.將JSP文件轉爲servlet。
c.編譯servlet。
2、初始化階段:
加載與JSP對應的servlet類,創建其實例,並調用它的初始化方法。容器載入JSP文件後,它會在爲請求提供任何服務前調用jspInit()方法。如果需要執行自定義的JSP初始化任務,複寫jspInit()方法就行了。一般來講程序只初始化一次,servlet也是如此。通常情況下可以在jspInit()方法中初始化數據庫連接、打開文件和創建查詢表。
3、執行階段:
調用與JSP對應的servlet實例的服務方法。這一階段描述了JSP生命週期中一切與請求相關的交互行爲,直到被銷燬。
當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。該方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作爲它的參數,例如以下代碼:

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服務端處理代碼
}

_jspService()方法在每個request中被調用一次並且負責產生與之相對應的response,並且它還負責產生所有7個HTTP方法的迴應,比如GET、POST、DELETE等等。
4、銷燬階段:
調用與JSP對應的servlet實例的銷燬方法,然後銷燬servlet實例。JSP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。
jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當需要執行任何清理工作時複寫jspDestroy()方法,比如釋放數據庫連接或者關閉文件夾等等。。
jspDestroy()方法的格式如下:

public void jspDestroy()
{
   // 清理代碼
}

四、JSP 語法

1、腳本程序
腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。腳本程序的語法格式:

<% 代碼片段 %>

也可以編寫與其等價的XML語句,如:

<jsp:scriptlet>
   代碼片段
</jsp:scriptlet>

任何文本、HTML標籤、JSP元素必須寫在腳本程序的外面。請看如下代碼:

<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("your IP is:" + request.getRemoteAddr());
%>
</body>
</html>

效果如下:
在這裏插入圖片描述
上面那段代碼一使用中文就會出現亂碼,如果我們要在頁面正常顯示中文,我們需要在 JSP 文件頭部添加以下代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

2.JSP聲明
一個聲明語句可以聲明一個或多個變量、方法,供後面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然後才能使用它們。
JSP聲明的語法格式:

<%! declaration; [ declaration; ]+ ... %>

如下:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

3.JSP表達式
一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然後插入到表達式出現的地方。由於表達式的值會被轉化成String,所以我們可以在一個文本行中使用表達式而不用去管它是否是HTML標籤。表達式元素中可以包含任何符合Java語言規範的表達式,但是不能使用分號來結束表達式。
JSP表達式的語法格式:

<%= 表達式 %>

請看如下代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSP表達式練習(runoob.com)</title>
</head>
<body>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html> 

結果如下:
在這裏插入圖片描述
4.JSP註釋與JSP指令

JSP註釋語法格式:

<%-- 該部分註釋在網頁中不會被顯示--%> 

附表一張:
在這裏插入圖片描述
JSP指令語法格式:

<%@ directive attribute="value" %>

三種指令標籤:
在這裏插入圖片描述
5.JSP行爲

JSP行爲標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,爲Java插件產生相關的HTML等等。
行爲標籤只有一種語法格式,它嚴格遵守XML標準:

<jsp:action_name attribute="value" />

行爲標籤基本上是一些預先就定義好的函數,下面羅列出了一些可用的JSP行爲標籤:
jsp:include 用於在當前頁面中包含靜態或動態資源
jsp:useBean 尋找和初始化一個JavaBean組件
jsp:setProperty 設置 JavaBean組件的值
jsp:getProperty 將 JavaBean組件的值插入到 output中
jsp:forward 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象
jsp:plugin 用於在生成的HTML頁面中包含Applet和JavaBean對象
jsp:element 動態創建一個XML元素
jsp:attribute 定義動態創建的XML元素的屬性
jsp:body 定義動態創建的XML元素的主體
jsp:text 用於封裝模板數據
6.JSP隱含對象
JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介如下:
request HttpServletRequest類的實例
response HttpServletResponse類的實例
out PrintWriter類的實例,用於把結果輸出至網頁上
session HttpSession類的實例
application ServletContext類的實例,與應用上下文有關
config ServletConfig類的實例
pageContext PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問
page 類似於Java類中的this關鍵字
Exception Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象
7.一些語句
if else語句格式:

<% if (day == 1 | day == 7) { %>
      <p>今天是週末</p>
<% } else { %>
      <p>今天不是週末</p>
<% } %>

swith語句格式:

<% 
switch(day) {
case 0:
   out.println("星期天");
   break;
case 1:
   out.println("星期一");
   break;
case 2:
   out.println("星期二");
   break;
case 3:
   out.println("星期三");
   break;
case 4:
   out.println("星期四");
   break;
case 5:
   out.println("星期五");
   break;
default:
   out.println("星期六");
}
%>

for循環舉例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! int fontSize; %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>for循環(runoob.com)</title>
</head>
<body>
<h3>For 循環實例</h3>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
   <font color="blue" size="<%= fontSize %>">
    菜鳥先飛
   </font><br />
<%}%>
</body> 
</html> 

效果如下:
在這裏插入圖片描述
上面的for循環也可改用while循環核心代碼如下:

<h3>While 循環實例</h3>
<%while ( fontSize <= 3){ %>
   <font color="green" size="<%= fontSize %>">
    菜鳥先飛
   </font><br />
<%fontSize++;%>
<%}%>

未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章