目錄
JSP技術(shù)及應(yīng)用預(yù)習(xí)報告
一、實(shí)驗(yàn)?zāi)康?/p>
二、實(shí)驗(yàn)原理
三、實(shí)驗(yàn)預(yù)習(xí)內(nèi)容
JSP技術(shù)及應(yīng)用實(shí)驗(yàn)報告
一、實(shí)驗(yàn)?zāi)康?/p>
二、實(shí)驗(yàn)要求
三、實(shí)驗(yàn)內(nèi)容與步驟
1. 創(chuàng)建一個名為exp02的Web項目,創(chuàng)建并執(zhí)行下面JSP頁面,文件名為counter. jsp
2. errorPage屬性和isErrorPage屬性的使用。
高亮重點(diǎn)??
3. 應(yīng)用session對象實(shí)現(xiàn)用戶登錄。
4.通過application對象實(shí)現(xiàn)頁面訪問計數(shù)器功能。
?5.編寫一個頁面文件staytime.jsp, 統(tǒng)計用戶在該頁面停留的時間。運(yùn)行本示例,將會顯示用戶的登錄時間,并且每過10秒刷新一次頁面顯示用戶在該頁面的停留時間。
四、思考題
1. 如何給JSP頁面設(shè)置初始化參數(shù)并訪問這些初始化參數(shù)?
2. JSP的四大作用域?qū)ο髉ageContext, request, session、application對應(yīng)的Servlet類、作用及范圍各是什么?
JSP技術(shù)及應(yīng)用預(yù)習(xí)報告
一、實(shí)驗(yàn)?zāi)康?/h3>
1. 熟練掌握J(rèn)SP的聲明、表達(dá)式、小腳本和注釋的使用;
2. 理解JSP頁面指令和動作的語法格式;
3. 理解JSP頁面的生命周期;
4. 熟練掌握page指令的常用屬性:import、session、errorPage、isErrorPage、contentType、pageEncoding;
5. 熟練掌握J(rèn)SP的內(nèi)置對象及用法;
6. 熟練掌握J(rèn)SP作用域?qū)ο蠹坝梅ā?/p>
二、實(shí)驗(yàn)原理
JSP有三個指令元素:page、include和taglib。這些指令元素是針對JSP引擎的,并不會產(chǎn)生任何看得見的輸出。它們都包含在<%@和%>標(biāo)簽內(nèi)。本實(shí)驗(yàn)主要學(xué)習(xí)page指令。
<%@ page %>指令作用于整個JSP頁面,包括靜態(tài)包含的頁面,但不包括動態(tài)包含的頁面??梢栽谝粋€頁面中包含多個<%@ page %>指令,但其屬性除import外只能在整個頁面中出現(xiàn)一次。
<%@ page %>指令可以放在頁面的任何位置,但為了JSP程序的可讀性,一般將<%@ page %>指令放在頁面的前面。
JSP中一共預(yù)先定義了九大內(nèi)置對象,分別為:request、response、session、application、out、pageContext、config、page、exception。
JSP中有四大作用域?qū)ο螅簆ageContext, request, session,application。
三、實(shí)驗(yàn)預(yù)習(xí)內(nèi)容
1. JSP語法元素有哪些?使用時應(yīng)注意什么問題?
JSP腳本元素、JSP指令、JSP動作、JSP注釋、表達(dá)式語言。首先我們在訪問外部資源之前,要做的第一件事就是檢查這個資源(比如說:數(shù)據(jù)庫)是否可以進(jìn)行操作又或者是正常連接;接著在訪問外部資源的時候,假如進(jìn)行了連接的話,那么就必須要進(jìn)行關(guān)閉的操作,另外僅僅只進(jìn)行一次關(guān)閉的操作。但是我們要注意一點(diǎn),那就是要盡量在同一個操作中共享外部資源,以減少這個操作對于資源的消費(fèi),從而提高程序的執(zhí)行效率。
2.JSP頁面的生命周期包括哪幾個階段?
頁面轉(zhuǎn)換、頁面編譯、加載和創(chuàng)建實(shí)例、調(diào)用jspInit()、調(diào)用_jspService()、調(diào)用jspDestroy().
3.JSP指令和動作有哪些?有什么區(qū)別?
JSP動作:是頁面發(fā)給容器的命令,它指示容器在頁面執(zhí)行期間完成某種任務(wù),動作有三種:JSP標(biāo)準(zhǔn)動作、標(biāo)準(zhǔn)標(biāo)簽庫中的動作和用戶自定義動作。
區(qū)別:指令在編譯時加入,所謂靜態(tài),就是在編譯的時候?qū).jsp的代碼加入進(jìn)來再編譯,之后運(yùn)行.而動作在運(yùn)行時加入,所謂動態(tài),就是單獨(dú)編譯,在運(yùn)行時候加入進(jìn)來,之后顯示,這種include,可以傳遞參數(shù).
4.page指令有哪些常用的屬性,這些屬性的功能是什么?
屬性名
功能
import
導(dǎo)入在JSP頁面中使用的Java類和接口
contentype
指定輸出的內(nèi)容類型和字符集
session
用布爾值指定JSP頁面是否參加HTTP會話
errorPage
用相對URL指定另一個JSP頁面用來處理當(dāng)前頁面的錯誤
isErrorPage
用一個布爾值指定當(dāng)前JSP頁面是否用來處理錯誤
pageEncoding
指定JSP文件的字符編碼
JSP技術(shù)及應(yīng)用實(shí)驗(yàn)報告
一、實(shí)驗(yàn)?zāi)康?/h3>
1. 熟練掌握J(rèn)SP的聲明、表達(dá)式、小腳本和注釋的使用;
2. 理解JSP頁面指令和動作的語法格式;
3. 理解JSP頁面的生命周期;
4. 熟練掌握page指令的常用屬性:import、session、errorPage、isErrorPage、contentType、pageEncoding;
5. 熟練掌握J(rèn)SP的內(nèi)置對象及用法;
6. 熟練掌握J(rèn)SP作用域?qū)ο蠹坝梅ā?/p>
二、實(shí)驗(yàn)要求
1. 實(shí)驗(yàn)前進(jìn)行預(yù)習(xí),完成實(shí)驗(yàn)預(yù)習(xí)報告;
2.按照每一項實(shí)驗(yàn)內(nèi)容進(jìn)行上機(jī)實(shí)踐與編程,將程序源代碼和運(yùn)行結(jié)果圖附在實(shí)驗(yàn)報告中實(shí)驗(yàn)內(nèi)容對應(yīng)的部分。
3. 實(shí)驗(yàn)預(yù)習(xí)報告和實(shí)驗(yàn)報告打印裝訂在一起。
4. 將每一次實(shí)驗(yàn)的源代碼按目錄組織保存并壓縮,按照老師指定的要求進(jìn)行提交。代碼保存方式如:exp02表示實(shí)驗(yàn)二Web項目的名稱,其下保存各項實(shí)驗(yàn)內(nèi)容的源文件及相關(guān)資源,將整個exp02文件夾進(jìn)行壓縮后命名為班級-姓名-實(shí)驗(yàn)2,如:計181-張三-實(shí)驗(yàn)2。
三、實(shí)驗(yàn)內(nèi)容與步驟
1. 創(chuàng)建一個名為exp02的Web項目,創(chuàng)建并執(zhí)行下面JSP頁面,文件名為counter. jsp
<html><body>
<%@ page language="java" %>
<%! int count = 0; %>
<% count++; %>
Welcome! You are visitor number
<%= count %>
</body></html>
【步驟1】在瀏覽器中訪問該頁面,輸出結(jié)果如何?多次刷新頁面,結(jié)果如何?


【步驟2】打開counter.jsp轉(zhuǎn)換后的源文件counter_jsp.java,對應(yīng)的類文件在哪里?文件名是什么?
C:\Users\Lenovo\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\exp02\org\apache\jsp
?
【步驟3】查看count變量是在哪里聲明的?

【步驟4】將上面JSP頁面中的<%! int count = 0; %>一行改為<% int count = 0; %>,頁面能否正常執(zhí)行,它與上面頁面有什么區(qū)別?
可以正常執(zhí)行,但是刷新后數(shù)字不再進(jìn)行增加。
區(qū)別:<%! %> 里聲明的變量和方法都是作為類的屬性和方法存在的全局變量,而 <% %> 里聲明的變量則是作為局部變量。
2. errorPage屬性和isErrorPage屬性的使用。
【步驟1】創(chuàng)建hello.jsp頁面,從請求中讀取名為 “name”的請求參數(shù)值,如果值為null,則拋出一個運(yùn)行時異常,異常描述信息為"沒有指定name 屬性",指定錯誤處理頁面為errorHandler.jsp;如果請求參數(shù)不為空,則輸出“Hello”+name。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="errorHandler.jsp" %>
<html>
<head>
<title>獲取名字</title>
</head>
<body>
<%
String name=request.getParameter("name");
java.net.URLDecoder.decode(name,"utf-8");
if(name==null) {
throw new RuntimeException("沒有指定name參數(shù)");
}
%>
Hello,<%=name%>
</body>
</html>
【步驟2】創(chuàng)建errorHandler.jsp錯誤處理頁面,顯示異常提示信息。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯誤提示頁面</title>
</head>
<body>
<%
response.setStatus(200);
%>
請求有誤:<%=exception.getMessage() %><br/>
請重試!
</body>
</html>
【步驟3】用下面兩種URL訪問hello.jsp頁面,給出最終顯示的運(yùn)行結(jié)果,并分析原因。
http://localhost:8080/exp02/hello.jsp

高亮重點(diǎn)??
一般人只要輸入http://localhost:8080/exp02/hello.jspname=歐陽清風(fēng)就可以出現(xiàn)界面了,但是可能大家還會遇到一種情況就是出現(xiàn)400錯誤

此時有一個解決辦法,去進(jìn)行url編碼轉(zhuǎn)換
url在線轉(zhuǎn)碼工具-在線url網(wǎng)址編碼解碼工具-UrlEncode編碼-UrlDecode解碼在線工具
點(diǎn)此工具,輸入你需要轉(zhuǎn)換的字符。

http://localhost:8080/exp02/hello.jspname=%E6%AC%A7%E9%98%B3%E6%B8%85%E9%A3%8E

3. 應(yīng)用session對象實(shí)現(xiàn)用戶登錄。
【步驟1】創(chuàng)建login.jsp文件,添加用于收集用戶登錄信息的表單及表單元素。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>收集用戶登錄信息</title>
</head>
<body>
<form action="deal.jsp" name="form" method="post">
用戶名:<input name="username" type="text" id="name" style="widtn:120px"><br/>
<br/>
密 碼:<input name="pwd" type="password" id="pwd" style="width:140px"><br/>
<br/>
<input type="submit" name="Submit" value="登錄"/>
</form>
</body>
</html>
【步驟2】編寫deal.jsp文件,在該文件中模擬用戶登錄(這里將用戶信息保存到一個二維數(shù)組中),如果登錄成功,將用戶名username保存到session范圍內(nèi)的變量中,并將頁面重定向到main.jsp頁面;否則,將頁面重定向到login.jsp頁面,重新登錄。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String[][] userList={{"小熊愛做實(shí)驗(yàn)吖","123456"}};
boolean flag=false;
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String pwd=request.getParameter("pwd");
for(int i=0;i<userList.length;i++){
if(userList[i][0].equals(username)){
if(userList[i][1].equals(pwd)){
flag=true;
break;
}
}
}
if(flag){
session.setAttribute("username", username);
response.sendRedirect("main.jsp");
}else{
response.sendRedirect("login.jsp");
}
%>
</body>
</html>
【步驟3】編寫main.jsp文件,在該文件中,首先獲取并顯示保存到session范圍內(nèi)的變量username,并顯示用戶名和歡迎信息,然后添加一個退出超鏈接,鏈接至exit.jsp頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% String username=(String)session.getAttribute("username"); %>
<%=username %>登錄成功!<br/>
<br/>
<a href="exit.jsp">[點(diǎn)此退出]</a>
</body>
</html>
【步驟4】編寫exit.jsp文件,在該文件中銷毀session,并重定向頁面至login.jsp頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
</body>
</html>
輸入用戶名和密碼

正確輸入用戶名和密碼
?
點(diǎn)此退出后:

4.通過application對象實(shí)現(xiàn)頁面訪問計數(shù)器功能。
創(chuàng)建一個頁面app_counter.jsp,當(dāng)用戶訪問該頁面時,程序會自動將網(wǎng)站的訪問次數(shù)加1,實(shí)現(xiàn)代碼中可以使用synchronized(application){…}的方法使多用戶同步共享application對象。當(dāng)被共享的對象正在被使用時,其它用戶只能等待,直到上一個用戶對其操作結(jié)束。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>小熊愛做實(shí)驗(yàn)吖</title>
</head>
<body>
<body>
<%
synchronized (application) {
if(application.getAttribute("counter")==null)
{
application.setAttribute("counter", "1");
}
else
{
String strnum=null;
strnum =(String)application.getAttribute("counter");
int count=0;
count=Integer.valueOf(strnum).intValue();
count++;
application.setAttribute("counter",Integer.toString(count));
}
}
%>
welcome to 小熊愛做實(shí)驗(yàn)吖(*?▽?*)的網(wǎng)頁,您是尊敬的第<%=application.getAttribute("counter") %>位訪問者!
</body>
</html>

?5.編寫一個頁面文件staytime.jsp, 統(tǒng)計用戶在該頁面停留的時間。運(yùn)行本示例,將會顯示用戶的登錄時間,并且每過10秒刷新一次頁面顯示用戶在該頁面的停留時間。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
java.util.Date now=new java.util.Date();
response.setHeader("refresh", "10");
%>
登錄時間:<%=now %>
<form name="form1" method="post" action="">
<center>
<p><font size="5" color="#0000FF">停留在此頁面的時間:</font></p>
<p>
<input name="textarea" type="text" value="">
</p>
</center>
<script language="javascript">
var second=0;
var minute=0;
var hour=0;
window.setTimeout("interval();",1000);
function interval()
{
second++;
if(second==60)
{
second=0;minute+=1;
}
if(minute==60)
{
minute=0;hour+=1;
}
document.form1.textarea.value = hour+"時"+minute+"分"+second+"秒";
window.setTimeout("interval();",1000);
}
</script>
</form>
</body>
</html>

四、思考題
1. 如何給JSP頁面設(shè)置初始化參數(shù)并訪問這些初始化參數(shù)?
使用JSP對應(yīng)的Servlet初始化參數(shù) 給JSP頁面提供初始化參數(shù)在三個方面不同于給servlet提供初始化參數(shù)。
(1)InitParamter訪問方法
使用應(yīng)用范圍內(nèi)的初始化參數(shù)。一般,對單個地servlet或JSP頁面分配初始化參數(shù)。指定的servlet或JSP頁面利用ServletConfig的getInitParameter方法讀取這些參數(shù)。
但是,在某些情形下,希望設(shè)置可由任意servlet或JSP頁面借助ServletContext的getInitParameter方法讀取的系統(tǒng)范圍內(nèi)的初始化參數(shù)??衫胏ontext-param元素聲明這些系統(tǒng)范圍內(nèi)的初始化值。
(2)使用內(nèi)置的application對象訪問方法
String value = application.getInitParameter(“參數(shù)名”);//---- 得到結(jié)果: appParaValue。
2. JSP的四大作用域?qū)ο髉ageContext, request, session、application對應(yīng)的Servlet類、作用及范圍各是什么?
(1)pageContext
對應(yīng)的Servlet類:PageContext
對應(yīng)的JSP對象:pageContext
page對象即this,代表JSP本身,更準(zhǔn)確的說它代表JSP被翻譯后的Servlet,因此他可以調(diào)用Servlet類所定義的方法。page對象的類型為javax.servlet.jsp.HttpJspPage。
作用及范圍 : 在實(shí)際應(yīng)用中,page對象很少在JSP中使用
(2)request
對應(yīng)的Servlet類:ServletRequest
對應(yīng)的JSP對象:request
request是表示一個請求,只要發(fā)出一個請求就會創(chuàng)建一個request,它的作用域:僅在當(dāng)前請求中有效。
作用及范圍: 常用于服務(wù)器間同一請求不同頁面之間的參數(shù)傳遞,常應(yīng)用于表單的控件值傳遞。
(3)session
對應(yīng)的Servlet類:HttpSession
對應(yīng)的JSP對象:session
服務(wù)器會為每個會話創(chuàng)建一個session對象,所以session中的數(shù)據(jù)可供當(dāng)前會話中所有servlet共享。
作用及范圍 : 常用于web開發(fā)中的登陸驗(yàn)證界面(當(dāng)用戶登錄成功后瀏覽器分配其一個session鍵值對)。
(4)application
對應(yīng)的Servlet類:ServletContext
對應(yīng)的JSP對象:application
application在服務(wù)器啟動時創(chuàng)建,在服務(wù)器關(guān)閉時銷毀。
所有的用戶都可以取得此信息,此信息在整個服務(wù)器上被保留。Application屬性范圍值,全局變量,只要設(shè)置一次,則所有的網(wǎng)頁窗口都可以取得數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-414540.html
作用及范圍 : 一般用于在多個客戶端間共享數(shù)據(jù)時使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-414540.html
1. 熟練掌握J(rèn)SP的聲明、表達(dá)式、小腳本和注釋的使用;
2. 理解JSP頁面指令和動作的語法格式;
3. 理解JSP頁面的生命周期;
4. 熟練掌握page指令的常用屬性:import、session、errorPage、isErrorPage、contentType、pageEncoding;
5. 熟練掌握J(rèn)SP的內(nèi)置對象及用法;
6. 熟練掌握J(rèn)SP作用域?qū)ο蠹坝梅ā?/p>
JSP有三個指令元素:page、include和taglib。這些指令元素是針對JSP引擎的,并不會產(chǎn)生任何看得見的輸出。它們都包含在<%@和%>標(biāo)簽內(nèi)。本實(shí)驗(yàn)主要學(xué)習(xí)page指令。
<%@ page %>指令作用于整個JSP頁面,包括靜態(tài)包含的頁面,但不包括動態(tài)包含的頁面??梢栽谝粋€頁面中包含多個<%@ page %>指令,但其屬性除import外只能在整個頁面中出現(xiàn)一次。
<%@ page %>指令可以放在頁面的任何位置,但為了JSP程序的可讀性,一般將<%@ page %>指令放在頁面的前面。
JSP中一共預(yù)先定義了九大內(nèi)置對象,分別為:request、response、session、application、out、pageContext、config、page、exception。
JSP中有四大作用域?qū)ο螅簆ageContext, request, session,application。
1. JSP語法元素有哪些?使用時應(yīng)注意什么問題?
JSP腳本元素、JSP指令、JSP動作、JSP注釋、表達(dá)式語言。首先我們在訪問外部資源之前,要做的第一件事就是檢查這個資源(比如說:數(shù)據(jù)庫)是否可以進(jìn)行操作又或者是正常連接;接著在訪問外部資源的時候,假如進(jìn)行了連接的話,那么就必須要進(jìn)行關(guān)閉的操作,另外僅僅只進(jìn)行一次關(guān)閉的操作。但是我們要注意一點(diǎn),那就是要盡量在同一個操作中共享外部資源,以減少這個操作對于資源的消費(fèi),從而提高程序的執(zhí)行效率。
2.JSP頁面的生命周期包括哪幾個階段?
頁面轉(zhuǎn)換、頁面編譯、加載和創(chuàng)建實(shí)例、調(diào)用jspInit()、調(diào)用_jspService()、調(diào)用jspDestroy().
3.JSP指令和動作有哪些?有什么區(qū)別?
JSP動作:是頁面發(fā)給容器的命令,它指示容器在頁面執(zhí)行期間完成某種任務(wù),動作有三種:JSP標(biāo)準(zhǔn)動作、標(biāo)準(zhǔn)標(biāo)簽庫中的動作和用戶自定義動作。
區(qū)別:指令在編譯時加入,所謂靜態(tài),就是在編譯的時候?qū).jsp的代碼加入進(jìn)來再編譯,之后運(yùn)行.而動作在運(yùn)行時加入,所謂動態(tài),就是單獨(dú)編譯,在運(yùn)行時候加入進(jìn)來,之后顯示,這種include,可以傳遞參數(shù).
4.page指令有哪些常用的屬性,這些屬性的功能是什么?
屬性名 |
功能 |
import |
導(dǎo)入在JSP頁面中使用的Java類和接口 |
contentype |
指定輸出的內(nèi)容類型和字符集 |
session |
用布爾值指定JSP頁面是否參加HTTP會話 |
errorPage |
用相對URL指定另一個JSP頁面用來處理當(dāng)前頁面的錯誤 |
isErrorPage |
用一個布爾值指定當(dāng)前JSP頁面是否用來處理錯誤 |
pageEncoding |
指定JSP文件的字符編碼 |
1. 熟練掌握J(rèn)SP的聲明、表達(dá)式、小腳本和注釋的使用;
2. 理解JSP頁面指令和動作的語法格式;
3. 理解JSP頁面的生命周期;
4. 熟練掌握page指令的常用屬性:import、session、errorPage、isErrorPage、contentType、pageEncoding;
5. 熟練掌握J(rèn)SP的內(nèi)置對象及用法;
6. 熟練掌握J(rèn)SP作用域?qū)ο蠹坝梅ā?/p>
二、實(shí)驗(yàn)要求
1. 實(shí)驗(yàn)前進(jìn)行預(yù)習(xí),完成實(shí)驗(yàn)預(yù)習(xí)報告;
2.按照每一項實(shí)驗(yàn)內(nèi)容進(jìn)行上機(jī)實(shí)踐與編程,將程序源代碼和運(yùn)行結(jié)果圖附在實(shí)驗(yàn)報告中實(shí)驗(yàn)內(nèi)容對應(yīng)的部分。
3. 實(shí)驗(yàn)預(yù)習(xí)報告和實(shí)驗(yàn)報告打印裝訂在一起。
4. 將每一次實(shí)驗(yàn)的源代碼按目錄組織保存并壓縮,按照老師指定的要求進(jìn)行提交。代碼保存方式如:exp02表示實(shí)驗(yàn)二Web項目的名稱,其下保存各項實(shí)驗(yàn)內(nèi)容的源文件及相關(guān)資源,將整個exp02文件夾進(jìn)行壓縮后命名為班級-姓名-實(shí)驗(yàn)2,如:計181-張三-實(shí)驗(yàn)2。
三、實(shí)驗(yàn)內(nèi)容與步驟
1. 創(chuàng)建一個名為exp02的Web項目,創(chuàng)建并執(zhí)行下面JSP頁面,文件名為counter. jsp
<html><body> <%@ page language="java" %> <%! int count = 0; %> <% count++; %> Welcome! You are visitor number <%= count %> </body></html>
【步驟1】在瀏覽器中訪問該頁面,輸出結(jié)果如何?多次刷新頁面,結(jié)果如何?
【步驟2】打開counter.jsp轉(zhuǎn)換后的源文件counter_jsp.java,對應(yīng)的類文件在哪里?文件名是什么?
C:\Users\Lenovo\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\exp02\org\apache\jsp
?
【步驟3】查看count變量是在哪里聲明的?
【步驟4】將上面JSP頁面中的<%! int count = 0; %>一行改為<% int count = 0; %>,頁面能否正常執(zhí)行,它與上面頁面有什么區(qū)別?
可以正常執(zhí)行,但是刷新后數(shù)字不再進(jìn)行增加。
區(qū)別:<%! %> 里聲明的變量和方法都是作為類的屬性和方法存在的全局變量,而 <% %> 里聲明的變量則是作為局部變量。
2. errorPage屬性和isErrorPage屬性的使用。
【步驟1】創(chuàng)建hello.jsp頁面,從請求中讀取名為 “name”的請求參數(shù)值,如果值為null,則拋出一個運(yùn)行時異常,異常描述信息為"沒有指定name 屬性",指定錯誤處理頁面為errorHandler.jsp;如果請求參數(shù)不為空,則輸出“Hello”+name。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page errorPage="errorHandler.jsp" %> <html> <head> <title>獲取名字</title> </head> <body> <% String name=request.getParameter("name"); java.net.URLDecoder.decode(name,"utf-8"); if(name==null) { throw new RuntimeException("沒有指定name參數(shù)"); } %> Hello,<%=name%> </body> </html>
【步驟2】創(chuàng)建errorHandler.jsp錯誤處理頁面,顯示異常提示信息。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page isErrorPage="true" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>錯誤提示頁面</title> </head> <body> <% response.setStatus(200); %> 請求有誤:<%=exception.getMessage() %><br/> 請重試! </body> </html>
【步驟3】用下面兩種URL訪問hello.jsp頁面,給出最終顯示的運(yùn)行結(jié)果,并分析原因。
http://localhost:8080/exp02/hello.jsp
高亮重點(diǎn)??
一般人只要輸入http://localhost:8080/exp02/hello.jspname=歐陽清風(fēng)就可以出現(xiàn)界面了,但是可能大家還會遇到一種情況就是出現(xiàn)400錯誤
此時有一個解決辦法,去進(jìn)行url編碼轉(zhuǎn)換
url在線轉(zhuǎn)碼工具-在線url網(wǎng)址編碼解碼工具-UrlEncode編碼-UrlDecode解碼在線工具點(diǎn)此工具,輸入你需要轉(zhuǎn)換的字符。
http://localhost:8080/exp02/hello.jspname=%E6%AC%A7%E9%98%B3%E6%B8%85%E9%A3%8E
3. 應(yīng)用session對象實(shí)現(xiàn)用戶登錄。
【步驟1】創(chuàng)建login.jsp文件,添加用于收集用戶登錄信息的表單及表單元素。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>收集用戶登錄信息</title> </head> <body> <form action="deal.jsp" name="form" method="post"> 用戶名:<input name="username" type="text" id="name" style="widtn:120px"><br/> <br/> 密 碼:<input name="pwd" type="password" id="pwd" style="width:140px"><br/> <br/> <input type="submit" name="Submit" value="登錄"/> </form> </body> </html>
【步驟2】編寫deal.jsp文件,在該文件中模擬用戶登錄(這里將用戶信息保存到一個二維數(shù)組中),如果登錄成功,將用戶名username保存到session范圍內(nèi)的變量中,并將頁面重定向到main.jsp頁面;否則,將頁面重定向到login.jsp頁面,重新登錄。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.util.*"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String[][] userList={{"小熊愛做實(shí)驗(yàn)吖","123456"}}; boolean flag=false; request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); String pwd=request.getParameter("pwd"); for(int i=0;i<userList.length;i++){ if(userList[i][0].equals(username)){ if(userList[i][1].equals(pwd)){ flag=true; break; } } } if(flag){ session.setAttribute("username", username); response.sendRedirect("main.jsp"); }else{ response.sendRedirect("login.jsp"); } %> </body> </html>
【步驟3】編寫main.jsp文件,在該文件中,首先獲取并顯示保存到session范圍內(nèi)的變量username,并顯示用戶名和歡迎信息,然后添加一個退出超鏈接,鏈接至exit.jsp頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String username=(String)session.getAttribute("username"); %> <%=username %>登錄成功!<br/> <br/> <a href="exit.jsp">[點(diǎn)此退出]</a> </body> </html>
【步驟4】編寫exit.jsp文件,在該文件中銷毀session,并重定向頁面至login.jsp頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% session.invalidate(); response.sendRedirect("login.jsp"); %> </body> </html>
輸入用戶名和密碼
正確輸入用戶名和密碼
?
點(diǎn)此退出后:
4.通過application對象實(shí)現(xiàn)頁面訪問計數(shù)器功能。
創(chuàng)建一個頁面app_counter.jsp,當(dāng)用戶訪問該頁面時,程序會自動將網(wǎng)站的訪問次數(shù)加1,實(shí)現(xiàn)代碼中可以使用synchronized(application){…}的方法使多用戶同步共享application對象。當(dāng)被共享的對象正在被使用時,其它用戶只能等待,直到上一個用戶對其操作結(jié)束。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>小熊愛做實(shí)驗(yàn)吖</title> </head> <body> <body> <% synchronized (application) { if(application.getAttribute("counter")==null) { application.setAttribute("counter", "1"); } else { String strnum=null; strnum =(String)application.getAttribute("counter"); int count=0; count=Integer.valueOf(strnum).intValue(); count++; application.setAttribute("counter",Integer.toString(count)); } } %> welcome to 小熊愛做實(shí)驗(yàn)吖(*?▽?*)的網(wǎng)頁,您是尊敬的第<%=application.getAttribute("counter") %>位訪問者! </body> </html>
?5.編寫一個頁面文件staytime.jsp, 統(tǒng)計用戶在該頁面停留的時間。運(yùn)行本示例,將會顯示用戶的登錄時間,并且每過10秒刷新一次頁面顯示用戶在該頁面的停留時間。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% java.util.Date now=new java.util.Date(); response.setHeader("refresh", "10"); %> 登錄時間:<%=now %> <form name="form1" method="post" action=""> <center> <p><font size="5" color="#0000FF">停留在此頁面的時間:</font></p> <p> <input name="textarea" type="text" value=""> </p> </center> <script language="javascript"> var second=0; var minute=0; var hour=0; window.setTimeout("interval();",1000); function interval() { second++; if(second==60) { second=0;minute+=1; } if(minute==60) { minute=0;hour+=1; } document.form1.textarea.value = hour+"時"+minute+"分"+second+"秒"; window.setTimeout("interval();",1000); } </script> </form> </body> </html>
四、思考題
1. 如何給JSP頁面設(shè)置初始化參數(shù)并訪問這些初始化參數(shù)?
使用JSP對應(yīng)的Servlet初始化參數(shù) 給JSP頁面提供初始化參數(shù)在三個方面不同于給servlet提供初始化參數(shù)。
(1)InitParamter訪問方法
使用應(yīng)用范圍內(nèi)的初始化參數(shù)。一般,對單個地servlet或JSP頁面分配初始化參數(shù)。指定的servlet或JSP頁面利用ServletConfig的getInitParameter方法讀取這些參數(shù)。
但是,在某些情形下,希望設(shè)置可由任意servlet或JSP頁面借助ServletContext的getInitParameter方法讀取的系統(tǒng)范圍內(nèi)的初始化參數(shù)??衫胏ontext-param元素聲明這些系統(tǒng)范圍內(nèi)的初始化值。
(2)使用內(nèi)置的application對象訪問方法
String value = application.getInitParameter(“參數(shù)名”);//---- 得到結(jié)果: appParaValue。
2. JSP的四大作用域?qū)ο髉ageContext, request, session、application對應(yīng)的Servlet類、作用及范圍各是什么?
(1)pageContext
對應(yīng)的Servlet類:PageContext
對應(yīng)的JSP對象:pageContext
page對象即this,代表JSP本身,更準(zhǔn)確的說它代表JSP被翻譯后的Servlet,因此他可以調(diào)用Servlet類所定義的方法。page對象的類型為javax.servlet.jsp.HttpJspPage。
作用及范圍 : 在實(shí)際應(yīng)用中,page對象很少在JSP中使用
(2)request
對應(yīng)的Servlet類:ServletRequest
對應(yīng)的JSP對象:request
request是表示一個請求,只要發(fā)出一個請求就會創(chuàng)建一個request,它的作用域:僅在當(dāng)前請求中有效。
作用及范圍: 常用于服務(wù)器間同一請求不同頁面之間的參數(shù)傳遞,常應(yīng)用于表單的控件值傳遞。
(3)session
對應(yīng)的Servlet類:HttpSession
對應(yīng)的JSP對象:session
服務(wù)器會為每個會話創(chuàng)建一個session對象,所以session中的數(shù)據(jù)可供當(dāng)前會話中所有servlet共享。
作用及范圍 : 常用于web開發(fā)中的登陸驗(yàn)證界面(當(dāng)用戶登錄成功后瀏覽器分配其一個session鍵值對)。
(4)application
對應(yīng)的Servlet類:ServletContext
對應(yīng)的JSP對象:application
application在服務(wù)器啟動時創(chuàng)建,在服務(wù)器關(guān)閉時銷毀。
所有的用戶都可以取得此信息,此信息在整個服務(wù)器上被保留。Application屬性范圍值,全局變量,只要設(shè)置一次,則所有的網(wǎng)頁窗口都可以取得數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-414540.html
作用及范圍 : 一般用于在多個客戶端間共享數(shù)據(jù)時使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-414540.html
到了這里,關(guān)于【網(wǎng)絡(luò)應(yīng)用開發(fā)】實(shí)驗(yàn)2--JSP技術(shù)及應(yīng)用(HTTP狀態(tài)400錯誤的請求的解決方法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!