1.什麼是JSP內置對象?
jsp內置對象就是Web容器創建的一組對象,我們都知道Tomcat可以看成是一種Web容器,所以我們可以知道所謂的內置對象Tomcat創建的,使用內置對象時可以不適用new關鍵字,
直接使用即可.
2.什麼是內置對象?
解析:就是Web容器創建的一組對象,當Tocmat啟動時,這組對象在Tomcat服務器啟動的時候加載到內存,可以用戶直接使用.
3.JSP內置對象都有哪些?
out(常用) out 對象用於在Web浏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區。在使用 out 對象輸出數據時,可以對數據緩沖區進行操作,及時清除緩沖區中的殘余數據,為其他的輸出讓出緩沖空間。待數據輸出完畢後,要及時關閉輸出流。 request(常用) request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。 response(常用) response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。 session(常用) session 對象是由服務器自動創建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式為 “Key/value”。 session對象的value可以使復雜的對象類型,而不僅僅局限於字符串類型。 application(常用) application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變量”。
request如何在另一個頁面拿到值,並且解決post提交的中文亂碼問題!
<%@ 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 '1.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> <form action="index.jsp" method="post"> <input typr="text" name="txtName" /><br/> <input type="password" name="txtPwd" /><br/><input type="submit" name="Login" /> </form> </body> </html>
另一個index.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 '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>
<%
<!-- 用post方式提交解決亂碼的方法 -->
request.setCharacterEncoding("UTF-8");
%> <%
<!-- request.getParameter(form表單中文本框的name名字); 用來拿到提交過來的文本框的屬性 -->
String name=request.getParameter("txtName"); String pwd=request.getParameter("txtPwd"); %> <%=name %><br/> <%=pwd %> </body> </html>
運行結果如下:用戶名和密碼輸入的都是123 (當然,沒有做邏輯判定了 嘻嘻)
當點擊提交之後,跳轉到index.jsp頁面:
結果就是:
request轉發的方法
<!-- 2.jsp頁面 -->
<% if(request.getParameter("txtName").equals("123")){ String str=request.getParameter("txtName"); request.setAttribute("name", str); //轉發 request.getRequestDispatcher("index.jsp").forward(request, response); } %>
我們可以看到,通過中轉站2.jsp進行判定通過之後,轉發到歡迎頁面,但是URL中顯示的還是2.jsp
response重定向方法
? 1 2 3 4 5 6 7 8<%
if
(request.getParameter(
"txtName"
).
equals
(
"123"
)){
String str=request.getParameter(
"txtName"
);
request.setAttribute(
"name"
, str);
//重定向
response.sendRedirect(
"index.jsp"
);
}
%>
通過重定向跳轉之後,我們可以看到URL地址中變成index.jsp頁面.
request轉發和response重定向的區別
(1).Request Dispatcher.forward()是容器中控制權的轉向,在客戶端浏覽器地址欄中不會顯示出轉向後的地址;
(2).response.sendRedirect()則是完全的跳轉,浏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從浏覽器的地址欄中可以看到跳轉後的鏈接地址。
前者更加高效,在前者可以滿足需要時,盡量使用RequestDispatcher.forward()方法.
注:在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用HttpServletResponse.sendRequest()方法。
out方法的使用:
<% out.print("我是out內置對象"); %>
其運行結果是:
session的使用方法:
<!-- 一個網頁中把變量username以username為名字保存在session上--> <%session.setAttribute("username",username);%> <!-- 在另一個頁面中通過getAttribute方法取得username的值--> <%String username = (String)session.getAttribute("username");%> <!-- "username"是傳遞變量的名字 username 是變量--> <!-- session是一次會話只要浏覽器不關閉就不會關閉會話 一般默認保存30分鐘可以根據自己的需要更改-->
application的使用方法
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <html> <head> <title>My JSP 'ServletContextAttribute.jsp' starting page</title> </head> <body> <% application.setAttribute("name","Hello") ; application.removeAttribute("name") ; %> </body> </html> ServletContextListenerDemo.java: package org.lxh.listener.app; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ServletContextListenerDemo implements ServletContextAttributeListener, ServletContextListener { public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("** 增加屬性:" + arg0.getName() + " --> " + arg0.getValue()) ; } public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("** 刪除屬性:" + arg0.getName() + " --> " + arg0.getValue()) ; } public void attributeReplaced(ServletContextAttributeEvent arg0) { System.out.println("** 替換屬性:" + arg0.getName() + " --> " + arg0.getValue()) ; } public void contextDestroyed(ServletContextEvent arg0) { System.out.println("** 容器銷毀:" + arg0.getServletContext().getRealPath("/")); } public void contextInitialized(ServletContextEvent arg0) { System.out.println("** 容器初始化:" + arg0.getServletContext().getRealPath("/")); } }
如若轉載,請標明 @小小菜鳥,飛得高
本人QQ是 : 1878321819
對jsp/servlet有興趣的可以進行交流哦!