jsp內建物件之Request和response
1. 內建物件
之前我們使用一個物件,必須通過類名new出來,之後才能使用!
User user=new User();
user.屬性名/user.方法
但是我們剛才看到了一些列的request.getXXX()
疑問?request物件何時被建立?
在jsp中,不需要我們手動的例項化,直接使用的物件====》內建物件
內建物件 | 作用 | 對應的Java類 |
Page | 當前頁面 | This |
pageContext | 當前頁面上下文物件 | PageContext |
request | 請求物件 | HttpServletRequest |
response | 響應物件 | HttpServletResponse |
session | 會話物件 | HttpSession |
application | 應用程式物件 | ServletContext |
out | 輸出物件 | JspWriter |
config | 配置物件 | ServletConfig |
exception | 異常物件 | Throwable |
JSP執行流程
宣告成員變數和區域性變數 <% //宣告區域性變數 會在service方法中出現 int num1=5; int num2=10; %> <%! //宣告成員變數 會在 index_jsp.java類中出現 int num1=50; int num2=100; //定義方法 public int getSum(){ System.out.print(num1+num2); return num1+num2; } %>
<%! //成員變數 int initNum=0; int serviceNum=0; int destroyNum=0; public void jspInit(){ System.out.println("jspInit====>初始化執行了"+(++initNum)+"次"); //只有在使用者第一次訪問頁面的時候執行 } public void jspDestroy(){ System.out.println("jspDestroy====>銷燬執行了"+(++destroyNum)+"次"); //只有在關閉伺服器的時候執行 } %> <% // 只要是寫在這個 <%中的資料 務必在service方法中執行 System.out.println("jspInit====>初始化執行了"+(initNum)+"次"); System.out.println("jspDestroy====>銷燬執行了"+(destroyNum)+"次"); System.out.println("jspService====>service執行了"+(++serviceNum)+"次"); System.out.println("=========================================================="); // 使用者每訪問一次 執行一次 %>
二:JSP的資料互動
2.1:Request請求物件
1.登入 login.jsp頁面
<body>
<h1>登入頁面</h1>
<form action="doLogin.jsp" method="get">
<input type="text" name="userName" placeholder="請輸入使用者名稱"> <br/>
<input type="password" name="pwd" placeholder="請輸入密碼"><br/>
愛好:<br/>
<input type="checkbox" name="love" value="java">java<br/>
<input type="checkbox" name="love" value="sql">sql<br/>
<input type="checkbox" name="love" value="javaScript">javaScript<br/>
<input type="submit" value="提交資訊">
</form>
</body>
2. 處理頁面 doLogin.jsp
解決get請求方式亂碼治本的辦法
<body>
<h1>這是doLogin處理頁面</h1>
<%
//解決post請求方式亂碼治標的辦法 後續使用 過濾器Filter 根本上解決post請求亂碼的問題
request.setCharacterEncoding("utf-8");
//使用request請求物件 獲取使用者在login.jsp頁面輸入和選擇的內容
//通過form表單中的name屬性值獲取對應的value值
String userName= request.getParameter("userName");
String pwd= request.getParameter("pwd");
out.println("使用者名稱==》"+userName+"<br/>");
out.println("密碼==》"+pwd+"<br/>");
String [] loves= request.getParameterValues("love"); //獲取使用者選擇項
if(loves!=null&&loves.length>0){
for(String love:loves){
out.println(love+"<br/>");
}
}
%>
</body>
3. request的常用方法
getContextPath | 獲取web專案的相對路徑 |
getSchme | 獲取的協議名稱 |
getServerName | 獲取伺服器名稱 |
getServlerPort | 獲取伺服器埠號 |
getParameter | 獲取指定的請求引數值 |
GetParameterValues | 獲取指定的請求引數集合 |
GetSession | 獲取當前請求所在的session物件 |
GetCookies | 獲取所有的cookie陣列 |
SetAttribute | 向request作用域中儲存屬性和值 |
GetAttribute | 從request作用域中獲取指定屬性的值 |
SetCharacterEncoding | 設定請求的編碼格式 |
GetMethod | 獲取請求型別 |
GetRequestDispatcher | 獲取轉發器 |
2.2:Response響應物件
SetCharacterEncoding | 設定響應的編碼格式 |
addCookie | 新增cookie |
SetHeader | 設定訊息頭資訊 |
SetStatus | 設定狀態碼 |
SendRedirect | 重定向 |
SetContentType | 設定瀏覽器的資料型別 |
GetOutputStream | 獲取輸出到瀏覽器的位元組流物件 |
GetWriter | 獲取輸出到瀏覽器的字元流物件 |
2.3:轉發
特點:
01.轉發是伺服器的行為
02.URL地址不會變化
03.資料不會丟失
04.延長一次請求作用域
Aaa.jsp
<body>
<form action="Bbb.jsp" method="get">
<table>
<tr>
<td>使用者名稱</td>
<td><input type="userName" name="userName"></td>
</tr>
<tr>
<td>密碼</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登入">
</td>
</tr>
</table>
</form>
</body>
Bbb.jsp
<body>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (userName.equals("meng") && password.equals("3588105")) {
//
request.getRequestDispatcher("Ccc.jsp").forward(request, response);
}else{
out.print("賬號或者密碼不正確");
}
%>
</body>
Ccc.jsp
<body>
您好歡迎訪問
</body>
2.4:重定向
特點:
01.重定向是客戶端的行為
02.URL地址會變化,是最後一次請求的路徑
03.資料會丟失
04.至少兩次訪問伺服器
<body>
<form action="Bbb.jsp" method="get">
<table>
<tr>
<td>使用者名稱</td>
<td><input type="userName" name="userName"></td>
</tr>
<tr>
<td>密碼</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登入">
</td>
</tr>
</table>
</form>
</body>
這個是:Bbb.jsp<body>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (userName.equals("meng") && password.equals("3588105")) {
request.getRequestDispatcher("Ccc.jsp").forward(request, response);
}else{
out.print("賬號或者密碼不正確");
}
%>
</body>
<body>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (userName.equals("meng") && password.equals("3588105")) {
request.getRequestDispatcher("Ccc.jsp").forward(request, response);
}else{
out.print("賬號或者密碼不正確");
}
%>
</body>
<body>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (userName.equals("meng") && password.equals("3588105")) {
//1.通過響應告訴瀏覽器該搶救這樣的一個地址
//2.瀏覽器訪問指定的URL==== Ccc.jsp
response.sendRedirect("Ccc.jsp");
}else{
out.print("賬號或者密碼不正確");
}
%>
</body>
<body>
您好歡迎訪問 Ccc.jsp
</body>
總結:
request負責封裝客戶端請求,response封裝的是伺服器的響應重定向採用response.sendRedirect(url)實現,重定向行為發生於瀏覽器,位址列地址改變轉發採用request.getRequestDispatcher(url).forword(request,response)實現,轉發行為發生於伺服器,位址列地址不改變選擇進入
<body>
<a href="result.jsp?color=黃色">黃色</a>
<a href="result.jsp?color=綠色">綠色</a>
<a href="result.jsp?color=紫色">紫色</a>
<a href="result.jsp?color=黑色">黑色</a>
<a href="result.jsp?color=粉色">粉色</a>
</body>
<body>
您所選擇的是<%= request.getParameter("color") %>
</body>