程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 探索JSP中的 "9大內置對象!",探索jsp

探索JSP中的 "9大內置對象!",探索jsp

編輯:JAVA綜合教程

探索JSP中的 "9大內置對象!",探索jsp


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對象生命周期更長,類似於系統的“全局變量”。

pageContext 

pageContext 對象的作用是取得任何范圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

config 

config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中為應用程序環境中的Servlet程序和JSP頁面提供初始化參數。

page 

page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。

exception

exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。excepation對象和Java的所有對象一樣,都具有系統提供的繼承結構。exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。

 

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有興趣的可以進行交流哦!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved