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

来源:http://www.cnblogs.com/shouce/archive/2016/06/08/5569152.html
-Advertisement-
Play Games

1.什麼是JSP內置對象? jsp內置對象就是Web容器創建的一組對象,我們都知道Tomcat可以看成是一種Web容器,所以我們可以知道所謂的內置對象Tomcat創建的,使用內置對象時可以不適用new關鍵字, 直接使用即可. 2.什麼是內置對象? 解析:就是Web容器創建的一組對象,當Tocmat啟 ...


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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、CAS和synchronized適用場景 1、對於資源競爭較少的情況,使用synchronized同步鎖進行線程阻塞和喚醒切換以及用戶態內核態間的切換操作額外浪費消耗cpu資源;而CAS基於硬體實現,不需要進入內核,不需要切換線程,操作自旋幾率較少,因此可以獲得更高的性能。 2、對於資源競爭嚴重 ...
  • Python支持四種不同的數值類型,包括int(整數)long(長整數)float(浮點實際值)complex (複數),本文章向碼農介紹python 四種數值類型,需要的朋友可以參考一下。 數字數據類型存儲數值。他們是不可改變的數據類型,這意味著改變數字數據類型的結果,在一個新分配的對象的值。Nu ...
  • 我們可以用groovy編寫日常的批處理腳本,類似windows下的bat或者unix下的shell。其具體的編寫方式非常簡單,比如我們想要執行一個dir的命令,只要編寫一個test.groovy,其中內容為: println 'cmd /c dir'.execute().text 因為dir這個命令 ...
  • //資源和認證伺服器不相同http://xxxx:8080/flowAuth/oauth/authorize?client_id=jerry&redirect_uri=http%3a%2f%2fxxxx%3a8080%2fAuthProvider%2ftest%2findex.do&response ...
  • python3+任務計劃實現的人人影視網站自動簽到 這是一個自動化程度較高的程式,運行本程式後會從chrome中讀取cookies用於登錄人人影視簽到, 並且會自動添加一個windows 任務計劃,這個任務計劃每天下午兩點會執行本程式進行簽到。 sys.executable == 'C:\\Pyth ...
  • list 是 Python 中使用最頻繁的數據類型, 標準庫裡面有豐富的函數可以使用。不過,如果把多維列表轉換成一維列表(不知道這種需求多不多),還真不容易找到好用的函數,要知道Ruby、Mathematica、Groovy中可是有flatten的啊。如果列表是維度少的、規則的,還算好辦例如: li ...
  • 其實php開發中的中文編碼並沒有想像的那麼複雜,雖然定位和解決問題沒有定規,各種運行環境也各不盡然,但後面的原理是一樣的。瞭解字元集的知識是解決字元問題的基礎。 PHP程式設計中中文編碼問題曾經困擾很多人,導致這個問題的原因其實很簡單,每個國家(或區域)都規定了電腦信息交換用的字元編碼集,如美國的 ...
  • 一、重載(overload)指函數名相同,但是它的參數表列個數或順序,類型不同。但是不能靠返回類型來判斷。(1)相同的範圍(在同一個作用域中) ;(2)函數名字相同;(3)參數不同;(4)virtual 關鍵字可有可無。(5)返回值可以不同; 二、重寫(也稱為覆蓋 override)是指派生類重新定 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...