JAVA WEB JSP內建物件作業
桂 林 理 工 大 學
實 驗 報 告
班級 軟體16-1班 學號 3162052051116 姓名 張識虔 同組實驗者
實驗名稱 JSP內建物件
一、實驗目的:
通過程式設計和上機實驗理解 JSP各個頁面之間的響應和傳遞的過程。並且能夠熟練的掌握JSP的內建物件的屬性和方法,並能靈活運用。
二、實驗環境:
三、實驗內容:
(一)基礎練習:request常用方法的使用
1.用request的各種方法輸出request中的各種方法,新建頁面requestApp1.jsp原始碼如下:
requestApp1.jsp
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.*" %> <html> <head> </head> <body> 請求資訊如下:<br> 請求的方法是:<%=request.getMethod()%> <br> 請求的URI是:<%=request.getRequestURI()%> <br> 請求的協議是:<%=request.getProtocol()%> <br> 接受客戶提交資訊的頁面路徑是:<%=request.getServletPath()%> <br> 請求的協議是:<%=request.getProtocol()%> <br> 請求中的查詢字串是:<%=request.getQueryString()%> <br> 請求資訊的總長度是:<%=request.getContentLength()%> <br> 伺服器名稱是:<%=request.getServerName()%> <br> 提供HTTP服務的伺服器埠號是:<%=request.getServerPort()%> <br> 客戶端IP地址是:<%=request.getRemoteAddr()%> <br> 客戶端機器的名稱是:<%=request.getRemoteHost()%> <br> HTTP標頭檔案中User-Agent的值是:<%=request.getHeader("User-Agent")%> <br> HTTP標頭檔案中accept的值是:<%=request.getHeader("accept")%> <br> HTTP標頭檔案中Host的值是:<%=request.getHeader("Host")%> <br> HTTP標頭檔案中accept-encoding的值是:<%=request.getHeader("accept-encoding")%> <br>頭名字的一個列舉: <% Enumeration enumHead=request.getHeaderNames(); while(enumHead.hasMoreElements()) { out.println((String)enumHead.nextElement()); } %> <br>標頭檔案中指定頭名字的全部值的一個列舉: <% Enumeration enum_headedValues=request.getHeaders("cookie"); while(enum_headedValues.hasMoreElements()) { out.println((String)enum_headedValues.nextElement()); } %> </body> </html>
(二)獲取表單資料
1.建立一個新的WEB工程,再建立一個Register.jsp和Accept.jsp。
(1)程式功能:實現頁面與頁面之間的資訊交換。
(2)程式原始碼如下。
Register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <script language="javascript"> function on_submit() {//驗證資料的合法性 if (form1.username.value == "") { alert("使用者名稱不能為空,請輸入使用者名稱!"); form1.username.focus(); return false; } if (form1.userpassword.value == "") { alert("使用者密碼不能為空,請輸入密碼!"); form1.userpassword.focus(); return false; } if (form1.reuserpassword.value == "") { alert("使用者確認密碼不能為空,請輸入密碼!"); form1.reuserpassword.focus(); return false; } if (form1.userpassword.value != form1.reuserpassword.value) { alert("密碼與確認密碼不同"); form1.userpassword.focus(); return false; } if (form1.email.value.length!= 0) { for (i=0; i<form1.email.value.length; i++) if (form1.email.value.charAt(i)=="@") break; if (i==form1.email.value.length) { alert("非法EMail地址!"); form1.email.focus(); return false; } } else { alert("請輸入Email!"); form1.email.focus(); return false; } } </script> <head> <title>新使用者註冊</title> </head> <body> <form method="POST" action=" Accept.jsp" name="form1" onsubmit="on_submit()"> 新使用者註冊<br> 使用者名稱(*):<input type="text" name="username" size="20"><br> 密 碼(*):<input type="password" name="userpassword" size="20"><br> 再輸一次密碼(*):<input type="password" name="reuserpassword" size="20"><br> 性別:<input type="radio" value="男" checked name="sex">男<input type="radio" name="sex" value="女">女<br> 出生年月:<input name="year" size="4" maxlength=4>年 <select name="month"> <option value="1" selected>1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="8">7</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> </select>月 <input name="day" size="3" maxlength=4>日<br> 電子郵箱(*):<input name="email" maxlength=28><br> 家庭住址:<input type="text" name="address" size="20"><br> <input type="submit" value="提交" name="B1"><input type="reset" value="全部重寫" name="B2"><br> </form> </body> </html>
Accept.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%!
public String codeToString(String str)
{//處理中文字串的函式
String s=str;
try
{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s;
}
}
%>
<head>
<title>接收新使用者註冊</title>
</head>
<body>
這是新使用者註冊所提交的資料:
<br>
使用者名稱是:<%=codeToString(request.getParameter("username"))%><br>
密碼是:<%=codeToString(request.getParameter("userpassword"))%><br>
性別是:<%=codeToString(request.getParameter("sex"))%><br>
出生年月是:<%=request.getParameter("year")+request.getParameter("month")+request.getParameter("day")%><br>
電子郵箱是:<%=request.getParameter("email")%><br>
家庭住址是:<%=codeToString(request.getParameter("address"))%><br>
</body>
</html>
(一)頁面重定向
1.在建立的WEB工程中建立 Redirect.jsp 檔案,
-
- 程式功能:實現頁面的重定向。
- Redirect.jsp 程式的原始碼如下。
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<body>
<%//頁面重定向程式片
String url;
url=request.getParameter("goaddress");
if(url!=null)
{
response.sendRedirect(url);
}
%>
<form name="form1" action="Redirect.jsp" method="post" >
頁面重定向:
<select name="goaddress" onchange="javascript:form1.submit()">
<option value="">========請選擇========</option>
<option value="http://www.csai.cn">中國系統分析員</option>
<option value="http://www.51cmm.com">軟體工程專家網</option>
<option value="http://www.hnii.gov.cn">湖南省資訊辦</option>
<option value="http://www.temco.com.cn">天工遠科資訊科技有限公司</option>
</select>
</form>
</body>
</html>
(二)session屬性設定和獲取
- 在建立的WEB工程中建立 Login.jsp和LoginInfor.jsp 檔案。
- 程式功能:實現session屬性在整個頁面快取資訊的儲存和銷燬。
- 程式原始碼如下:
Login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<script language = "javascript">
function on_submit()
{//驗證資料的合法性
if (form1.username.value == "")
{
alert("使用者名稱不能為空,請輸入使用者名稱!");
form1.username.focus();
return false;
}
if (form1.userpassword.value == "")
{
alert("使用者密碼不能為空,請輸入密碼!");
form1.userpassword.focus();
return false;
}
}
</script>
<%!
public String codeToString(String str)
{//處理中文字串的函式
String s = str;
try
{
byte tempB[] = s.getBytes("ISO-8859-1");
s = new String(tempB);
return s;
}
catch(Exception e)
{
return s;
}
}
%>
<%
String username = request.getParameter("username");
String userpassword = request.getParameter("userpassword");
if (username != null & userpassword != null)
{
//如果使用者名稱和密碼都合法,記下使用者名稱,一般把使用者和密碼存在資料庫中,
//用資料庫中的資訊與提交的使用者名稱和密碼比較以進行使用者合法性檢查,
//這些內容在後續章節中會繼續學習
request.getSession().setAttribute("username",codeToString(username));
response.sendRedirect("LoginInfo.jsp");
}
%>
<html>
<head>
<title>使用者登入</title>
</head>
<body>
<form name = "form1" method = "post" onsubmit = "on_submit()">
<table align = "center">
<tr align = "center">
<td>
使用者登入
</td>
</tr>
<tr align = "center">
<td>
請輸入使用者名稱:<input type = "text" name = "username" size = "20">
</td>
</tr>
<tr align = "center">
<td>
請輸入密碼: <input type = "password" name = "userpassword" size = "20">
</td>
</tr>
<tr align = "center">
<td>
<input type = "submit" value = "提交" name = "B1">
<input type = "reset" value = "全部重寫" name = "B2">
</td>
</tr>
</table>
</form>
</body>
</html>
LoginInfo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>使用者登入成功</title>
</head>
<body>
使用者登入成功!<br>
您的使用者名稱是:<%=(String)request.getSession().getAttribute("username") %>
</body>
</html>
(三)用out物件輸出表格程式
- 在建立的WEB工程中建立Outapp.jsp檔案
程式功能:通過使用out輸出靜態表格,從而掌握利用內建物件實現靜態網頁的方法。
Outapp.jsp程式原始碼如:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<head>
<title>out應用示例</title>
</head>
<BODY>
<%
out.print("<table border='1' width='100%'><tr><td width='100%' colspan='4'>");
out.print("參會人員名單(用out輸出表格)"+"</tr>");
out.print("<tr><td width='25%'>"+"姓名"+"</td>");
out.print("<td width='15%'>"+"年齡"+"</td>");
out.print("<td width='15%'>"+"性別"+"</td>");
out.print("<td width='45%'>"+"工作單位"+"</td></tr>");
out.print("<tr><td width='25%'>"+"鄧子云"+"</td>");
out.print("<td width='15%'>"+"26"+"</td>");
out.print("<td width='15%'>"+"男"+"</td>");
out.print("<td width='45%'>"+"長沙市商業銀行"+"</td></tr>");
out.print("<tr><td width='25%'>"+"張賜"+"</td>");
out.print("<td width='15%'>"+"27"+"</td>");
out.print("<td width='15%'>"+"男"+"</td>");
out.print("<td width='45%'>"+"長沙凌科遠信科技有限公司"+"</td></tr>");
out.print("<tr><td width='25%'>"+"袁樹雄"+"</td>");
out.print("<td width='15%'>"+"31"+"</td>");
out.print("<td width='15%'>"+"男"+"</td>");
out.print("<td width='45%'>"+"計算機學院"+"</td></tr>");
out.print("</table>");
%>
</BODY>
</HTML>
四、心得體會:
老師所給的程式碼還不是不能直接執行的 包含很多的問題 比如 獲取表單資料 語言設定很麻煩
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> pageEncoding 必須為 gb2312 並且跳轉的JSP頁面 byte tempB[]=s.getBytes("ISO-8859-1"); getBytes改成 ISO-8859-1 才能正確的顯示出中文 不會亂碼 如果全改成 gb2312 也會出現 文字亂碼現象
在session屬性設定和獲取 中 response.sendRedirect("sessionLoginInfo.jsp"); 得 這樣寫是沒有顯示錯誤的 但是也每什麼用處 改成 response.sendRedirect("LoginInfo.jsp"); 就行 在form action 中 把 action="LoginInfo.jsp" 刪除 才能正確顯示出跳轉的頁面