JSP學習筆記(1)——Jsp指令、動作元素和內建物件
簡單來說,javaweb技術就是讓伺服器端能夠執行Java程式碼,之後返回資料給客戶端(瀏覽器)讓客戶端顯示資料
jsp頁面中可以巢狀java程式碼(java小指令碼)和巢狀Web前端(html,css,js)來顯示資料。
伺服器解析一個jsp,其實就是把jsp中的java程式碼編譯並執行,之後再返回一個String,String包含著html等Web前端資料,瀏覽器(客戶端)就可以像平常開啟靜態網頁一樣,接受靜態網頁資料(html),解析並顯示給使用者。
- 指令 <%@ %>
- 指令碼 <% %>
- 宣告 <%! %>
- 表示式 <%= %>
- 註釋 <%-- --%> 伺服器端才能看見,客戶端看不見
<%
//這裡面可以寫java程式碼
%>
<%!
//這裡面只能寫變數申明,不能寫java程式碼
%>
//一般這裡與html標籤聯用,輸出資料
<%= %>
指令:
page指令
page指令,主要用於jsp頁面的設定
屬性 | 描述 |
---|---|
contentType | 編碼(設定為UTF-8,防止中文出現亂碼顯示) |
language | 定義語言(java) |
ErrorPage="xx.jsp" | 當前頁面出現異常,跳轉到處理異常的jsp頁面 |
isErrorPage="true" | true,即為當前的頁面是處理錯誤的頁面,可以使用隱式物件獲取到資訊excetion.getMessage() |
下面的程式碼,就是index.jsp
頁面出現錯誤之後,就會跳轉到處理異常的介面catch_error.jsp
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="catch_error.jsp" %> <html> <head> <title>fitsr jsp</title> </head> <body> <% int a=10; int result = a/0; out.write("<h1>"+result+"</h1>"); %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>處理異常</title>
</head>
<body>
<%
String message = exception.getMessage();
out.write("<h1>錯誤資訊:" + message + "</h1>");
%>
</body>
</html>
include指令
包含其他檔案,如引入一個jsp頁面或者是html頁面
target指令
用來引入標籤庫的定義(JSTL標籤),後面補充。
Jsp動作元素(Jsp行為)
說明
本質上,就是定義的一些函式。
JSP行為標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個檔案,重用JavaBean元件,引導使用者去另一個頁面,為Java外掛產生相關的HTML等等.
格式
<jsp:action_name attribute="value" />
常用
語法 | 描述 |
---|---|
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 | 用於封裝模板資料 |
參考地址 菜鳥 Jsp動作元素
jsp:userBean
建立一個Bean例項,如果存在就不會建立
<jsp:userBean id="" class="" scope="">
</jsp:userBean>
之後可以在java指令碼中,使用定義的bean,id就是變數名
<jsp:setProperty name="" property="" value="" >
</jsp:setProperty>
name是變數名(上面jsp:userBean標籤的id),value中的數值會自動轉型為屬性對應的型別
<!-- 相當於請求轉發 -->
<jsp:forword page="">
</jsp:forword>
<!-- 傳參-->
<jsp:forword page="">
<jsp:param name="" value=""/>
</jsp:forword>
jsp:include 和指令<% @include 的區別
指令<% @include 的jsp頁面不會被單獨的轉譯成java檔案和編譯成class檔案,不允許存在相同的變數
jsp:include 的jsp頁面會被單獨地轉譯成java檔案和編譯成class檔案,允許存在相同的變數
內建物件(隱式物件)
九大隱式物件
物件 | 描述 |
---|---|
request | HttpServletRequest類的例項 |
response | HttpServletResponse類的例項 |
out | PrintWriter類的例項,用於把結果輸出至網頁上 |
session | HttpSession類的例項 |
application | ServletContext類的例項,與應用上下文有關 |
config | ServletConfig類的例項 |
pageContext | PageContext類的例項,提供對JSP頁面所有物件以及名稱空間的訪問 |
page | 類似於Java類中的this關鍵字 |
Exception | Exception類的物件,代表發生錯誤的JSP頁面中對應的異常物件 |
這裡面九大隱式物件,常用的就是前四個。可以直接在JSP中的指令碼,宣告和表示式中使用(<% %>
<%= %>
)
request物件
(瀏覽器)客戶端發出請求,就會建立一個request物件
request物件是javax.servlet.http.HttpServletRequest 類的例項
每當客戶端請求一個JSP頁面時,JSP引擎就會製造一個新的request物件來代表這個請求。
request物件提供了一系列方法來獲取HTTP頭資訊,cookies,HTTP方法等等。
rquest還可以獲得表單提交之後傳來的引數值
//獲得表單中的name="username"的標籤內容
String name = request.getParameter("username");
//設定編碼,防止出現中文亂碼
request.setCharacterEncoding("utf-8");
參考連結 Jsp 客戶端請求
response物件
response物件是javax.servlet.http.HttpServletResponse類的例項。
當伺服器建立request物件時會同時建立用於響應這個客戶端的response物件。
response物件也定義了處理HTTP頭模組的介面。通過這個物件,開發者們可以新增新的cookies,時間戳,HTTP狀態碼等等。
out物件
out物件是 javax.servlet.jsp.JspWriter 類的例項,用來在response物件中寫入內容或者是當前頁面直接輸出內容
某個jsp檔案,下面的程式碼就是表示該jsp檔案開啟之後,瀏覽器會顯示hello world
<%
out.print("hello world");
//輸出一級標題
out.print("<h1>hello</h1>");
//實現換行
out.print("hello<br>");
%>
雖然有println方法,但是換行在輸出後面使用<br>
標籤
服務端可以使用out物件的write
或者是print
方法,向客戶端返回資料
session物件
每當建立一個會話(即瀏覽器訪問當前網站,不關閉瀏覽器就是一個會話),就會產生一個session物件
一般存放使用者登入資訊,重定向之後的session存放的資料不會丟失
web.xml中設定session的有效時長,預設是30分鐘
<session-config>
<timeout>單位為9分鐘
</session-config>
//session過期,就會新建,否則,就返回存在的session
getSenssion(true)
其他物件參考
作用域
pageContext,request,session,application都可以通過setAttribute和getAttribute方法來存放和取出資料
pageContetxt表示資料只能存放在當前頁面,打開了新頁面就無法獲得之前存放的資料
request比pageContext的範圍稍大一些,可以在新頁面獲取之前的存放的資料,不過,只能是請求轉發的新頁面才能獲得。
session和application範圍較大,存放的資料幾乎全部頁面都可以取出來。
request.setAttribute("user",user);
Object o = request.getAttribute("user");//取出來需要強制轉型