java–JSP
JSP看起來像HTML,其中HTML代碼叫做模板數據,java Scriptlet代碼叫做JSP元素。
JSP是一種Servlet,但與HttpServlet的工作方式又不太一樣。第一次訪問JSP時,tomcat會先將jsp轉為標準的java代碼,然后將java代碼編譯為class文件,最后運行class,以后訪問時,jsp不該動的情況下,會一直調用這個class。
看看轉化過的jsp java類文件源碼,可以發現,jsp和servlet基本沒啥區別。
JSP標簽
JSP腳本必須使用 <% %>括起來,語句必須遵循java語法。
<html>
<body>
<%
System.out.println("aa");
%>
</body>
</html>
JSP輸出
在servlet中,輸出語句是 out.println(),這里jsp中的等效語法是 <%= %> 。
<html>
<body>
<%
int num = 10;
int result = 1;
for( int i = 1; i <= num; i++){
result*=i;
}
%>
數字<%= num %>的乘階是: <%= result %>
</body>
</html>
JSP注釋
在jsp元素中,可以使用java的標準注釋,也可以使用注釋標<%-- 我是注釋 –%>
JSP方法
所有<% %>標簽都會被原封不動的翻譯為servlet中doGet這樣的方法中,在方法中是無法定義方法的。
而<%! %>標簽,可以方便的定義自己的方法,它會被翻譯在默認方法外。
<%!
private int x=0;
public String getX(){
return x+"";
}
%>
<%
number=getX();
%>
數字<%= number %>
JSP指令
jsp指令用來聲明JSP頁面的一些屬性等,例如編碼方式,文檔類型。。。格式 <%@ 指令 屬性%>
page指令
用來聲明jsp頁面的屬性。
<%@ page language="java" contentType="text/html"; charset=utf-8 %> <%-- 多個屬性用;分割 --%> <%-- 也可以這樣寫 ,一個page指令寫一個屬性 --%> <%@ page pageEncoding="UTF-8" %> <%@ page import="java.util.*" %>
page指令的常見屬性( jsp 2.1規范)
| 屬 性 名 稱 | 取 值 范 圍 | 描 述 |
|
language |
java |
指明解釋該jsp文件時采用的語言。一般為java,默認為java。 |
|
extends |
任何類的全名 |
指明編譯該jsp文件時繼承哪個類。jsp為servlet,因此當指明繼承普通類時需要實現servlet的init、destroy等方法。 |
|
import |
任何包名,類名 |
引入包或類。與java中的import作用相同。一個import語句也可以引入多個類:
|
|
session |
true , false |
指明該jsp是否內置Session對象。默認為true,存儲Session對象 |
|
autoFlush |
true , false |
是否運行緩存,默認為true,使用out.println()輸出字符串,并不是立刻到達客戶端,暫時存在緩存里,等待程序執行完畢或者out.flus(),字符才發送到客戶端。 |
|
buffer |
none 或者
|
當autoFlush為true時,制定緩存大小。例如:
|
|
isThreadSafe |
true , false |
是否線程安全。默認為false,如果為ture,則運行多個線程同時運行該jsp程序,否則只一個線程運行,其它線程等待。 |
|
isErrorPage |
true , false |
指定本jsp是否為錯誤處理頁面。默認為false,如果為true,內置了一個Exception對象exception,可以直接使用 |
|
errorPage |
某個JSP頁面的
|
指明一個錯誤顯示頁面。如果該jsp拋出了一個未被捕捉的異常,則轉到指定的頁面。指定的頁面通常isErrorPage為true。 |
|
contentType |
有效地文檔類型 |
客戶端瀏覽器根據該屬性判斷文檔類型。例如:
|
|
info |
任意字符串 |
指明jsp信息。該信息可以通過 Servlet.getServletInfo()方法得到。 |
|
trimDirective
|
true , false |
是否去掉指令前后的空白字符。默認為false。
|
include指令
包含頁面。<%@ include file=”URL” %>
<%-- url是相對路徑 --%> <%@ include file="head.jsp" %> <body> </body> <%@ include file="foot.jsp" %>
這里的include是靜態引入,也就是說,tomcat會把引入的jsp編譯為一個class,最后運行的事整合后的servlet。
被引入的文件必須遵循JSP語法。
被引入的文件可以使用任意的擴展名,即使其擴展名是html,JSP引擎也會按照處理jsp頁面的方式處理它里面的內容,為了見明知意,JSP規范建議使用.jspf(JSP fragments)作為靜態引入文件的擴展名。
由于使用include指令將會涉及到2個JSP頁面,并會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能沖突(除了pageEncoding和導包除外)。
JSP標簽
JSP Actions,有人叫標簽,有人叫動作,有人叫行為,都是一回事。JSP標簽就是對常用的JSP功能的抽象的封裝,優點就是代碼少,方便維護,代碼美觀。JSP標簽有內置的標準標簽,也可以自定義標簽。這里只說說默認的標簽。
<jsp:include />標簽
不同于<%@ include %>,<jsp:include />屬于動態包含,也就是不編譯為一個class,而是在運行時分別獲取運行結果然后包含,等同于頁面包含了html,這段html這樣跳轉過去 request.getRequestDispatcher(“URL”).forward(request,response) 。
//flush指明,在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端。 <jsp:include flush="true" page="/head.jsp"></jsp:include> 這里是正文 <jsp:include flush="true" page="/foot.jsp"></jsp:include>
<jsp:forward />標簽
<jsp:param />標簽
頁面跳轉,等同于 request.getRequestDispatcher(“URL”).forward(request,response) 。<jsp:param />是轉發時攜帶的地址欄參數。
注意的是,轉發前不能向瀏覽器輸出內容,否則拋出IllegalStateException
<jsp:forward page="/login.jsp" > <jsp:param name="username" value="name"/> <jsp:param name="password" value="passwd"/> </jsp:forward>
<jsp:useBean />標簽
<jsp:setProperty />標簽
<jsp:getProperty />標簽
顧名思義,使用javaBean。格式是這樣的:
<jsp:useBean id=”beanId” class=”className” scope=”Value” />
id就是javaBean的變量名,class是完整類名,scope是作用域,有四個作用域:
page 該jsp內有效
request 當前request內有效
session 當前會話(用戶)有效
application web應用內有效
setProperty就是設置屬性
<jsp:setProperty name=”beanId” property=”p" value=”v” /> beanId就是以聲明的bean的變量名,property為屬性,value是值。
<jsp:setProperty name=”beanId” property=”*” /> 這里,是把request提交內容填充至bean,前提是這個bean必須有對應的屬性。
getProperty是獲取屬性值
<jsp:getProperty name=”beanId” property=”p" value=”v” /> 這個就不解釋了。
JSP九大隱藏對象
out --javax.servlet.jsp.JspWriter
request --javax.servlet.ServletRequest
response --javax.servlet.ServletResponse
config --javax.servlet.ServletConfig
session --javax.servlet.http.HttpSession
application --javax.servlet.ServletContext
page --javax.servlet.jsp.HttpJspPage 這個就等于 this
pageContext --javax.servlet.jsp.PageContext 這個很重要,它代表了jsp的運行環境,可以獲得這上面所有對象
exception --java.lang.Exception
JSP配置
<servlet> <!-- 轉換后的servlet的訪問名稱 --> <servlet-name>SimpleJspServlet</servlet-name> <!-- jsp文件 --> <jsp-file>/jsp/simple.jsp</jsp-file> </servlet> <!-- jsp映射 --> <servlet-mapping> <!-- 需要映射的jsp servlet --> <servlet-name>SimpleJspServlet</servlet-name> <!-- 映射地址 --> <url-pattern>/xxx/yyy.html</url-pattern> </servlet-mapping>
浙公網安備 33010602011771號