JSP是java server page的縮寫,其本質是一個簡化的servlet,是一種動態網頁技術標准。jsp頁面是在HTML頁面中嵌入java程序段,使用jsp開發的應用程序可以跨平台。
jsp表達式用於向頁面輸出信息,語法格式如下:
<%= 表達式 %>
如:<%= 5+6 %>
<%與=之間不能有空格,=與後面的表達式之間可以有空格。
聲明標識用語在jsp頁面中定義全局的變量或者方法,通過聲明標識定義的變量和方法可以被整個jsp頁面訪問。語法格式如下:
<%!聲明變量或者方法的代碼%>
如<%!String str = "test";%>
<%與!之間不能有空格,!與其後面的代碼之間可以有空格。
代碼片段就是嵌在jsp頁面中的java代碼或腳本代碼,會在頁面請求的處理期間被執行,java代碼可以實現定義變量、流程控制等功能;腳本代碼可以通過使用jsp內置對象在jsp頁面輸出內容、處理請求和響應、訪問session等,代碼片段的語法格式如下:
<% java代碼或者腳本代碼 %>
HTML注釋格式:
<code class=" hljs xml"> <!--{cke_protected}{C}%3C!%2D%2D%20%20html%E6%B3%A8%E9%87%8A%2D%2D%3E--></code>
html注釋不會顯示在網頁中,在浏覽器中查看源代碼的時候可以看到注釋信息。
因為代碼片段即為java代碼或者腳本代碼,代碼片段的注釋和java語法一樣,單行注釋寫在//之後,多行注釋寫在/* */ 之間,文檔提示注釋寫在/**
與 */
之間。
//單行注釋
/*
多行注釋第一行
多行注釋第二行
*/
/**
文檔注釋
*/
html注釋在查看網頁源代碼的時候可以看到,所以嚴格來說這種注釋並不安全,jsp提供的隱藏注釋在浏覽器和查看源碼的時候都看不到,安全性更高。
隱藏注釋寫在<%–與%>之間:
<%--jsp注隱藏釋 --%>
在html注釋中嵌入jsp代碼片段可以構成動態的html注釋文本。
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*,java.util.ArrayList"%>
jsp基本語法
<%--jsp注隱藏釋 --%> <%!String str = "test"; //jsp聲明%> <% /** 文檔注釋 */ //單行注釋 /* 多行注釋1 多行注釋2 */ String hello = "hello world"; out.println(hello + "
"); for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { out.println(i + "*" + j + "=" + j * i + " "); } out.println("
"); } out.println(str); %>
浏覽器訪問:
jsp編譯指令是通知jsp引擎的消息,它不直接生成輸出,編譯指令有默認值。常見的編譯指令有3個:
page指令:該指令是針對當前頁面的指令。 include指令:用於指定包含另一個頁面。 taglib指令:用於定義和訪問自定義標簽。
<%@ 編譯指令名 屬性名1="屬性值" 屬性名2="屬性值" ... %>
pag指令常用屬性
include指令可以將一個外部文件嵌入到當前jsp文件中,同時解析這個頁面中的jsp語句。include命令既可以包含jsp頁面也可以包含靜態文本。編譯指令語法如下:
<%@ include file="要導入的jsp頁面或文本文件" %>
如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp"%> <%@ include file="text.txt"%> <%@ include file="footer.jsp"%>
使用include指令注意事項:
1.file名不能為依變量,下面的例子是錯誤的:
<%! String url="header.jsp" %>
<%@ include="<%=url %>"
2.file名後面不能傳入參數,下面的例子是錯誤的:
<%@ include file="header.jsp?username=abc" %>
3.file的路徑是相對於此jsp的路徑。
taglib指令用於引入一些特定的標簽庫,語法格式:
<%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>
如使用struts標簽庫:
<%@ taglib prefix="s" taglib="/struts-tags" %>
prefix=”tagPrefix “用於定制標記的前綴,jsp, jspx, java, javax, servlet, sun, 和sunw已被sun公司保留。uri=”tagLibraryURI”統一資源標記庫,制定一個特定的標記庫,可以是相對路徑,也可以是絕對路徑。
forward指令用於將頁面轉發到另外的頁面,可以是html頁面、jsp頁面、容器中的servlet.
語法如下:
如果轉發的時候需要傳遞參數可以使用
指令進行設置。
比如,訪問index.jsp頁面時自動轉發至login.jsp,需要把username和password傳遞過去:
index.jsp:
<code class=" hljs xml"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:forward page="login.jsp"> <jsp:param value="yaopan" name="username"> <jsp:param value="123456" name="password"> </jsp:param></jsp:param></jsp:forward> <%--mac上按住comment鍵(windows下按住ctrl鍵),再點擊login.jsp forword以下的代碼不會被執行 --%> 網站主頁</code>
在login.jsp中可以使用getParameter方法獲取傳入的參數值:
<%
String name=request.getParameter("username");
String pwd=request.getParameter("password");
out.println(name);
out.println("
");
out.println(pwd);
%>
執行forword指令時用戶請求的地址沒有發生變化,頁面內容被forward目標替代。
include指令用於包含某個頁面,但不會導入被include頁面的編譯指令。可以通過param指令傳遞參數:
新建一個index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
body.jsp
這三個指令與javaBean相關,useBean用於在jsp頁面中初始化一個Java實例;setProperty為javaBean實例的屬性賦值;getProperty屬性用於輸出javaBean實例的屬性。
如果jsp頁面中需要重復使用某段代碼,可以把這段代碼定義成java方法,然後多個jsp頁面調用該方法達到頁面復用的效果。
useBean的語法格式如下:
如:在ucas.ac.cn.jspstudy包下創建一個Student類,有name、age、stuId三個屬性和相應的setter和getter方法。在jsp頁面中創建javaBean實例:
<%--創建Student對象,對象名為stu1 --%>
setProperty方法用於為javaBean實例的屬性賦值:
<%--給stu1的name屬性賦值 --%>
<%--給stu1的age屬性賦值 --%>
getProperty用於輸出javaBean實例的屬性值:
<%--輸出stu1的name值 --%>
<%--輸出stu1的age值 --%>
plugin主要用於下載服務器端的javaBean或applet到客戶端執行,現在很少使用。
param指令用於設置參數值,該指令本身不能單獨使用,單獨的param指令沒有意義,配合以下三個指令使用:
jsp:include jsp:forward jsp:pluginjsp、servlet之間不能相互調用,為了解決jsp和servlet之間數據交換的問題,web服務器提供了四個對象,分別是application、session、request、page。放入application對象中的數據對整個Web應用有效,一旦jsp、servlet將數據放入application對象之中,該數據可以被該應用下其它jsp、servlet訪問。
config對象代表當前jsp配置信息,但jsp頁面通常無需配置,該對象在jsp頁面中較少使用,在servlet中使用較多。
exception對象是Throwable的實例,代表jsp腳本中產生的錯誤和異常,是jsp頁面異常機制的一部分。把page指令的isErrowPage屬性設置為true時可以訪問exception內置對象。
out對象是javax.servlet.jsp.JspWriter的實例,代表jsp的輸出流,永於輸出內容形成html頁面。
out對象一些方法:
代表該頁面本身,通常沒有太大用處。
代表頁面上下文,主要用於jsp之間的共享數據,使用pageContext對象可以訪問page、request、session、application范圍的變量。
request對象是jsp中的重要對象,每個對象封裝著一次用戶請求,並且所有對請求參數都被封裝在request對象中,request對象是獲取用戶請求參數的重要途徑。request對象的一些方法:
request.getMethod():獲取請求的方法名,如get,post. request.getRequestURI():獲取請求資源名.如請求訪問:/jspstudy/08/request.jsp request.getProtocol():獲取請求使用的協議.如:HTTP/1.1 request.getServerName():獲取請求使用的服務器,如:localhost. request.getServerPort():獲取請求使用的服務器端口,如:8080 request.getRemoteAddr():獲取客戶端的ip地址. request.getRemoteHost():獲取客戶端主機. request.getParameter():獲取傳遞過來的參數值. request.getParameterValues():請求參數有多個值時,該方法返回多個值組成的數組. request.setAttribute():測試代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
輸出:
請求方法名:POST
請求的資源:/jspstudy/08/request.jsp
請求使用的協議:HTTP/1.1
請求使用的服務器:localhost
請求使用的服務器端口:8080
客戶端的IP地址:0:0:0:0:0:0:0:1
客戶端主機:0:0:0:0:0:0:0:1
表單提交過來的值:test
response對象用於服務器對客戶端的響應,大部分時候使用out對象向頁面輸出,但是out對象時JspWriter對象的實例,JapWriter時Writer的字類,Writer是字符流,因此out對象無法輸出非字符內容。jsp頁面需要輸出圖片、pdf文檔、excel等非字符對象時需要使用response作為響應輸出.response還可以用於重定向,向客戶端增加cookie.
session對象代表一次用戶會話,一次用戶會話的含義是:從客戶端連接服務器開始,到客戶端與服務器斷開為止,這個過程就是一次會話。
session通常用於跟蹤用戶的會話信息,如判斷用戶是否登錄,購物車中跟蹤用戶購買的商品。
session范圍的屬性可以在多個頁面點跳轉之間共享,一旦關閉浏覽器,session結束,session范圍內的屬性就會全部丟失。