1. 程式人生 > >【WEB程式設計】web程式設計的一些基本知識

【WEB程式設計】web程式設計的一些基本知識

動態網頁與靜態網頁的區別:

     動態網頁呈現的使用者資料隨著使用者、時間、執行環境改變而改變。客戶看到的網頁內容是動態變化的。

•javaScript程式(用於提高頁面與使用者的互動能力,其最大的特點就是可以讀/寫瀏覽器建立的DOM樹,可以對瀏覽器端的滑鼠鍵盤事件作響應,可以對採集的資料作驗證,可以檢測瀏覽器的型別等。瀏覽器內嵌有JavaScript引擎,專門執行JavaScript程式碼。)
• AJAX:一種實現動態網頁的技術,使用JavaScript的XMLHttpRequest 物件向伺服器發出HTTP請求,並提交資料(JSON格式);伺服器處理請求並返回響應資料(XML格式或txt格式或JSON格式);瀏覽器不必等待伺服器的響應,非同步接收響應資料,並區域性更新頁面的DOM樹,從而實現頁面的區域性更新。
• JQuery:一個功能豐富的小型JavaScript程式庫,可快速實現DOM操縱、事件處理、動畫、AJAX呼叫等功能。

1.表示層的設計

1.1表示層設計

整體風格設計
    版面佈局:上-中-下;左-中-右
    色彩、字型字型
    控制元件大小及外觀樣式、控制元件命名風格
    超連結樣式
    區域性頁面設計:
    頁面功能目標
    頁面控制元件佈局
資料提交方案:
    提交方式:超連結|表單;
    提交方法:GET|POST;
    引數名稱、長度、型別;
    接受資料的Servlet URL;
    模型類或領域物件或值物件;
頁面型別:
    靜態   html
    動態   jsp

1.2表示層快取控制與字元編碼

1.2.1如何禁止瀏覽器對頁面的緩衝
 對純html檔案,在<head>標籤內加如下
    <meta http-equiv=“Pragma”  content=“no-cache” /> 
    <meta http-equiv=“Cache-Control”  content=“no-cache/> 
    <meta http-equiv=“Expires”  content=“0” /> 
對JSP程式碼,在 <head>加:
    <%    
    response.setHeader("Cache-Control","no-cache");    
    response.setHeader("Pragma","no-cache");    
    response.setDateHeader ("Expires", 0);  
      %> 
1.2.3字元編碼設定

○ 對純html檔案,在標籤內加如下
--告訴瀏覽器,用UTF-8解析頁面
○ 對JSP程式碼,在 加:
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%> --伺服器用pageEncoding指定的編碼把jsp檔案翻譯成JAVA原始碼(後面再由pageEncoding指定的編碼轉換為位元組碼的UTF-8 )
<%@ page contentType=”text/html;charset=UTF-8”%> --告訴瀏覽器,用UTF-8解析頁面

2.B/S架構-控制層

涉及到的內容如下:

• 控制器〔控制層〕設計
• Servelt名稱、URL
    需要接收的引數
    封裝資料的值物件
• 業務層介面
        頁面跳轉
        跳轉方式:請求轉發|頁面重定向
        引數傳遞:引數名稱、引數共享方案〔頁面、會話、全域性〕
        是否考慮Cookie關閉的影響|URL重寫。

2.1 獲取Servlet的配置資訊

2.2 Servlet內流程控制

• 轉發與包含 
請求轉發是Servlet(源元件)先對客戶端請求做一些預處理操作,然後把請求轉發給其它Web元件來(目標元件)完成生成響應結果在內的後續操作。
請求包含是Servlet(源元件)把其他Web元件(目標元件)生成的響應結果包含在自身生成的響應結果中。 
• 重定向是伺服器對客戶端的請求做出響應,響應的結果是讓客戶端瀏覽器去重新發出對另外一個URL的訪問請求。

方式1:RequestDispatcher
呼叫getRequestDispatcher(URI);
Forward(request,response);轉發
方式2:Response.sendRedirect();
○ 注意:可以重定向到任意WEB應用中的Servlet、Jsp和Html。與目的資源只共享Session。在瀏覽器位址列顯示目的地址。
○ 可以通過URL地址和HttpSession物件傳遞資料到目的資源。URL地址後附加的中文資料需要用URLEncoder.encode()方法編碼。
○ 如果考慮瀏覽器關閉Cookie,應該對URL用response.encodeRedirectURL()方法編碼。

3.會話跟蹤

3.1會話與會話跟蹤:

從瀏覽器第一次訪問某一個站點開始,到瀏覽器關閉這段時間內,瀏覽器與站點伺服器之間的多次“請求-應答”操作稱為一個會話。
一次“請求-應答”由一個連線完成;一個會話可能出現由多個連線組成。一個連線結束後,該連線被關閉。
伺服器如何區分來自瀏覽器的多個連線哪些是同一個瀏覽器(即同一個使用者)發出的?即伺服器如何追蹤一個使用者的一些列訪問?
伺服器端跟蹤瀏覽器連線訪問的技術稱為會話跟蹤。會話跟蹤的本質是在多個請求中儲存使用者的屬性(狀態),也成為狀態管理。

方式1:通過隱藏欄位,在表單中附加隱藏type=”hidden”
方式2:使用Cookie技術–通過Cookie存放使用者身份資訊,伺服器可以追蹤使用者,不安全,會因為使用者關閉而失效
方式3:使用Session物件
這裡寫圖片描述

資料存取:
    serAttribute(name,value);
    getAttribute(name); Object要做型別轉轉
    removeAttribute(name)
Session失效
    Invalidate():立即失效,資料丟失
    setMaxInactiveInterval(int inteval);設定會話失效的最長時間
【注】如果咩有設定失效時間間隔,預設瀏覽器關閉後就失效。
可預防訪問攻擊-----(這個不懂)

方式4URL地址重寫
把Session的ID直接附加到要訪問的各個URL後面。
Response.encodeURL(URI):在URI後面加上Session ID;
Response.encodeRedirectURL(URL):在URI後面加上Session ID,專門為重定向服務。
評價:與Session合用,完美方案,

這裡寫圖片描述
這裡寫圖片描述

4 過濾器

○ 過濾器是駐留在伺服器端的Web元件,它可以擷取客戶端和伺服器目標資源之間的請求和響應資訊,並對這些資訊進行處理。
○ 過濾器是請求到達一個目標資源前的預處理程式,和/或響應離開目標資源後的後處理程式。
○ 利用過濾器可以實現多種功能,例如編碼轉化、資料過濾和替換、身份驗證、資料加密、資料壓縮、日誌記錄等。

4.1過濾器解決中文亂碼問題

     對Post方法提交的資料,在呼叫request物件的getParameter()和getParameterValues獲取引數值前,先呼叫setCharacterEncoding(charset),可以解決中文亂碼問題,但對於GET方法提交的資料無效。最好的解決方案是使用基於包裝器的過濾器。

5 關於地址的一些問題:

5.1 路徑

路徑的基本概念
在Java Web開發中,路徑分為絕對路徑和相對路徑
絕對路徑
為某一資源(HTML、JSP或Servlet)在伺服器上的真正的路徑,即物理路徑。
相對路徑
為相對與某個基準目錄的路徑。在Servlet中,“/”代表Web應用的根目錄,“./”代表當前目錄,“../”代表當前目錄的上一級目錄。

1)連結地址、表單提交、重定向、轉發的路徑四種情況

<a href=""></a>
<form action=" "></form>
Request.getDispatcher();
Response.sendRedirect();

2)兩種路徑表示方法

相對路徑 : <a href="xxx.do"></a>
【說明】好幾次看到好友寫.do字尾的連結,後來檢視一下原來這是struct框架定義的,表示交給Servlet處理的意思;
絕對路徑:<a href="/project/xxx.do"></a>

6.Servlet的共享變數(這個地方還不太清楚,需要進一步學習)

這裡寫圖片描述

7 jsp

JSP標籤-指令
taglib指令:匯入標籤庫
<%@taglib uri="" prefix=""%>
jsp標籤-動作
jsp標籤-

7.1 jsp中隱含的物件

Request\response\out\seesion\application\page\config
隱含的session物件
這裡寫圖片描述
客戶首次訪問伺服器上的JSP頁面時,JSP引擎產生session物件,並分配給它一個String型別的ID,並將其傳送到客戶端存入Cookie中,這樣session物件和客戶端之間建立了一一對應關係,客戶在該伺服器不同網頁間轉換或從其他伺服器回到該伺服器時,不分配給客戶新的session,直到客戶關閉瀏覽器,分配給客戶的session物件被取消。
如果客戶端不支援Cookie,伺服器無法將session ID寫到客戶端。伺服器無法識別同一個客戶端。解決該問題的有效方法是URL重寫技術。

str=response.encodeURL("id2_1.jsp");
<a href="<%=str%>"></a>

儲存和獲得session物件中的資料是JSP頁面常做的工作,需要使用getAttribute()和setAttribute()方法。

隱含物件application:全域性變數
page物件:相當於this,表示jsp頁面本身,servlet的一個例項

8 EL表示式:代替jsp中輸出表達式<%= %>

EL表示式以<{表示式}
EL可以訪問或獲取作用域(pageScope、requestScope、sessionScope、applicationScope)中的物件
${範圍.物件.Key} – 用於HashMap物件或JavaBean

${範圍.物件[屬性]}—通用
如果預設範圍,則哪找從小到大的範圍順序去搜索物件

9 關於web開發一些其他技術:ajax\js\jquery

Ajax(Asynchronous javascript and xml)使用js,xml,css,dom,json實現瀏覽器xiangweb伺服器傳送一步請求,可區域性重新整理頁面

• 使用JavaScript物件XMLHttpRequest模擬瀏覽器,向Web伺服器發出Http請求,同時建立一個Ajax引擎來監視Web伺服器的響應。
• 當Ajax引擎監視到Web伺服器的響應結束後,使用JavaScipt程式碼基於響應資訊〔Txt串、XML文件、JSON物件〕操縱頁面的DOM樹,從而實現頁面的區域性重新整理。