JSP中有9個內建對象,分別是:request、response、session、application、out、pageContext、config、page、exception。這些對象是由系統容器實現和管理的,在JSP頁面中不需要定義即可直接使用。
一:request對象request對象是javax.servlet.http.HttpServletRequest類型的對象,該對象代表了用戶端的請求資訊,主要用於接收通過HTTP協議傳送到伺服器端的資料(包括頭資訊、系統資訊、請求方式以及請求參數等)。request對象的範圍為一次請求。1. 擷取請求參數值<body> <a href=”text.jsp?id=007&name=tt”>擷取請求參數的值</a></body>可以通過下面方法擷取參數String id = request.getParameter(“id”);String name = request.getParameter(“name”);2. 解決中文亂碼如果上面傳入的參數中含有中文,例如<body> <a href=”text.jsp?id=007&name=濤濤”>擷取請求參數的值</a></body>我們擷取的將是亂碼,所有的request請求都是iso-8859-1編碼,我們可以使用GBK,GB2312,UTF-8等編碼。解決方案為String id = new String(request.getParameter(“id”).getBytes(“iso-8859-1”), ”GBK”);String name = request.getParameter(“name”);3. 擷取表單提交資料擷取表單提交資料和擷取請求參數方法基本是一樣的,只不過我們是通過名字擷取對象的值,在HTML頁面當中,一組資料是可以同名的,也就是說同一個名字可以對應多個資料的,因此我們需要用request.getParameter(name);request.getParameterValues(name);兩種方法來擷取資料。4. 擷取請求用戶端資訊<html> <head> <meta http-equiv="Content-Type" content="x-download; charset=gbk" /> <title>擷取請求用戶端資訊</title> </head> <body> <ul style="line-height:200%"> <li> 客戶使用的協議:<%=request.getProtocol() %> </li> <li> 用戶端發送請求的方式:<%=request.getMethod() %> </li> <li> 用戶端請求路徑:<%=request.getContextPath() %> </li> <li> 客戶機IP地址:<%=request.getRemoteAddr() %> </li> <li> 客戶機名稱:<%=request.getRemoteHost() %> </li> <li> 客戶機請求連接埠號碼:<%=request.getRemotePort() %> </li> <li> 接收客戶資訊的頁面:<%=request.getServletPath() %> </li> <li> 擷取URL:<%=request.getRequestURL() %> </li> <li> 更多資訊參考Javadoc </li> </ul> </body></html>參考文檔:javax.servlet Interface ServletRequestAll Known Subinterfaces: HttpServletRequestAll Known Implementing Classes: HttpServletRequestWrapper, ServletRequestWrapper5. 在範圍中管理屬性
通過使用void setAttribute(String name, Object o)方法可以在request對象的屬性列裡面添加一個屬性,通過Object getAttribute(String name)方法擷取對應屬性的值,可以通過void removeAttribute(String name)方法將該屬性移除掉。(暫時不知道有什麼用處?)
6. Cookie管理
Creates a cookie, a small amount of information sent by a servlet to a Web browser, saved by the browser, and later sent back to the server. A cookie's value can uniquely identify a client, so cookies are commonly used for session management.
Constructor Summary
:
Cookie
(String name, String value)
通過cookie的getCookies()方法可以擷取到所有cookie對象集合,然後通過cookie對象的getName()方法擷取指定名稱的cookie,再通過getValue()方法可以擷取cookie對象的值,將一個cookie對象發送到用戶端使用了response對象的addCookie()方法。比如一個簡單的使用者登入頁面login.jsp提交給show.jsp頁面,我們可以使用cookie儲存使用者的資訊。
login.jsp<html> <head> <meta http-equiv="Content-Type" content="x-download; charset=gbk" /> <title>使用者登入</title> </head> <body> <% String[] userInfo={"",""}; Cookie[] cookie=request.getCookies(); if(cookie!=null) { for(int i=0; i<cookie.length; i++) { if(cookie[i].getName().equals("cookieInfo")) { userInfo = cookie[i].getValue().split("#"); } } } %> <form action="show.jsp" method="post"> 姓名:<input name="name" type="text" value="<%=userInfo[0] %>"/> 密碼:<input name="pwd" type="password" value="<%=userInfo[1] %>"/> <input type="submit" value="登入"/> <input type="reset" value="取消"/> </form> </body></html>
show.jsp<html> <head> <meta http-equiv="Content-Type" content="x-download; charset=gbk" /> <title>登入驗證</title> </head> <body> <% String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); Cookie myCookie = new Cookie("cookieInfo", name+"#"+pwd); myCookie.setMaxAge(60*60*24*7); response.addCookie(myCookie); response.flushBuffer(); %> 表單提交成功 您的名字是:<%=name %>。 </body></html>以上代碼在儲存英文字元的cookie時是沒有問題的,當包含中文字元時會出現錯誤。7. 擷取瀏覽器使用的語言使用getLocal()方法。