JSP學習筆記(1)——Jsp指令、動作元素和內置對象


簡單來說,javaweb技術就是讓服務器端能夠執行Java代碼,之后返回數據給客戶端(瀏覽器)讓客戶端顯示數據

jsp頁面中可以嵌套java代碼(java小腳本)和嵌套Web前端(html,css,js)來顯示數據。

服務器解析一個jsp,其實就是把jsp中的java代碼編譯並執行,之后再返回一個String,String包含着html等Web前端數據,瀏覽器(客戶端)就可以像平常打開靜態網頁一樣,接受靜態網頁數據(html),解析並顯示給用戶。

  1. 指令 <%@ %>
  2. 腳本 <% %>
  3. 聲明 <%! %>
  4. 表達式 <%= %>
  5. 注釋 <%-- --%> 服務器端才能看見,客戶端看不見
<%
	//這里面可以寫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");//取出來需要強制轉型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM