JavaWeb —— JSP 總結

来源:https://www.cnblogs.com/798911215-Darryl-Tang/archive/2018/06/01/9123209.html
-Advertisement-
Play Games

JSP總結 靜態網頁 在網站設計中,純粹HTML(標準通用標記語言下的一個應用)格式的網頁通常被稱為“靜態網頁”,靜態網頁是標準的HTML文件,它的文件擴展名是.htm、.html 。靜態網頁是網站建設的基礎,早期的網站一般都是由靜態網頁製作的。靜態網頁是相對於動態網頁而言,是指沒有後臺資料庫、不含 ...


                                       JSP總結

靜態網頁
  在網站設計中,純粹HTML(標準通用標記語言下的一個應用)格式的網頁通常被稱為“靜態網頁”,靜態網頁是標準的HTML文件,它的文件擴展名是.htm、.html  。靜態網頁是網站建設的基礎,早期的網站一般都是由靜態網頁製作的。靜態網頁是相對於動態網頁而言,是指沒有後臺資料庫、不含程式和不可交互的網頁。

動態網頁
  網頁文件里包含了程式代碼,通過後臺資料庫與WEB伺服器的信息交互,由後臺資料庫提供實時數據更新和數據查詢服務。動態網站體現在網頁一般是以asp,jsp,php,aspx等結束。

兩者區別
  網頁製作使用的製作語言:靜態網頁使用語言:超文本標記語言(標準通用標記語言的一個應用); 動態網頁使用語言:超文本標記語言+ASP或超文本標記語言+PHP或超文本標記語言+JSP等。
  程式是否在伺服器端運行,是重要標誌。在伺服器端運行的程式、網頁、組件,屬於動態網頁,它們會隨不同客戶、不同時間,返回不同的網頁, ASP、PHP、JSP、ASPnet、CGI等。運行於客戶端的程式、網頁、插件、組件,屬於靜態網頁,例如 html 頁、Flash、JavaScript、VBScript等等,它們是永遠不變的。

常用的動態網頁技術
  ASP(Active Server Page)
  ASP技術是基於.NET平臺的一種動態網頁技術。它有非常強大的後臺處理能力,但卻有一些安全性、穩定性、跨平臺性的問題。ASP只支持Windows平臺,對Linux、Unix不支持。

  PHP(Hypertext Preprocessor)
  PHP原始為Personal Home Page的縮寫,已經正式更名為(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP是HTML內嵌式的語言,這一點類似於ASP,並且PHP可以跨平臺。但PHP的資料庫介面不規範。但是對每種資料庫介面的開發都不同極大地加重了開發者的負擔,並且缺少企業級應用的支持。

  JSP/Servlet(Java Server Page)
  JSP技術在基於java的平臺上廣泛地使用,是進行Java web開發的一種核心組件。JSP頁面由HTML代碼和嵌入在其中的Java腳本組成。JSP可以一次編寫,到處運行。這一點JSP比PHP技術更有優勢,在不同的系統平臺上運行,代碼不用做任何修改。

什麼是JSP
  JSP (Java Server Pages) 是java服務頁面,可以在HTML中嵌入Java腳本代碼。
  JSP頁面元素:
  靜態內容:HTML靜態文本
  指 令:以"<%@" 開始,以"%>" 結束
  小腳本:<%Java代碼%>
  表達式:<%=Java表達式%>
  聲明:<%! 方法%>
  註釋 :<!-- 客戶端可以查看到-->,<%-- 客戶端不能查看到--%>

JSP(一) 三大指令
  ① page 指令 
    通過設置內部的多個屬性定義整個頁面的屬性
    語法:
    <%@ page 屬性1="屬性值" 屬性2="屬性值1,屬性值2"… 屬性n="屬性值n"%>

  ② include 指令(靜態包含)
    將一些共性的內容寫入一個單獨的文件中,然後通過include指令引用該文件
    include(靜態包含):這種會將兩個頁面編譯成一個class,裡面的資源可以共用。(先包含再編譯)

  ③ taglib 指令
    在JSP頁面中導入JSTL標簽庫,替換JSP中的Java代碼片段
    語法:
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="別名"%>

JavaBean
  JavaBean的優勢
    解決代碼重覆編寫,減少代碼冗餘
    功能區分明確
    提高了代碼的維護性
  JavaBean 分為: 數據Bean 和 業務Bean 
    數據Bean : 私有的屬性,預設的空構造,set、get方法  就是Java中的屬性類
    業務Bean : 使用數據Bean。

JSP(二)七大動作
  jsp動作(action)是指在運行期間的命令,常見的有:
  jsp:useBean
    jsp:setProperty
    jsp:getProperty
  jsp:include
  jsp:forward
    jsp:param
    jsp:plugin
  ① include
    include 動態包含(分別編譯):用jsp:include動作實現,它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。flush屬性: 用true ,表示頁面可刷新。預設為false;在使用include命令時除非該命令被執行到,否則它是不會被Tomcat等JSP Engine編譯。
    語法: <jsp: include page="頁面路徑" flush="true" />

  jsp:include(動態包含):這種會編譯成兩個獨立的class,裡面的資源無法共用。(先編譯再包含)
  include(靜態包含):這種會將兩個頁面編譯成一個class,裡面的資源可以共用。(先包含再編譯)
  靜態include和動態include的區別?
    相同點:都會將頁面引入到另一個頁面中。
    不同點:
      靜態include會將引用的jsp文件和當前的jsp文件生成為一個class文件,所以jsp中的變數是可以互相訪問,兩個頁面中應儘量避免命名衝突。
      動態include會生成兩個完全不同的class文件,所以jsp中的變數不可以互相訪問。
      靜態包含不能傳參
    適用場合:
      靜態include不會檢查所含文件的變化,適用於包含靜態頁面,直接將內容先包含後處理。
      動態include總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數,先編譯之後再進行處理。

  ② useBean
    useBean動作(jsp頁面使用javaBean的第二種方式),作用域預設為page(本頁面有效)
    語法: <jsp:useBean id="對象名" class="包名.類名" scope="作用範圍(page/request/application/session)"/>
    scope屬性用於指定JavaBean實例對象所存儲的域範圍,其取值只能是page、request、session和application四個值中的一個,其預設值是page。

  ③ getProperty
    getProperty動作(name為useBean動作中的id).從對象中取出屬性值:
    語法: <jsp:getProperty name="javaBean對象" property="javaBean對象屬性名" />

  ④ setProperty
    setProperty動作(name為useBean動作中的id):
    為對象設置屬性值:
    語法: <jsp:setProperty name="javaBean對象" property="javaBean對象屬性名" value="值"/>

  ⑤ param
    param動作:傳遞參數,到達跳轉頁面可以通過 request.getParameter("參數名")方式取出參數值
    語法: <jsp:include page="轉向頁面的url" >
           <jsp:param name="參數名1" value="參數值1"></jsp:param>
           <jsp:param name="參數名2" value="參數值2"></jsp:param>
      </jsp:include>
    或者: 
      <jsp:forward page="轉向頁面的url">
            <jsp:param name="參數名1" value="參數值1"></jsp:param>
           <jsp:param name="參數名2" value="參數值2"></jsp:param>
      </jsp:forward>

   ⑥ forward 動作:轉發頁面
    語法: <jsp:forward page="login.jsp" />  相當於 request.getRequestDispatcher("轉發頁面").forward(request,response);

   ⑦ plugin
    plugin動作:<jsp:plugin>:用於指定在客戶端運行的插件,不常用

JSP(三)九大內置對象
   JSP內置對象是 Web容器創建的一組對象
   JSP內置對象的名稱是JSP的保留字,JSP內置對象是可以直接在JSP頁面使用的對象,無需使用“new”,直接使用。
   JSP中一共預先定義了9個這樣的對象,分別為:request、response、session、application、out、pagecontext、config、page、exception。
  ①  request 對象 (作用域: 一次請求)
    request 對象是 javax.servlet.httpServletRequest 類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到伺服器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。
   常用方法:  
    String getParameter(String name) 根據表單組件名稱獲取提交數據
    String[] getParameterValues(String name) 獲取表單組件對應多個值時的請求數據
    void setCharacterEncoding(String charset) 指定每個請求的編碼
    RequestDispatcher getRequestDispatcher(String path) 返回一個RequestDispatcher對象,該對象的forward( )方法用於轉發請求
    void setAttribute(String key,Object value) 設置鍵對應屬性值
    Object getAttribute(String key) 獲取鍵對應屬性值

  ②  response 對象
    response 對象是 javax.servlet.http.httpServletResponse 類型的對象。response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。
    常用方法: 
      void sendRedirect (String location) 將請求重新定位到一個不同的URL,即頁面重定向

  頁面的轉發
  轉發的作用:在多個頁面交互過程中實現請求數據的共用
  轉發的實現:RequestDispatcher對象.forward()方法

  重定向與轉發的區別
  區別一:
    重定向時瀏覽器上的網址改變
    轉發是瀏覽器上的網址不變
  區別二:
    重定向實際上產生了兩次請求
    轉發只一次請求
    重定向:發送請求 -->伺服器運行-->響應請求,返回給瀏覽器一個新的地址與響應碼-->瀏覽器根據響應碼,判定該響應為重定向,自動發送一個新的請求給伺服器,請求地址為之前返回的地址-->伺服器運行-->響應請求給瀏覽器
    轉發:發送請求 -->伺服器運行-->進行請求的重新設置,例如通過request.setAttribute(name,value)-->根據轉發的地址,獲取該地址的網頁-->響應請求給瀏覽器
  區別三:
  重定向時的網址可以是任何網址

  轉發的網址必須是本站點的網址

  轉發
    轉發是在伺服器端發揮作用,通過forward()將提交信息在多個頁面間進行傳遞
    客戶端瀏覽器的地址欄不會顯示出轉向後的地址
    轉發可以傳遞參數
    語法: request.getRequestDispatcher("轉髮網址").forward(request,response);
  重定向
    重定向是在客戶端發揮作用,通過請求新的地址實現頁面轉向
    在地址欄中可以顯示轉向後的地址
    重定向不能進行參數傳遞
    語法: response.sendRedirect("重定向網址");

  ③ session 對象(作用域: 一次會話)
    session 對象是 javax.servlet.http.HttpSession 類型的對象。session 對象是由伺服器自動創建的與用戶請求相關的對象。伺服器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式為 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅局限於字元串類型。
    常用方法:
      void setAttribute(String key,Object value) 以key/value的形式保存對象值
      Object getAttribute(String key) 通過key獲取對象值
      void invalidate() 設置session對象失效
      String getId() 獲取sessionid
      void setMaxInactiveInterval(int interval) 設定session的非活動時間
      int getMaxInactiveInterval() 獲取session的有效非活動時間(以秒為單位)
       void removeAttribute(String key) 從session中刪除指定名稱(key)所對應的對象

  ④ application 對象(作用域: 一次服務)
    application 對象是 javax.servlet.ServletContext 類型的對象。application 對象可將信息保存在伺服器中,直到伺服器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變數”。
    常用方法: 
      void setAttribute(String key,Object value) 以key/value的形式保存對象值
      Object getAttribute(String key) 通過key獲取對象值
      void removeAttribute(String name) 根據屬性名稱刪除對應的屬性
      String getRealPath(String path) 返回相對路徑的真實路徑
      Enumeration getAttributeNames() 獲取所的屬性名稱
      String getContextPath() 獲取當前Web應用程式的根目錄
      String getInitParameter(String name) 根據初始化參數名稱,獲取初始化參數值

  ⑤ out 對象
    out 對象是 javax.servlet.jsp.JspWriter 類型的對象。out 對象用於在Web瀏覽器內輸出信息,並且管理應用伺服器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,為其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。

  ⑥ pageContext 對象
    pageContext 對象是 javax.servlet.jsp.PageContext 類型的對象。pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
    常用方法: 
      void setAttribute(String key,Object value) 設置屬性值
      Object getAttribute(String key) 獲取屬性值
      void removeAttribute(String key) 移除指定屬性
      pageContext 本身也是一個域對象,可以操作其他三個域對象(request,response,application)的數據
    操作其他域對象的方法:
      void setAttribute(String key,Object value,int Scope)
      Object getAttribute(String key,int Scope)
      void removeAttribute(String key,int Scope)
      Scope:
        PageContext.PAGE_SCOPE;
        PageContext.REQUEST_SCOPE;
        PageContext.SESSION_SCOPE;
        PageContext.APPLICATION_SCOPE;


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

  ⑧ page 對象(作用域: 一個頁面)
    page 對象是 java.lang.Object 類型的對象。page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet介面引用的變數,類似於Java編程中的 thi  ⑨ exception 對象

    exception 對象是 java.lang.Throwable 類型的對象。exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。
    常用方法: 
      String getMessage() 返回描述異常的消息
      String toString() 返回關於異常的簡短描述消息
      void printStackTrace() 顯示異常及其棧軌跡
      Throwable FillInStackTrace() 重寫異常的執行棧軌跡

  在頁面設置支持中文字元的字元集
    亂碼處理方式一(以GET方式提交數據時)
      <%
            //讀取用戶名和密碼
           String name = request.getParameter("name");
            //對請求數據進行字元編碼
            name = new String(name.getBytes("ISO-8859-1"), "utf-8");
             %>

    亂碼處理方式二(以POST方式提交數據時)
      <%    
           //設置讀取請求信息的字元編碼為UTF-8
           request.setCharacterEncoding("utf-8");  
           //讀取用戶名和密碼
           String name = request.getParameter("name");
            String pwd = request.getParameter("pwd");
          %>

    亂碼處理方式三(以GET方式提交數據時)
      <!--在Tomcat目錄結構\conf\server.xml中設置字元集-->
         <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

cookie的簡介

  cookie是Web伺服器保存在客戶端的一系列文本信息
  cookie的作用
    對特定對象的追蹤
    統計網頁瀏覽次數
    簡化登錄
  安全性能:容易信息泄露
  在JSP中使用cookie
    創建cookie對象
      Cookie newCookie = new Cookie(String key,Object value);
    寫入cookie
      response.addCookie(newCookie);
    讀取cookie
      Cookie[] cookies = request.getCookies();
    常用方法:
      void setMaxAge(int expiry) 設置cookie的有效期,以秒為單位
      void setValue(String value) 在cookie創建後,對cookie進行賦值
      String getName() 獲取cookie的名稱
      String getValue() 獲取cookie的值
      String getMaxAge() 獲取cookie的有效時間,以秒為單位

  Session和cookie的區別與聯繫
     cookie是把用戶的數據寫在用戶本地瀏覽器上, 其他網站也可以掃描使用你的cookie,容易泄露自己網站用戶的隱私,而且一般瀏覽器對單個網站站點有cookie數量與大小的限制。
     Session是把用戶的數據寫在用戶的獨占session上,存儲在伺服器上,一般只將session的id存儲在cookie中。但將數據存儲在伺服器對伺服器的成本會高。
     session是由伺服器創建的,開發人員可以在伺服器上通過request對象的getsession方法得到session
     一般情況,登錄信息等重要信息存儲在session中,其他信息存儲在cookie中

session的實現原理

    伺服器會為每一個訪問伺服器的用戶創建一個session對象,並且把session對象的id保存在本地cookie上,只要用戶再次訪問伺服器時,帶著session的id,伺服器就會匹配用戶在伺服器上的session,根據session中的數據,還原用戶上次的瀏覽狀態或提供其他人性化服務。

cookie與session的對比
  session
    保存在伺服器端用戶信息
    session中保存的是Object類型
    隨會話的結束而將其存儲的數據銷毀
    保存重要的信息
  cookie
    在客戶端保存用戶信息
    cookie保存的是 String類型
    cookie可以長期保存在客戶端
    保存不重要的用戶信息


---------------------------------------------------------------JSP完結-----------------------------------------------------------


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

-Advertisement-
Play Games
更多相關文章
  • public final class Array 成員方法: public static String toString(int[] a) 把數組轉成字元串 public static void sort(int[] a) 對數組進行排序 public static int binarySearch ...
  • Python數據類型之字典(Dictionary) 字典特征 1. 特征 可變、無序、映射、鍵值對 2. 形式 {key0:value0, key1:value1, key2:value3, ..., } key :唯一性,key的數據類型必須是固定不可變的,如數字、字元串、元組、凍結集合 valu ...
  • Java條件語句之 switch 當需要對選項進行等值判斷時,使用 switch 語句更加簡潔明瞭。例如:根據考試分數,給予前四名不同的獎品。第一名,獎勵筆記本一臺;第二名,獎勵 IPAD 2 一個;第三名,獎勵移動電源一個;最後一名獎勵 U 盤一個。 語法: 執行過程:當 switch 後表達式的 ...
  • 一,pycharm 1,在官網下載pycharm,版本選5.0,一定要下載專業版。 2,註冊方法:註冊時選擇 license server,填入:http//idea.qinxi1992.cn,然後點擊ok。 若不成功,則填入:http//idea.lanyus.com,然後點擊 ok。 3,創建新 ...
  • 實現Servlet容器(Servlet容器根據web.xml文件調用對應的Servlet類) Servlet(狹義解釋是Servlet介面,但更常見的解釋是實現Servlet的所有類) 介紹:Servlet容器是用來管理Servlet, 過程:瀏覽器輸入URL地址,伺服器接收到這個地址,根據瀏覽器的 ...
  • 1 模板包含include 主體結構 (導入整個模板,直接渲染不可修改) {% include('模板名稱') %} {% include('目錄/模板名稱') %} 功能: 其功能就是將另一個模板載入到當前模板中,並直接渲染在當前位置上,而且是一次渲染整個模塊內容 註意: 當include模板文件 ...
  • 描述 主要功能有: 新建,打開,保存,另存為,列印, 編輯,撤銷,,拖放,xml配置文件讀寫,字體更改,查找替換 菜單欄,工具欄,狀態欄的實現 如下圖所示: 效果如下所示: 源碼下載地址: https://download.csdn.net/download/qq_37997682/10453294 ...
  • 自己理解的思路如下所示: 從第二個節點開始,先記錄下一個節點,把第二個節點移到頭節點之前,頭節點變為移動的這個節點之前記錄的節點變為接下來要移動的節點用for迴圈重覆最後把原來頭節點變成尾節點(*next指向NULL)返回鏈表 的頭節點 c語言實現代碼如下: struct stu *reserve( ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...