本文主要介紹JSP中的request對象
request對象的主要方法:
setAttribute(String name,Object):設置名字為name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例
getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用於獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法
getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值
getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例
getParameterValues(String name):獲得有name指定的參數的所有值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
1、獲取請求參數值
在一個請求中,可以通過使用"?"的方式來傳遞參數,然后通過request對象的getParameter()方法來獲取參數的值
例如:
String id = request.getParameter("id");
實戰一下:
在index.jsp中加入下面代碼:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="show.jsp?id=001">獲取請求參數的值</a> </body> </html>
show.jsp中的代碼:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> id的參數值為: <%=request.getParameter("id")%><br> name的參數值為:<%=request.getParameter("name")%> </body> </html>
運行結果:
id的參數值為: 001
name的參數值為:null
亂碼問題:
如果將上面的001改為中文,會出現亂碼。
實戰一下:
index.jsp
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.net.URLEncoder" %> <!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>Insert title here</title> </head> <body> <a href="show.jsp?name=<%=URLEncoder.encode("工學1號館") %>&sex=<%=URLEncoder.encode("男") %>">解決中文亂碼</a> </body> </html>
show.jsp
<body> name參數的值為: <%=new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk")%> sex參數的值為:<%=request.getParameter("sex")%> </body>
可以看到,name值正常顯示,sex值出現亂碼
2、獲取Form表單的信息
對於文本元素、單選按鈕、下拉列表框都可以使用getParamer()方法獲取其具體值
對於復選框以及多選列表框被選定的內容就要使用getParameterValue()方法來獲取,給方法返回一個字符串數組,通過循環遍歷這個數組就可以得到用戶選定的具體內容
實戰一下:
index.jsp
該頁面創建一個form表單

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@page import="java.net.URLEncoder" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>'index.jsp'</title> </head> <body> <form action="show.jsp" method="post"> <ul style="list-style: none; line-height: 30px"> <li> 輸入用戶姓名: <input type="text" name="name" /> <br /> </li> <li> 選擇性別: <input name="sex" type="radio" value="男" /> 男 <input name="sex" type="radio" value="女" /> 女 </li> <li> 選擇密碼提示問題: <select name="question"> <option value="母親生日"> 母親生日 </option> <option value="寵物名稱"> 寵物名稱 </option> <option value="電腦配置"> 電腦配置 </option> </select> </li> <li> 請輸入問題答案: <input type="text" name="key" /> </li> <li> 請選擇個人愛好: <div style="width: 400px"> <input name="like" type="checkbox" value="唱歌跳舞" /> 唱歌跳舞 <input name="like" type="checkbox" value="上網沖浪" /> 上網沖浪 <input name="like" type="checkbox" value="戶外登山" /> 戶外登山 <br /> <input name="like" type="checkbox" value="體育運動" /> 體育運動 <input name="like" type="checkbox" value="讀書看報" /> 讀書看報 <input name="like" type="checkbox" value="欣賞電影" /> 欣賞電影 </div> </li> <li> <input type="submit" value="提交" /> </li> </ul> </form> </body> </html>
show.jsp頁面

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>'show.jsp'</title> </head> <body> <ul style="list-style:none; line-height:30px"> <li>輸入用戶姓名:<%=new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK") %></li> <li>選擇性別:<%=new String(request.getParameter("sex").getBytes("ISO8859_1"),"GBK") %></li> <li>選擇密碼提示問題:<%=new String(request.getParameter("question").getBytes("ISO8859_1"),"GBK") %></li> <li> 請輸入問題答案:<%=new String(request.getParameter("key").getBytes("ISO8859_1"),"GBK") %> </li> <li> 請選擇個人愛好: <% String[] like =request.getParameterValues("like"); for(int i =0;i<like.length;i++){ %> <%= new String(like[i].getBytes("ISO8859_1"),"GBK")+" " %> <% } %> </li> </ul> </body> </html>
3、獲取請求客戶端信息
<html> <head> <title>'index.jsp'</title> </head> <body> <div style="width: 600px"> <ul style="line-height:24px"> <li>客戶使用的協議:<%=request.getProtocol() %> <li>客戶端發送請求的方法:<%=request.getMethod() %> <li>客戶端請求路徑:<%=request.getContextPath() %> <li>客戶機IP地址:<%=request.getRemoteAddr() %> <li>客戶機名稱:<%=request.getRemoteHost() %> <li>客戶機請求端口號:<%=request.getRemotePort() %> <li>接愛客戶信息的頁面:<%=request.getServletPath() %> <li>獲取報頭中User-Agent值:<%=request.getHeader("user-agent") %> <li>獲取報頭中accept值:<%=request.getHeader("accept") %> <li>獲取報頭中Host值:<%=request.getHeader("host") %> <li>獲取報頭中accept-encoding值:<%=request.getHeader("accept-encoding") %> <li>獲取URI:<%= request.getRequestURI() %> <li>獲取URL:<%=request.getRequestURL() %> </ul> </div> </body> </html>
運行結果如下:
- 客戶使用的協議:HTTP/1.1
- 客戶端發送請求的方法:GET
- 客戶端請求路徑:/3.01
- 客戶機IP地址:0:0:0:0:0:0:0:1
- 客戶機名稱:0:0:0:0:0:0:0:1
- 客戶機請求端口號:4777
- 接愛客戶信息的頁面:/index.jsp
- 獲取報頭中User-Agent值:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
- 獲取報頭中accept值:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- 獲取報頭中Host值:localhost:8080
- 獲取報頭中accept-encoding值:gzip, deflate, sdch
- 獲取URI:/3.01/index.jsp
- 獲取URL:http://localhost:8080/3.01/index.jsp
4、cookie管理
cookie的getCookies()方法可以獲取到所有的cookie對象集合
然后通過getName和getValue方法分別獲取名稱和值
index.jsp

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>'index.jsp'</title> </head> <body> <% String welcome = "第一次訪問"; String[] info = new String[] { "", "", "" }; Cookie[] cook = request.getCookies(); if (cook != null) { for (int i = 0; i < cook.length; i++) { if (cook[i].getName().equals("mrCookInfo")) { info = cook[i].getValue().split("#"); welcome = ", 歡迎回來! "; } } } %> <%=info[0] + welcome%> <form action="show.jsp" method="post"></form> <ul> <li>姓 名: <input name="name" type="text" value="<%=info[0]%>"> <li>出生日期: <input name="birthday" type="text" value="<%=info[1]%>"> <li>郵箱地址: <input name="mail" type="text" value="<%=info[2]%>"> <li><input type="submit" value="提交"> </ul> </body> </html>
show.jsp

<body> <% String name = request.getParameter("name"); String birthday = request.getParameter("birthday"); String mail = request.getParameter("mail"); Cookie cook = new Cookie("mrCookInfo", name + "#" + birthday + "#" + mail); cook.setMaxAge(60 * 60 * 24 * 365);//設置cookie的有效期 response.addCookie(cook); %> 表單提交成功 <ul> <li>姓名: <%=name%> <li>出生日期: <%=birthday%> <li>電子郵箱: <%=mail%> <li><a href="index.jsp">返回</a> </ul> </body>