在tomcat環境搭建一文中為大家詳細的介紹了第一個JSP的程序——Hello World,大家都應該順利的完成了吧,以此為一個開端,希望大家在學習java EE的路上乘風破浪,不斷進步。今天,為大家介紹JSP基本語法。想要快速的學會一門語言,掌握其語法非常關鍵。這是根本。
一方面因為篇幅原因,另一方面我做此文的目的是做一個小的總結,幫助大家理清思路,擼一擼JSP基本語法。因此,在這篇博文上沒有小程序的例子。其實,JSP的本質就是java,只要你有一定的java基礎,JSP腳本段的語法與java一模一樣。熟記本文之后,相信你寫些JSP的小程序會很輕松。希望大家,能在看完本文之后,多寫些小程序。畢竟,編程的能力不是記憶一些理論知識就可以的,而是要多多動手實踐。
言歸正傳,語法是根本。總的來說,JSP基礎語法包括:兩種注釋類型、三個腳本元素、三個指令元素、八個動作指令。
JSP頁面的組成
JSP頁面包含JSP元素和Template data兩類。Template data是指JSP引擎不處理的部分,也就是<%%>以外的部分,例如代碼中的HTML標簽等,這些數據會直接傳送到客戶端的瀏覽器。
JSP元素則是值由JSP引擎直接處理的部分,這一部分必須符合JSP語法。JSP標簽是大小寫敏感的(HTML標簽不區分大小寫),腳本語法和指令語法則使用了傳統的語法。
兩種注釋類型
1.html注釋
<!-comment[<%=expression%>]-> //[]為可選
eg:
<!-This file dispalys <%=user%> login sreen>
2.jsp注釋
<%--這是一個jsp單行注釋--%> <%/*這是一個jsp多行注釋*/%>
三個腳本元素
1.申明:整個頁面的成員變量或方法
<%! int a=0;%>
2.表達式
<%=expression%>
"<%"和"="之間不要有空格,表達式必須能求值。
3.腳本段:java程序段
<% code fragment%>
JSP頁面可以在<%%>之間插入java程序段。一個JSP頁面可以有許多程序段,這些程序段將被JSP引擎按順序執行。
注意:<%! %>內的變量和方法是一個類內的變量和方法也就是頁面的成員變量和成員方法。聲明在<%%>內的變量是一個方法的變量也就是局部變量。這個地方我們不太好理解,可以查看Tomcat編譯成帶名稱中有“_jsp”的.java的文件,也就是servlet。我們可以查看JSP轉譯成的servelt,其路徑如下:
apache-tomcat-7.0.59\work\Catalina\localhost\yourwebapp\org\apache\jsp
我們可以看到一個叫_jspService的方法,所有JSP腳本段都在這個方法里。
為了區別他們:請看如下的計數器小程序counter.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head></head> <body> <%!int count = 0; synchronized void setCount() { count++; }; %> <h2> 歡迎閱讀本文 <h2> <br> 本文閱讀次數: <% setCount(); out.println(count); %> <br> i=0,計算i++= <% int i = 0; out.println(i++); %> </body> </html>
局部變量當方法調用完,就會在內存中被銷毀,所以i每次都為0,0++還是0。而count是頁面的成員變量,每訪問一次這個頁面,count就會+1,直到JSP引擎關閉。用synchronized關鍵詞修飾原因是:當多個用戶同時訪問這個頁面時,線程是安全的。
三個指令元素
1.page指令,僅僅import可以多個
eg:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.kl.bean.*" %>
contentType 屬性指定頁面響應的MIME類型和字符編碼
pageEncoding屬性用於指定JSP頁面字符編碼格式。
我的建議:都設置為UTF-8
2.include指令:在編譯階段就處理所需要的文件
<%@ include file="relativeURL"%>
3.taglib,聲明頁面的自定義標簽
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public"%>
八個動作
1.內部跳轉(請求轉發):<jsp:forward >
從一個jsp文件向另一個jsp文件傳遞一個包含用戶請求的request對象。標簽后的jsp腳本不會執行。
該語句實現頁面跳轉,並可攜帶相關參數,瀏覽器地址欄數據不改變,不會顯示參數信息。
重定向:重定向行為是做了兩次請求,及產生了兩個request對象,重定向會導致第一次request對象信息丟失。
請求轉發:轉發做了一次請求, 瀏覽器的地址欄一直是第一次請求的地址。轉發是服務器內部request/response控制權的移交。
eg: 含param子標記
<jsp:forward page="loginResult.jsp"> <jsp:param name="username" value="<%=user%>"/> <jsp:param name="password" value="<%=pwd%>"/> </jsp:forward>
不含param子標記
<jsp:forward page="declare.jsp"/>
2.包含頁面:<jsp:include>
與<%@ include%>不同,在jsp頁面運行時動態加入。
<jsp:include page="scripts/login.jsp"> <jsp:param name-"username" value="tom"/> </jsp:include>
->javaBean
3.創建Bean:<jsp:useBean>
屬性:
id:javaBean是一個類,不同實例用id區分
class:javaBean的類名。
scope:默認page,以下是取值的詳細說明
- page:創建Bean的jsp以及此文件中的所有靜態包含文件(<%@ include %>)。
- request:同一個請求,直到客戶端發起下一個請求為止。
- session:整個會話,近似理解為關閉瀏覽器為止。
- application:整個application。服務器一開始執行服務到服務器關閉為止。
eg:
<jsp:useBean id="checking" scope="session" class="bank.checking" > <jsp:setProperty name="checking" property="balance" value="0.0"/> </jsp:useBean>
4.設置Bean屬性:<jsp:setProperty>
屬性:
name: <jsp:useBean>標簽中的id屬性
property:Bean實例的屬性。
value: Bean實例屬性的值。
param:表單參數
語法:
1)將bean屬性的值設置為一個字符串。
<jsp:setProperty name="bean的名字" property="bean的屬性" value=字符串/>
2)通過表單的參數的值來設置bean的相應屬性的值,表單中的屬性和javaBean的屬性應該同名。
<jsp:setProperty name="bean的名字" property="*" /> <jsp:setProperty name="bean的名字" property="屬性名" param=“參數名” />
注意表單中文參數亂碼
post方式
request.setCharacterEncoding("utf-8"); response.setCharacterEncoding( "utf-8" );
get方式
String string = request.getParamers(""); String = new String(string.getBytes("ISO8859-1","utf-8"));
5.取得屬性<jsp:getProperty>
<jsp:getProperty name="bean的名字" property="bean的屬性"/>
6.定義參數:<jsp:param>
param標記以“名字-值”對的形式為其他標記提供附加信息,不能獨體使用。作為<jsp:include>,<jsp:forward >,<jsp:plugin>標記的子標記。
<jsp:param name="名字" value="值">
7.使用Applet插件:<jsp:plugin>
8.插件錯誤提示:<jsp:fallback>