jsp基本語法總結

一,用jsp腳本元素調用java代碼css

1,jsp表達式的應用html

jsp表達式將值直接插入到輸出中:java

<%= Java Expression %>     表明一個值ios

隱式對象,在使用jsp表達式的時候:express

<%= request.getParameter("testParam") %>服務器

<%= session.getId() %>session

<%= application.getServerInfo() %>app

request,session,application都是隱式對象dom

XML程序設計者可使用下列的語法替代jsp表達式jsp

<jsp:expression>Java Expression</jsp:expression>



2,編寫scriptlet(有效java代碼段)

 <% Java Code %>

能夠完成單獨使用表達式不能完成的任務,例如設置響應報頭和狀態,循環語句等

XML形式:

<jsp:scriptlet>Java Code</jsp:scriptlet>

1)一個示例:

 
 

<%
String bgColor
= request.getParameter("bgColor");
if ((bgColor == null) || (bgColor.trim().equals(""))) {
bgColor
= "WHITE";
}
%>

 
2)使用scriptlet將jsp頁面的某些部分條件話

複製代碼

 
 

//用一個隨機數將輸出條件話
//
html語句和java代碼穿插混合,java語句用<% %>包含起來!!

<% if (Math.random() < 0.5) { %>
<H1>Have a <I>nice</I> day!</H1>
<% } else { %>
<H1>Have a <I>lousy</I> day!</H1>
<% } %>

複製代碼


能夠看出,這樣的使用方式不利於代碼的閱讀,通常只將少許java代碼與html代碼混合,不然可讀性很差。



3,使用聲明


<%! Field or Method Definition %>

jsp聲明能夠將方法或字段的定義放在servlet類定義之中,_jspService方法以外!!! 

如下列一小段jsp片斷爲例,

複製代碼

 
 

1 <H1>Some Heading</H1>
2  //jsp聲明
3  <%!
4 private String randomHeading() {
5  return("<H2>" + Math.random() + "</H2>");
6 }
7  %>
8  <%= randomHeading() %>

複製代碼


這段jsp生成的servlet就可能會是下列片斷:(注意jsp轉化爲servlet後聲明的位置--servlet類定義之中,_jspService方法以外

複製代碼

 
 

1 public class xxxx implements HttpJspPage {
2
3  //jsp生成servlet後聲明的位置
4  private String randomHeading() {
5  return("<H2>" + Math.random() + "</H2>");
6 }
7
8  //servlet的輸出在此方法執行
9  public void _jspService(HttpServletRequest request,
10 HttpServletResponse response)
11 throws ServletException, IOException {
12 response.setContentType("text/html");
13 HttpSession session = request.getSession();
14 JspWriter out = response.getWriter();
15 out.println("<H1>Some Heading</H1>");
16 out.println(randomHeading());//能夠在此調用上述聲明
17  ...
18 }
19 ...
20 }

複製代碼


XML形式:

<jsp:declaration>Field or Method Definition</jsp:declaration>


聲明的例子:

複製代碼

 
 

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2  <HTML>
3  <HEAD>
4  <TITLE>JSP Declarations</TITLE>
5  <LINK REL=STYLESHEET
6 HREF="JSP-Styles.css"
7 TYPE="text/css">
8  </HEAD>
9  <BODY>
10  <H1>JSP Declarations</H1>
11  <%! private int accessCount = 0; %>//聲明,沒必要聲明爲static
12  <H2>Accesses to page since server reboot:
13  <%= ++accessCount %></H2>
14  </BODY></HTML>

複製代碼


客戶對同一servlet的多個請求只會產生多個線程,每個線程調用單一servlet的service方法,所以上述不用聲明爲static,每次訪問共享變量





二,控制所生成的servlet的結構:jsp page指令

jsp指令影響由jsp頁面生成的servlet的總體結構。

在jsp中,主要有三種類型的指令:page,include,taglib

page指令能夠放在文檔的任何地方,魚訊咱們經過類的導入,servlet超類的定製,內容類型的設定以及諸如此類的事務來控制servlet的結構。

include指令應該放置在文檔中但願插入文件的地方

taglib定義自定義的標記標籤,將在第二冊高級技術裏面講解

這一章來看page指令:


page指定能夠定義下面這些屬性(按使用頻度高低):import, contentType,pageEncoding, session, isELIgnored (JSP 2.0 only), buffer, autoFlush,info, errorPage, isErrorPage, isThreadSafe, language, extends

1,import屬性


指定jsp頁面轉換成servlet應該輸入的包()

<%@ page import="package.class1,...,package.classN" %>

import是page的屬性中惟一能夠在同一文檔中屢次出現的屬性。


2,contentType屬性和pageEncoding屬性


contentType屬性設置content-Type響應報頭,標明發送到客戶程序的文檔的MIME類型

<%@ page contentType="MIME-Type" %>

例如:<%@ page contentType="application/vnd.ms-excel" %>

一樣的,用下列方法也能夠設置MIME類型:<% response.setContentType("application/vnd.ms-excel"); %>

二者是有區別的,前者只用到jsp語法,然後者用到明確的java代碼;另外後者可以有條件的執行,而page指令不行(response.setContentType做爲java語句能夠放在條件中,根據條件來決定設置什麼樣的mime類型


pageEncoding屬性設置字符集;


3,session屬性


控制頁面是否參與HTTP會話:

<%@ page session="true" %>      <%-- 默認狀況是參與 --%>

<%@ page session="false" %>

對於高流量網站,使用session屬性能夠節省大量的服務器內存。


4,isELIgnored屬性


是否忽略jsp2.0表達式語言(jsp2.0 引入一種間接地表達式語言,後面將介紹)

<%@ page isELIgnored="false" %>

<%@ page isELIgnored="true" %>


5,buffer和autoFlush屬性


buffer屬性指定out變量使用的緩衝區大小:

<%@ page buffer="32kb" %>

<%@ page buffer="none" %>

aotoFlush屬性控制當緩衝區充滿以後,應該自動清空緩衝區(默認)仍是在緩衝區溢出後拋出異常:

<%@ page autoFlush="true" %>     <%-- Default --%>

<%@ page autoFlush="false" %>


6,info屬性


定義一個能夠再servlet中經過getServletInfo方法獲取的字符串:

<%@ page info="Some Message" %>


7,errorPage屬性和isErrorPage屬性


errorPage屬性指定一個jsp頁面,該頁面處理當前頁面拋出但未被捕獲的任何異常:

<%@ page errorPage="Relative URL" %>

指定的頁面能夠由Exception變量訪問拋出的異常


isErrorPage表示當前頁是否能夠做爲其餘jsp頁面的錯誤頁面:(默認不能夠)

<%@ page isErrorPage="true" %>

<%@ page isErrorPage="false" %> <%-- Default --%>


8,isThreadSafe屬性


通常不用,顯式同步具體的代碼段便可


9,extends屬性


指定jsp頁面生成的servlet的超類:

保留使用


10,language屬性


指定頁面使用的腳本語言

<%@ page language="java" %>

目前來講java是默認選擇也是惟一選擇


11,指令對應的XML語法

<jsp:directive.directiveType attribute="value" />

例如:<%@ page import="java.util.*" %>

的XML等價形式:

<jsp:directive.page import="java.util.*" />




三,在jsp頁面中包含文件和applet


在jsp中,主要有3種功能能夠將外部內容包含到jsp文檔:

jsp:include   動做:在請求期間將其餘頁面的輸出包含進來,它包含次級頁面的輸出,而非次級頁面的實際代碼。

include指令。  在主頁面轉換成servlet以前,將jsp代碼插入其中。

jsp:plugin動做。將java插件的applet插入到jsp頁面中。

1,在請求期間包含頁面:jsp:include動做


1)假定你有一系列的頁面,每個擁有相同的導航欄,聯繫信息或者腳註,一般的解決防範是使用某種服務器端包含機制,在頁面請求時將公共塊插入到其中。

用page屬性來指定jsp:include動做包含的頁面的路徑:

<jsp:include page="bios/cheng-yinghua.jsp" />

jsp:include動做只有上述的XML語法形式,沒有對應的jsp語法


2)flush屬性


jsp:include動做還有一個次級屬性,指定在將頁面包含進來以前是否清空主頁面的輸出流(默認是false)

<jsp:include page="relative-path-to-resource" flush="true" />


3)jsp:include動做的例子
 

例如以前作過的招辦系統左側導航目錄,在每一個頁面中都會出現,能夠寫一個次級頁面


4)jsp:param元素:增長請求參數

被包含的頁面與最初請求的頁面使用相同的請求對象,若是你想看到的請求參數與主頁不一樣,增長或者替換原來主頁中的參數,能夠在 jsp:include動做中使用這個元素:


 
 

<jsp:include page="/fragments/StandardHeading.jsp">
//在次級頁面中添加新的元素或者替換主頁的元素
<jsp:param name="bgColor" value="YELLOW" />
</jsp:include>


這樣,若是原頁面沒有背景顏色,你能夠在次級頁面裏面添加,就跟主頁面獲得不同的結果了



2,在頁面跳轉期間包含文件:include指令

<%@ include file="Relative URL" %>

XML形式:

<jsp:directive.include file="..." />


區別部分截圖:

2011041822352953.png


include指令帶來的維護問題---它會影響主頁面,它容許包含的文件中含有影響主頁面的jsp代碼

一個應用,在下列例子中,咱們會用include指令來代替include動做:

假定有這樣一個jsp頁面,它含有訪問計數和對當前頁面最近訪問的相關信息。再次,有好幾個主頁面都要使用這種類型的腳註,咱們但願每一個使用這個腳 注頁面的主頁面都維護各自獨立的訪問計數,咱們不但願腳註的jsp成爲一個單獨的servlet,而但願它成爲主頁面的產生的servlet的一部分,因 此須要include指令。


複製代碼

 
 

1 //腳註jsp
2  <%@ page import="java.util.Date" %>
3  <%-- The following become fields in each servlet that
4 results from a JSP page that includes this file. --%>
5  <%!
6 private int accessCount = 0;
7 private Date accessDate = new Date();
8 private String accessHost = "<I>No previous access</I>";
9 %>
10 <P>
11 <HR>
12 This page &copy; 2003
13 <A HREF="http//www.my-company.com/">my-company.com</A>.
14 This page has been accessed <%= ++accessCount %>
15 times since server reboot. It was most recently accessed from
16 <%= accessHost %> at <%= accessDate %>.
17 <% accessHost = request.getRemoteHost(); %>
18 <% accessDate = new Date(); %>

複製代碼



主頁面:


複製代碼

 
 

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <HTML>
3 <HEAD>
4 <TITLE>Some Random Page</TITLE>
5 <META NAME="author" CONTENT="J. Random Hacker">
6 <META NAME="keywords"
7 CONTENT="foo,bar,baz,quux">
8 <META NAME="description"
9 CONTENT="Some random Web page.">
10 <LINK REL=STYLESHEET
11 HREF="JSP-Styles.css"
12 TYPE="text/css">
13 </HEAD>
14 <BODY>
15 <TABLE BORDER=5 ALIGN="CENTER">
16 <TR><TH CLASS="TITLE">
17 Some Random Page</TABLE>
18 <P>
19 Information about our products and services.
20 <P>
21 Blah, blah, blah.
22 <P>
23 Yadda, yadda, yadda.
24 <%@ include file="/WEB-INF/ContactSection.jsp" %>//include指令
25 </BODY></HTML>

複製代碼


2011041822463163.png

下面的腳註是主頁面servlet的一部分,被獨立維護,(若是有另外一個主頁面也引用這個腳註的話,互不影響)3,包含使用java插件的applet

相關文章
相關標籤/搜索