jsp內置對象主要有:
out,request,response,session,application,page,pageContext,exception,config。
- out內置對象
out對象是JspWrite類的示例,是向客戶端輸出內容常用的類。
常用方法:
1.void println()向客戶端打印字符串
2.void clear()清除緩衝區內容,如果在flush之後調用會拋出異常
3.void clearBuffer()清除緩衝區內容,如果在flush之後調用不會拋出異常
4.void flush將緩衝區內容輸出到客戶端
5.int getBufferSize()返回緩衝區字節數的大小,如果不設緩衝區則爲0
6.int getReMaining()返回緩衝區剩餘多少可用
7.boolean isAutoFlush()返回緩衝區滿時,是自動清空還是拋出異常
8 void close()關閉輸出流
運用:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>out內置對象</h1>
<%
out.println("<h2>靜夜思</h2>");
out.println("牀前明月光<br>");
out.println("疑是地上霜<br>");
out.flush();
//out.clear();//這裏會拋出異常。
out.clearBuffer();//這裏不會拋出異常。
out.println("舉頭望明月<br>");
out.println("低頭思故鄉<br>");
%>
緩衝區大小:<%=out.getBufferSize() %>byte<br>
緩衝區剩餘大小:<%=out.getRemaining() %>byte<br>
是否自動清空緩衝區:<%=out.isAutoFlush() %><BR>
</body>
</html>
- request對象
首先介紹表單的get提交與post提交方式的區別。
1.get提交
get提交以明文的方式通過URL提交數據,提交的數據最多不超過2KB,安全較低但效率比post高,適合提交數據量不大,安全性不高的數據,比如:搜索,查詢功能。
post提交是將用戶提交的信息封裝在HTML HEADER內,適合用於提交數據量大,安全性高的用戶信息,比如:註冊,修改,上傳等功能。
客戶端請求的信息被封裝在request對象中,通過它才能瞭解客戶的需求,做出響應,它是httpSerlvetRequest類的實例。request對象具有請求作用域,即完成客戶端請求之前,該對象一直有效。
常用方法:
void setAttribute(String name,Object):設置名字爲name的request 的參數值
Object 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() :獲得客戶端向服務器端傳送數據的方法
String getParameter(String name) :獲得客戶端傳送給服務器端的有 name指定的參數值
getParameterNames() :獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實
例
String[] getParameterValues(String name):獲得有name指定的參數的所有值
String getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString() :獲得查詢字符串
getRequestURI() :獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的 IP 地址
getRemoteHost() :獲取客戶端的名字
getSession([Boolean create]) :返回和請求相關 Session
String getServerName() :獲取服務器的名字
String getContentType:得到請求體的MIME類型
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
實例
實現用戶表單提交
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>用戶登錄</h1>
<hr>
<form action="request.jsp" method="post">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>愛好:</td>
<td>
<input type="checkbox" name="favorite" value="read">讀書
<input type="checkbox" name="favorite" value="music">音樂
<input type="checkbox" name="favorite" value="movie">電影
<input type="checkbox" name="favorite" value="internet">上網
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form>
<br>
<br>
<a href="request.jsp?username=李四">測試URL傳參數</a>
</body>
</html>
request.jsp頁面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'request.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>request內置對象</h1>
<%
request.setCharacterEncoding("utf-8");
//解決中文亂碼問題,無法解決URL傳遞中文出現的亂碼問題。
//解決URL傳遞中文亂碼需到tomcat下的server.xml內加入URIEncoding="utf-8"
request.setAttribute("password", "123456");
%>
用戶名:<%=request.getParameter("username") %><br>
愛好 :<%
if(request.getParameterValues("favorite")!=null)
{
String[] favorites = request.getParameterValues("favorite");
for(int i=0;i<favorites.length;i++)
{
out.println(favorites[i]+" ");
}
}
%> <br>
密碼:<%=request.getAttribute("password") %><br>
請求體的MIME類型:<%=request.getContentType() %><br>
協議類型及版本號: <%=request.getProtocol() %><br>
服務器主機名 :<%=request.getServerName() %><br>
服務器端口號:<%=request.getServerPort() %><BR>
請求文件的長度 :<%=request.getContentLength() %><BR>
請求客戶端的IP地址:<%=request.getRemoteAddr() %><BR>
請求的真實路徑:<%=request.getRealPath("request.jsp") %><br>
請求的上下文路徑:<%=request.getContextPath() %><BR>
</body>
</html>
解決URL傳遞中文亂碼:
打開tomcat->conf->server.xml
加入:URIEncoding=”utf-8”
- response對象
response是HttpSerlvetResponse類的實例,response對象具有頁面作用域,即訪問一個頁面時,該頁面的response對象只能對這次訪問有效,其他頁面的response對當前頁面無效。
常用方法:
String getCharacterEncoding()返回響應用的是何種字符編碼
void setContentType(String type)設置響應MIME類型
PrintWrite getWrite()返回可以向客戶端輸出字符的一個對象
sendRedirect(java.lang.String location)重新定向客戶端的請求
實例
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
response.setContentType("text/html;charset=utf-8"); //設置響應的MIMI類型
out.println("<h1>response內置對象</h1>");
out.println("<hr>");
//out.flush();
PrintWriter outer = response.getWriter(); //獲得輸出流對象
outer.println("大家好,我是response對象生成的輸出流outer對象");
response.sendRedirect("login.jsp");//請求重定向
//請求重定向
//response.sendRedirect("request.jsp");
//請求轉發
// request.getRequestDispatcher("request.jsp").forward(request, response);
%>
請求轉發與請求重定向的區別:
請求重定向:客戶端行爲,response.sendRedirect();從本質上講,相當於兩次請求,前一次請求對象不會保存,地址欄的URL地址會改變。如上例子從login.jsp表單提交到response.jsp,頁面調用response.sendRedirect(“request.jsp”)(取消註釋);則地址欄是request.jsp,且提交的對象未保存。
請求轉發:request.getRequestDispatcher().forward(request, response);
是一次請求,請求對象會保存,地址欄的url地址不會變。如上例子從login.jsp表單提交到response.jsp,頁面調用request.getRequestDispatcher(“request.jsp”).forward(request, response)(取消註釋);則地址欄是response.jsp,提交的對象保存。