表示層JSP【JavaEE】


       JSP是一種動態網頁技術標準,它是在靜態網頁HTML代碼中加入Java程序片段(Scriptlet)和JSP標籤(tag),構成JSP網頁文件,其擴展名爲“.jsp”。

一、JSP語法

       JSP頁面是將JSP代碼放在“<%”與“%>”的標籤中,然後嵌入到HTML代碼中而形成。在“<%”與“%>”標籤中定義JSP元素的的行爲。

       1》JSP變量、方法的聲明

              語法格式:<%! 聲明變量、方法和類 %>

       2》顯示JSP表達式的值

              語法格式:<%=表達式%>

       3》JSP代碼塊

             語法格式:<% 符合java語法的代碼塊 %>

       4》JSP註釋

              在JSP程序中,爲了增加JSP程序的可讀性,給出了註釋元素。

              語法格式1:<%-- 要添加的文本註釋 --%>

              語法格式2:<!--要添加的文本註釋-->

              語法格式3:<%//要添加的文本註釋%> <%/*要添加的文本註釋*/%>

二、JSP指令元素

       JSP指令標記被服務器解釋並被執行。

       JSP 指令的語法格式:        <%@ 指令名稱 屬性1="屬性值1" 屬性2="屬性值2" … 屬性n="屬性值n"%>

       1》page指令

              Page指令用來定義JSP頁面中的全局屬性,它描述了與頁面相關的一些信息       

屬性

說明

設置值示例

language

指定用到的腳本語言,默認是Java

<%@page language="java"%>

import

用於導入java包或java類

<%@page import="Java.util.Date"%>

pageEncoding

指定頁面所用編碼,默認與contentType值相同

UTF-8

session

指定該頁面是否參與到HTTP會話中

true 或 false

errorPage

設置當頁面出錯後要跳轉到的頁面

/error/jsp-error.jsp

contentType

設計響應jsp頁面的MIME類型和字符編碼

text/html;charset=gbk

isErrorPage

設置是否是一個錯誤處理頁面

true 或 false

isELIgnord

設置是否忽略正則表達式

true 或 false

       2》include指令 

              include指令稱爲文件加載指令,可以將其他的文件插入JSP網頁,被插入的文件必須保證插入後形成的新文件符合JSP頁面的語法規則

              include指令語法格式:  <%@ include file="filename"%>    【 include指令只有一個file屬性,filename指被包含的文件的名稱(相對路徑),被插入的文件必須與當前JSP頁面在同一Web服務目錄下

三、JSP動作元素

       JSP動作元素是用來控制JSP引擎的行爲,JSP標準動作元素均以“jsp”爲前綴。

       1》 <jsp:include>動作

              語法格式:<jsp:include page="文件的名字"/>

              功能:

                     當前JSP頁面動態包含一個文件,即將當前JSP頁面、被包含的文件各自獨立編譯爲字節碼文件

                     當執行到該動作標籤處,才加載執行被包含文件的字節碼。

       2》 <jsp:forward>

              用於停止當前頁面的執行,轉向另一個頁面。 

              語法格式:  <jsp:forward page="文件的名字"/>

四、JSP內置對象

       在JSP中爲了便於數據信息的保存、傳遞、獲取等操作,專門設置了9個內置對象。 

對象名稱

有效範圍

說明

application

javax.servlet.ServletContext

application

應用程序上下文,JSP頁面以及在同一應用程序中的任何Web組件共享信息

config

javax.servlet.ServletConfig

page

允許將初始化數據傳遞給JSP頁面

exception

java.lang.Throwable

page

該對象含有隻能由指定的JSP“錯誤處理頁面”訪問的異常數據

out

javax.servlet.jsp.JspWriter

page

提供對輸出流的訪問

page

javax.servlet.jsp.HttpJspPage

page

代表JSP頁面對應的Servlet類實例

pageContext

javax.servlet.jsp.PageContext

page

JSP頁面本身的上下文

request

javax.servlet.http.HttpServletRequest

request

提供對請求數據的訪問,同時還提供用於加入特定請求數據的上下文

response

javax.servlet.http.HttpServletResponse

page

該對象用來向客戶端輸入數據

session

javax.servlet.http.HttpSession

session

用來保存在服務器與一個客戶端之間需要保存的數據,當客戶端關閉網站的所有網頁時,session變量會自動消失

       1》request對象的常用方法 

              request對象的各種方法主要用來處理客戶端瀏覽器提交的請求信息,以便做出相應的處理。

方法

說明

setAttribute(String name, Object obj)

設置request中的屬性及其屬性值

getAttribute(String name)

返回name指定的屬性值,若不存在指定的屬性,就返回null。

removeAttribute(String name)

刪除請求中的一個屬性

getParameter(String name)

獲得客戶端傳送給服務器端的參數值

getParameterNames()

獲得客戶端傳送給服務器端的所有參數名字(Enumeration類的實例)

getParameterValues(String name)

獲得指定參數的所有值

getCookies()

返回客戶端的所有Cookie對象,結果是一個Cookie數組

getCharacterEncoding()

返回請求中的字符編碼方式

getRequestURI()

獲取發出請求字符串的客戶端地址

getRemoteAddr()

獲取客戶端IP地址

getRemoteHost()

獲取客戶端名字

getSession([Boolean create])

返回和請求相關的session。參數若爲true,若沒有session,新建session

getServerName()

用於獲取服務器的名字

getServletPath()

用於獲取客戶端所請求的腳本文件的文件路徑。

getServerPort()

用於獲取服務器的端口號

       2》response 對象的常用方法

              response對象提供了頁面重定向(sendRedirect)方法、設置狀態行(setStatus)方法和設置文本類型(setContentType)方法等 

方法

說明

SendRedirect(String url)

使用指定的重定向位置url向客戶端發送重定向響應

setContentType(String type)

爲響應設置內容類型,其參數值可以爲text/htmltext/plainapplication/x_msexcelapplication/msword

setContentLength(int len)

爲響應設置內容長度

setLocale(java.util.Locale loc)

爲響應設置地區信息 

三、session對象主要方法

       session對象其主要作用是存儲、獲取用戶會話信息 

方法

說明

Object getAttribute(String attriname)

獲取指定屬性的屬性值,若屬性不存在,返回null

void setAttribute(String name,Object value)

設定指定名字的屬性值,並且存儲在session中

void removeAttribute(String attriname)

刪除指定的屬性(包含屬性名、屬性值)

Enumeration getAttributeNames()

返回session對象中存儲的每一個屬性對象

long getCreationTime()

返回session對象被創建時間,單位爲毫秒

long getLastAccessedTime()

返回session最後發送請求的時間,單位爲毫秒

String getId()

返回Session對象在服務器端的編號

long setMaxInactiveInterval()

返回session對象的生存時間,單位爲秒

boolean isNew()

判斷目前session是否爲新的Session

void invalidate()

銷燬session對象,使得與其綁定的對象都無效

四、使用樣例

設計一個網上答題及其自動評測系統。
本案例設計一個簡單的網上答題與評測,該程序包括兩部分,
首先是試題頁面的設計及其解答的提交,
其次是,當提交解答後,系統自動評閱並給出評閱結果。

該案例的設計,需要設計兩個JSP頁面:
一個是提交信息頁面,
另一個是獲取提交信息並進行處理顯示結果頁面。

其設計關鍵是如下兩點:
(1)對於互斥的單選框、只允許的單選的列表框,只傳遞一個參數。
(2)對於複選框、可多選列表框,需傳遞多個參數,通過數組保存並獲取參數值。


代碼:
(1)提交信息頁面程序:ch02_5_input.jsp,《代碼》。
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>簡單的網上試題自動測評——試題</title>
</head>
<body>   
	<form action="ch02_5.jsp" method="post">
		一、 2+3=?<br> 
		<input type="radio" name="r1" value="2" checked="checked">2&nbsp;
		<input type="radio" name="r1" value="3">3&nbsp;&nbsp;
		<input type="radio" name="r1" value="4">4 &nbsp;
		<input type="radio" name="r1" value="5">5<br> 
		二、下列哪些是偶數?<br>&nbsp;&nbsp; 
	      <input type="checkbox" name="c1" value="2">2 &nbsp; 
		<input type="checkbox" name="c1" value="3">3 &nbsp; 
		<input type="checkbox" name="c1" value="4">4 &nbsp; 
		<input type="checkbox" name="c1" value="5">5<br> 
		三、下列哪些是動態網頁?<br>&nbsp; &nbsp; 
		<select size="4" name="list1" multiple="multiple">
			<option value="asp">ASP</option>
			<option value="php">PHP</option>
			<option value="htm">HTML</option>
			<option value="jsp">JSP</option>
			<option value="xyz" selected="selected">xyz</option>
		</select><br> 
		四、下列組件哪個是服務器端的?<br>&nbsp; &nbsp; 
		<select size="1" name="list5">
			<option value="jsp">JSP</option>
			<option value="servlet">SERVLET</option>
			<option value="java">JAVA</option>
			<option value="jdbc">JDBC</option>
		</select><br>
		五、在服務器端用來接受用戶請求的對象是:
		<input type="text" size="20" name="text1"><br>
		<div align="left">
			<input type="submit" value="提交" name="button1">
			<input type="reset" value="重置" name="button2">
		</div>
	</form>
</body>
</html>



(2)獲取提交信息並進行處理頁面:ch02_5_show.jsp,《代碼》
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>簡單的網上試題自動測評——測評</title>
</head>

<body>
	<% 	String s1 = request.getParameter("r1");
		if (s1 != null) {
	    	out.println("一、解答爲:2+3=" + s1 + "   ");
	      	if (s1.equals("5")) out.println("正確!" + "<br>");
			else out.println("錯誤!" + "<br>");
	   	}else out.println("一、沒有解答!");
	   	out.println("---------------------------<br>");
	   	
	   	String[] s21 = request.getParameterValues("c1");
	   	if (s21 != null) {
		  	out.println("二、解答爲:偶數有:");
		  	for (int i = 0; i < s21.length; ++i) {out.println(s21[i] + "   ");}
		  	if (s21.length == 2 && s21[0].equals("2") && s21[1].equals("4")){ 
		  		out.println("正確!" + "<br>");
		  	}else{
		  		out.println("錯誤!" + "<br>");
		  	}
	   	}else{
	   		out.println("二、沒有解答!");
	   	}
	   	out.println("---------------------------<br>");
	   
	   	String[] s31 = request.getParameterValues("list1");
	   	if (s31 != null) {
			out.println("三、解答爲:動態網頁有:");
		  	for (int i = 0; i < s31.length; ++i) {out.println(s31[i] + "   ");}
		  	if (s31.length == 3 && s31[0].equals("asp") && s31[1].equals("php")
            	&& s31[2].equals("jsp")){
		  		out.println("正確!" + "<br>");
		  	}else{
		  		out.println("錯誤!" + "<br>");
		  	}
	   	} else out.println("三、沒有解答!");
	   	out.println("---------------------------<br>");
	   	
	   	String s4 = request.getParameter("list5");
	   	if (s4 != null) {
	    	out.println("四、解答爲:服務器端的組件是有:");
	    	out.println(s4 + "    ");
			if (s4 != null && s4.equals("servlet"))  out.println("正確!" + "<br>");
			else  out.println("錯誤!" + "<br>");
	   	} else  out.println("四、沒有解答!");
	   	
	   	out.println("---------------------------<br>");
	   	String s5 = request.getParameter("text1");
	   	if (s5 != null) {
	   		out.println("五、解答爲: ");
	   		out.println(s5 + "   ");
			if (s5 != null && s5.equals("request")) 
				out.println("正確!" + "<br>");
			else out.println("錯誤!" + "<br>");
	   	} else out.println("五、沒有解答!");
	   out.println("---------------------------<br>");
	%>
</body>


</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章