jsp 入門

注意事項:

  • 設置屬性時使用public 聲明屬性,調用時使用 類名.屬性名 進行操做

Servlet

  • Servlet生命週期:
    1. Servlet對象僅在第一次請求時建立,全部客戶端共享這一個對象。任什麼時候候同一個servlet類都只有一個servlet對象。
    2. HttpServlet中init方法,僅在建立servlet時執行一次。
    3. service方法負責調用doGet. doPost方法,每次請求都會執行。
    4. destroy方法當servlet被銷燬時執行。當服務器停機. 重啓. 從新加載項目servlet被銷燬。
    5. 注意:servlet中的成員變量(類的屬性)是全部客戶端共享。


  • HttpServletRequest——請求,用來獲取客戶端發送的數據。
    • HttpServletRequest.getParameter("input表單的name值")方法獲取。
    • 獲取複選框的值:getParameterValues("input表單的name值")。
    • getParameter方法返回String,getParameterValues方法返回的是String[]數組。
    • HttpServletRequest.getPramarter("參數名"). getParameterValues("參數名") 獲取請求傳遞的參數值。
    • getRequstDispatch("資源地址")該方法返回Dispatch對象,利用Dispatch對象的forward(request,response)方法實現服務器跳轉.
  • 地址欄傳參(超連接傳遞參數):


  • HttpServletResponse——響應,服務器向客戶端發送數據。
    • 經過response對象獲取輸出流(PrintWriter),經過HttpServletResponse.getWriter()方法獲取。
      • request範圍存儲數據:
        • 使用requst.setAttribute("key",Object對象)方法存儲,使用requst.getAttribute("key")方法獲取存儲對象,返回的是Object類型須要自行轉型,若是key對應的對象不存在返回null.
    • HttpServletResponse.sendRedirect("資源地址")方法實現客戶端跳轉(頁面重定向)


  • <a href="請求資源地址?參數名=值&參數名=值&參數名=值">xxxx</a>


  • PS:路徑問題——服務器跳轉「/」表示的是項目根目錄,客戶端跳轉"/"表示的是服務器根目錄。html語句中"/"都是服務器根。web.xml中配置servlet的url時,/表示項目根,servlet配置中可使用虛擬路徑。


  • 客戶端跳轉禁止訪問WEB-INF目錄。
  • 服務器跳轉能夠訪問WEB-INF目錄。


  • JSP

    1. 註釋:<%-- --%>瀏覽器查看源代碼看不到

      javascript

    2. <%=有結果返回的表達式(返回結果必須是基本數據類型或字符串)%>html

      • JSP輸出語法,=後面只能跟一個表達式,不能以;結尾。

    3. <% java語句 %>java

      • java代碼片斷語法,能夠寫多個java語句,必須以;結尾。
      • 寫在<% %>中java語句至關於寫在servlet的doGet. doPost方法中。

    4. <%! %>jquery

      • <%! %>中聲明的變量是全局變量,至關於在servlet類中聲明一個屬性
      • 在<%! %>中聲明的方法,至關於在servlet中聲明瞭一個方法。
      • 聲明變量和方法時注意順序,先聲明後使用。
    5. 當jsp代碼與html混合書寫時,注意結束符問題。


      web

    JSP指令:

    1. page指令

      • 寫在第一行
      • contentType屬性至關於html中的meta標籤,用來設置html頁面信息。
      • pageEncoding屬性用來設置java. jsp字符集。
      • import屬性用來導包,多個包用,分隔。
      • errorPage屬性用來設置當jsp頁面出現異常時跳轉的頁面。
      • isErrorPage屬性用來設置當前頁面爲錯誤頁面。

    2. include指令

      • 靜態包含指令。能夠書寫在任意地方。 該指令會將被包含的文件原封不動的插入到書寫include指令的地方。被包含文件必須是文本信息的文件. 當被包含文件中有java代碼時不會在被包含頁面中執行。
      • includ指令經過file屬性導入被包含文件。

    3. taglib指令

      • 導入標籤庫。
      • uri屬性指定標籤庫的資源地址
      • prifix屬性指定標籤庫別名。


    JSP動做

    • 語法:<jsp:動做名>
    1. <jsp:forward page="跳轉頁面"> 跳轉動做(服務器跳轉)

      ajax

    2. <jsp:include page="頁面"> 動態包含,獲取指定頁面執行後的結果。

      sql

    3. <%@include file="">靜態包含,把指定頁面拷貝到當前頁面後執行當前頁面。數據庫

      動態包含:至關於每一個jsp頁面編譯一個獨立的servlet,沒法實現變量. 方法等的共享。 靜態包含:至關於將全部jsp頁面整合成一個servlet,可使用其餘頁面定義的變量. 方法。json

    4. <jsp:param>canvas

      <jsp:forward page="test.jsp">
      
          <jsp:param value="tom" name="username"/>
                     ----------- -------------- 
      
      
          <jsp:param name="age">
                12
          </jsp:param>
      
      </jsp:forward>
      • 等價於<jsp:forward page="test.jsp?username=tom&age=12">

    5. <jsp:useBean id="變量名" class="包名.類名" scope="4個範圍">

      • id,表示變量名
      • class,指定變量類型,首先根據類型及變量名去指定範圍找有無相應對象,有直接返回該對象,無就建立一個新的對象存儲到指定範圍。
      • scope,表示Bean的存儲範圍。page. request. Session. application。默認是page範圍。
      • type,做用與class相同。不一樣點在與若是在指定範圍內沒有找到對象,不會建立新對象(報異常)。
      • beanName,相似於id。給javaBean起個名。推薦用id。

    6. <jsp:setProperty name="Bean的id" property="對象的屬性名" param="input表單的name屬性值" value="值" >

    7. <jsp:setProperty name="person" property="*"/>

      • 給Bean對象賦值,若是property和param值一致自動賦值。可使用*通配符批量賦值。

    8. <jsp:getProperty name="Bean的id" property="對象的屬性名">

      • 獲取Bean的屬性值。

      <jsp:setProperty>. <jsp:getProperty>實際上就是調用Bean對象的setter. getter方法。



    JSP中的異常處理

    1. try/catch/finally/throws/throw
      • 在局部代碼裏處理異常。
    2. errorPage, isErrorPage
      • 在整個頁面處理異常。
      1. errorPage
        • 形如:<%@page errorPage="error.jsp"%>
        • 表示:須要錯誤處理的頁面
      2. isErrorPage
        • 形如: <%@page isErrorPage="true"%>
        • 指示:錯誤頁面。
        • 其中,有一個隱式對象exception可用: <%=exception%> 產生(隱含)內建對象exception,可經過它得到異常信息 <%=exception.getMessage() %> //把異常信息打印出來
    3. 聲明的方式處理異常
      • 在整個應用處理異常。(範圍比前兩種更大)
      1. 配置: 在web.xml進行配置異常處理
        <error-page>
             <exception-type>java.lang.ArithmeticException</exception-type>
             <location>/MathError.jsp</location>
        </error-page>
        
        <error-page>
             <error-code>404</error-code>
             <location>/404.jsp</location>
        </error-page>
      2. Java中的異常,有2種
        • 受查異常(Checked Exception)
        • 非受查異常(Unchecked Exception) Java中的RuntimeException及其子類是不須要處理的(try/catch) 由於全部的RuntimeException老是能夠經過優化代碼來避免,所以,這種異常被稱爲"Unchecked Exception"。
      3. 三種異常處理方式同時啓動用,那個優先級高? 做用域越小,優先級越高。
      • 注意:要使得頁面自動跳轉到錯誤頁面,必須關閉瀏覽器的"顯示友好HTTP錯誤信息"選項。
    • public void _jspService(HttpServletRequest request, HttpServletResponse response) 
            throws java.io.IOException, ServletException { /*只處理這兩種兼容的異常*/ …… }

    jsp9個內置對象:

    類型 對象名 功能
    JspWriter out 往瀏覽器寫內容
    HttpServletRequest request Http請求對象.
    HttpServletResponse response Http響應對象
    PageContext pageContext JSP的頁面上下文
    HttpSession session 會話對象
    ServletContext application 應用上下文
    ServletConfig config JSP的ServletConfig
    Object page 頁面實現類的對象(例如:this)
    Exception exception 含有指令<%@page isErrorPage="true"%>


    • 範圍對象
      • 其中,有4個是範圍對象

      • pageContext,request,session,application

      • 對應<jsp:useBean/>指令的scope分別是:page,reqeust,session,application

      • 也就是說,指定不一樣scope的bean對象(Java Bean)會被綁定到不一樣的範圍對象中

      • 選擇範圍對象的原則:做用域的範圍越小越好;由於做用域小的生命週期短,有利於性能提升。

      • 例如:

        • <jsp:useBean id="stu" class="vo.Student" scope="page"/>
        • 表示stu對象被綁定到javax.servlet.jsp.PageContext對象(pageContext)中,
        • 其等價的代碼
          <%
              Student stu = pageContext.getAttribute("stu");
              if(stu==null) {
                  stu=new Student();
                  pageContext.setAttribute("stu",stu);
              }
          %>






      1. pageContext對象:


        • 每個jsp頁面對應着一個pageContext。通常地,在實際應用中,主要是使用它來存取屬性。另外,pageContext對象可以存取其餘隱含對象。
        1. PageContext對象提供取得屬性的方法

          • Object getAttribute(String name, int scope) 回傳name 屬性(範圍爲scope;類型爲Object)
          • Enumeration getAttributeNamesInScope(int scope)
          • 回傳全部屬性範圍爲scope 的屬性名稱,回傳類型爲Enumeration
          • int getAttributesScope(String name)回傳屬性名稱爲name 的屬性範圍
          • void removeAttribute(String name) 移除屬性名稱爲name 的屬性對象
          • void removeAttribute(String name, int scope) 移除屬性名稱爲name,範圍爲scope 的屬性對象
          • void setAttribute(String name, Object value, int scope) 指定屬性對象的名稱爲name. 值爲value. 範圍爲scope
          • Object findAttribute(String name) 尋找在全部範圍中屬性名稱爲name 的屬性對象
        2. PageContext對象取得其餘隱含對象的方法

          • Exception getException() 回傳目前網頁的異常,不過此網頁要爲error page,
          • JspWriter getOut() 回傳目前網頁的輸出流,例如:out
          • Object getPage() 回傳目前網頁的Servlet 實體(instance),例如:page
          • ServletRequest getRequest() 回傳目前網頁的請求,例如:request
          • ServletResponse getResponse() 回傳目前網頁的響應,例如:response
          • ServletConfig getServletConfig() 回傳目前此網頁的ServletConfig 對象,例如:config
          • ServletContext getServletContext() 回傳目前此網頁的執行環境(context),例如:application
          • HttpSession getSession() 回傳和目前網頁有聯繫的會話(session),例如:session
        3. pageContext對象存取其餘隱含對象屬性的方法,此時須要指定範圍的參數。

          • Object getAttribute(String name, int scope)
          • Enumeration getAttributeNamesInScope(int scope)
          • void removeAttribute(String name, int scope)
          • void setAttribute(String name, Object value, int scope)


          • 其中,範圍參數有四個,分別表明四種範圍:


          • PAGE_SCOPE
          • REQUEST_SCOPE
          • SESSION_SCOPE
          • APPLICATION_SCOPE






      2. request 對象


        • request 對象包含全部請求的信息, 如:請求的來源. 標頭. cookies和請求相關的參數值等等。
        • request 對象實現javax.servlet.http.HttpServletRequest接口的, 所提供的方法能夠將它分爲四大類:
          1. 儲存和取得屬性方法;

            方法 功能
            void setAttribute(String name, Object value) 設定name屬性的值爲value
            Enumeration getAttributeNamesInScope(int scope) 取得全部scope 範圍的屬性
            Object getAttribute(String name) 取得name 屬性的值
            void removeAttribute(String name) 移除name 屬性的值
          2. 取得請求參數的方法

            方法 功能
            String getParameter(String name) 取得name 的參數值
            Enumeration getParameterNames() 取得全部的參數名稱
            String [] getParameterValues(String name) 取得全部name 的參數值
            Map getParameterMap() 取得一個要求參數的Map
          3. 可以取得請求HTTP 標頭的方法

            方法 功能
            String getHeader(String name) 取得name 的標頭
            Enumeration getHeaderNames() 取得全部的標頭名稱
            Enumeration getHeaders(String name) 取得全部name 的標頭
            int getIntHeader(String name) 取得整數類型name 的標頭
            long getDateHeader(String name) 取得日期類型name 的標頭
            Cookie [] getCookies() 取得與請求有關的cookies
          4. 其餘的方法

            方法 功能
            String getContextPath() 取得Context 路徑(即站臺名稱)
            String getMethod() 取得HTTP 的方法(GET. POST)
            String getProtocol() 取得使用的協議 (HTTP/1.1. HTTP/1.0 )
            String getQueryString() 取得請求的參數字符串,不過,HTTP的方法必須爲GET
            String getRequestedSessionId() 取得用戶端的Session ID
            String getRequestURI() 取得請求的URL,可是不包括請求的參數字符串
            String getRemoteAddr() 取得用戶的IP 地址
            String getRemoteHost() 取得用戶的主機名稱
            int getRemotePort() 取得用戶的主機端口
            String getRemoteUser() 取得用戶的名稱
            void getCharacterEncoding(String encoding) 設定編碼格式,用來解決窗體傳遞中文的問題




      3. session 對象


        • session對象表示目前個別用戶的會話(session)情況。
        • session對象實現javax.servlet.http.HttpSession接口,HttpSession接口所提供的方法:
          方法 功能
          long getCreationTime() 取得session產生的時間,單位是毫秒
          String getId() 取得session 的ID
          long getLastAccessedTime() 取得用戶最後經過這個session送出請求的時間
          long getMaxInactiveInterval() 取得最大session不活動的時間,若超過這時間,session 將會失效
          void invalidate() 取消session 對象,並將對象存放的內容徹底拋棄
          boolean isNew() 判斷session 是否爲"新"的會話
          void setMaxInactiveInterval(int interval) 設定最大session不活動的時間,若超過這時間,session 將會失效




      4. application對象


        • application對象最常被使用在存取環境的信息。
        • 由於環境的信息一般都儲存在ServletContext中,因此常利用application對象來存取ServletContext中的信息。
        • application 對象實現javax.servlet.ServletContext 接口,ServletContext接口容器所提供的方法
          方法 功能
          int getMajorVersion() 取得Container主要的Servlet API版本
          int getMinorVersion() 取得Container次要的Servlet API 版本
          String getServerInfo() 取得Container的名稱和版本
          String getMimeType(String file) 取得指定文件的MIME 類型
          ServletContext getContext(String uripath) 取得指定Local URL的Application context
          String getRealPath(String path) 取得本地端path的絕對路徑
          void log(String message) 將信息寫入log文件中
          void log(String message, Throwable throwable) 將stack trace 所產生的異常信息寫入log文件中




      5. 其餘對象:

        1. page 對象

          • page對象表明JSP自己,更準確地說page對象是當前頁面轉換後的Servlet類的實例。
          • 從轉換後的Servlet類的代碼中,能夠看到這種關係: Object page = this;
          • 在JSP頁面中,不多使用page對象。


        2. response 對象

          • response 對象主要將JSP 處理數據後的結果傳回到客戶端。
          • response 對象是實現javax.servlet.http.HttpServletResponse 接口。response對象所提供的方法。
          1. 設定表頭的方法
            方法 功能
            void addCookie(Cookie cookie) 新增cookie
            void addDateHeader(String name, long date) 新增long類型的值到name標頭
            void addHeader(String name, String value) 新增String類型的值到name標頭
            void addIntHeader(String name, int value) 新增int類型的值到name標頭
            void setDateHeader(String name, long date) 指定long類型的值到name標頭
            void setHeader(String name, String value) 指定String類型的值到name標頭
            void setIntHeader(String name, int value) 指定int類型的值到name標頭
          2. 設定響應狀態碼的方法
            方法 功能
            void sendError(int sc) 傳送狀態碼(status code)
            void sendError(int sc, String msg) 傳送狀態碼和錯誤信息
            void setStatus(int sc) 設定狀態碼
          3. 用來URL 重寫(rewriting)的方法
            • String encodeRedirectURL(String url) 對使用sendRedirect()方法的URL予以編碼


        3. out 對象

          • out對象的類型是javax.servlet.jsp.JspWriter,該類從java.io.Writer類派生,以字符流的形式輸出數據。
          • out對象其實是PrintWriter對象的帶緩衝的版本(在out對象內部使用PrintWriter對象來輸出數據),
          • 能夠經過page指令的buffer屬性來調整緩衝區的大小,默認的緩衝區是8kb。
          • out 對象能把結果輸出到網頁上。
          • out主要是用來控制管理輸出的緩衝區(buffer)和輸出流(output stream)。
            方法 功能
            void clear( ) 清除輸出緩衝區的內容
            void clearBuffer( ) 清除輸出緩衝區的內容
            void close( ) 關閉輸出流,清除全部的內容
            int getBufferSize( ) 取得目前緩衝區的大小(KB)
            int getRemaining( ) 取得目前使用後還剩下的緩衝區大小(KB)
            boolean isAutoFlush( ) 回傳true表示緩衝區滿時會自動清除;false表示不會自動清除而且產生異常處理



        4. exception對象

          • 若要使用exception 對象時,必須在page 指令中設定:<%@ page isErrorPage="true" %>才能使用。
          • exception提供的三個方法:
            • getMessage()
            • getLocalizedMessage()
            • printStackTrace(new java.io.PrintWriter(out))


        5. config 對象

          • config 對象裏存放着一些Servlet 初始的數據結構。
          • config 對象實現於javax.servlet.ServletConfig 接口,它共有下列四種方法:
            • public String getInitParameter(name)
            • public java.util.Enumeration getInitParameterNames( )
            • public ServletContext getServletContext()
            • public Sring getServletName()



      6. 經常使用方法


        • ServletContext

          • getAttribute
          • setAttribute
          • removeAttribute
          • getServletPath
          • getRealPath


        • HttpServletRequest

          • getAttribute
          • setAttribute
          • removeAttribute
          • getSession
          • getCookies
          • setCharacterEncoding


        • HttpServletResponse

          • addCookie
          • encodeURL
          • encodeRedirectURL
          • setCharacterEncoding


        • HttpSession

          • getAttribute
          • setAttribute
          • removeAttribute
          • invalidate
          • setMaxInactiveInterval





    Cookie

    • 寫在硬盤上的文件,由瀏覽器管理。Cookie中以鍵值對方式存儲字符串。一個站點能夠設置多個Cookie。
    • 經常使用方法:
      • getName
      • getValue
      • setMaxAge(int 秒)。
      • 添加Cookie到客戶端使用response.addCookie方法。



    亂碼的解決:

    • jsp. tomcat. servlet. 數據庫同一字符集
      • jsp

        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      • tomcat

        <Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8444"/>
      • servlet

        • req.setCharacterEncoding("utf-8");
        • resp.setCharacterEncoding("utf-8");
      • 數據庫

        • 建立數據庫時指定

    EL表達式

    • 語法:${表達式},el只能用於jsp頁面中,<% %>不能用. js腳本不推薦用。標籤中能夠用。
    • 例子:
      表達式
      ${-168.18} -168.18
      ${3.8e-18} 3.8e-18 //科學計數法
      ${3.14159265} 3.14159265
      ${"Hello JSP EL!"} Hello JSP EL! 等價於 <%="Hello JSP EL!"%> ${'Hello JSP EL...'}
      ${true} //can be TRUE? true
      ${false} //can be FALSE? false
      ${str==null} true //布爾值的表達式

    EL 運算符

    類別 運算符
    算術運算符 +, -, *, /(或 div), %(或 mod)
    關係運算符 ==(或 eq), !=(或 ne), <(或 lt), >(或 gt), <=(或 le), >=(或 ge)
    邏輯運算符 &&(或 and), ||(或 or), !(或 not)
    驗證運算符 empty
    • 其中,empty 判斷一個變量是否爲null或是否包含有效數據

      • if(name==null||name.equlas("")) 等價於 ${empty name} -> true
    • 例子:

      表達式
      ${3+5.1} 8.1
      ${"Hello"+",Tarena!"} 報錯! // EL的"+"沒有字符串鏈接功能
      ${5*2} 10
      ${9.3/3} 3.1
      ${9.3 div 3} 3.1
      ${8 div 0} Infinity // 表示無窮大
      ${9%2} 1
      ${9 mod 2} 1
      ${8*6>68?"Yes":"No"} No //三目表達式
      ${empty name} true //對範圍對象內的變量或對象進行判空
    • <% String name=""; request.setAttribute("name",name); //若是沒有 setAttribute ,則一定是空%>

    • 變量和JavaBean屬性數據輸出

      • 表達式語言輸出變量,是到範圍對象(pageContext,request,session,application)中查找相應屬性。而非直接在頁面中查找實例或局部變量。
      • 表達式語言查找變量的順序是:
        1. pageContext
        2. request
        3. session
        4. application
        • 全部範圍都未找到時,賦值null
    • 對象屬性. 數組. 集合數據輸出

      • el取值有兩個操做符.[]
        • .用於單個對象或屬性
        • []用於數組集合取值。

        • user對象
          ${user["name"]}
          ${user['name']}   //拿屬性時,單引跟雙引等價
          ${user.name}      //這種方法一樣能夠

        • list集合. 數組
          ${aList[0]}   //使用下標來取值
          ${aList[1]}   //取得對象的引用地址  還能夠嵌套:${aList[1]['name']}
          ${aList[3]}   //下標越界,不會報錯;只是取不出值
          • map鍵值對
          ${map.date}     ${map["date"]}     //這兩個等效
          ${map.aList[0]} ${map["aList"][0]}//這兩個也等效
          ${map.aList[1][name]}              //嵌套取值
    • el提供了本身的一套隱含對象,方便在頁面內對各類經常使用數據信息的訪問.

      EL隱藏對象 JSP隱藏對象
      pageScope pageContext
      requestScope request
      sessionScope session
      applicationScope appication
      param request.getParameter(), ${param.username}
      paramValues request.getParameterValues, ${paramValues.like[0]}
      header request.getHeader() 按照key-value的形式取出;value:是一個String類型的值:${header["host"]} , ${header["accept"]}, ${header["user-agent"]}
      headerValues 按照key-value的方式取出,可是headerValues裏面的value是一個String類型的數組
      cookie request.getCookies()
      initParam context param
      web.xml
      <context-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
      </context-param>
      
      
      ${initParam.server}

    JSTL(JSP Standard Tag Library )

    • 減小java代碼,簡化頁面編寫;功能封裝,提升可重用性
    1. 如何使用JSTL

      • 對於Java EE以前(即J2EE規範1.4及以前版本)
        1. 複製jstl的jar包(jstl.jar,standard.jar)到/WEB-INF/lib
        2. 在使用jstl功能的jsp頁面中增長指令
          • <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> //核心標籤庫
          • <%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
          • <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
          • <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> //數據庫標籤庫
          • <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> //prefix 表前綴(可改,但一般按這寫的用); uri 指向標籤庫的入口
      • Java EE規範把jstl做爲規範的一部分
        • 因此如今的jstl-1.2已經包含了原來的jstl.jar , standard.jar
    2. core:核心標籤庫

      • 在JSTL中,通常用途的標籤主要是指具備輸出,設置變量,和錯誤處理等功能的標籤,他們在jsp中使用比較頻繁,它們有:


      1. <c:set>


        • 語法:
          <c:set value="value" var="varName" [scope= "{page|request|session|application}"]/ >
          <c:set value="value" target="target" property="propertyName"/ >
          這個標籤用於在某個範圍(page,request,session,application)裏面設置特定的值, (默認爲page),或者設置某個已經存在的javabean的屬性。
        • 例子:
          <c:set var="counter" value="200"/>
          ${counter}//輸出
          
          <c:set var="tarena">Tarena It Traning Ltd.</c:set>
          ${tarena}
          
          能夠指定範圍,默認是page
          <c:set value="20" var="maxIdelTime" scope="session"/>
          ${maxIdelTime}
          
          
          設置JavaBean的值
          <jsp:useBean id="girl" class="vo.SuperGirl"/>
          <c:set value="Shirly" target="${girl}" property="name"/>
          <td>girl.name</td>
          <td>${girl.name}</td>



      2. <c:catch>


        • 它的做用是捕捉由嵌套在它裏面的標籤所拋出來的異常。相似於<%try{}catch{}%>

        • 語法:

          • <c:catch [var="varName"]>nested actions</c:catch>
        • 例子

          <c:catch var="error">
              <% Integer.parseInt("abc"); %>
          </c:catch>
          
          <% 
          try{
              Integer.parseInt("abc"); 
             }catch(Exception error){
             } 
          %> //等價
          
          <c:out value="${error}"/>
          <c:out value="${error.message}"/>
          <c:out value="${error.cause}"/>




      3. <c:if>


        • 控制語句
        • 語法:
          <c:if test="testCondition" var="varName" 
            [scope="{page|request|session|application}"]>
            Body內容
          </c:if>
          注:沒有 else
        • 例子
          <c:set var="age" value="16"/>
          <c:if test="${age<18}">
            <h1 align=center>您還沒有成年,不能進入遊戲中心!</h1>
          </c:if>



      4. <c:choose>


        • 控制語句
        • 例子:
          <c:set var="tax" value="5000" />
          <c:choose>
          
            
            <c:when test="${tax <=0}">
               您今年沒有納稅!
            </c:when>
            
            <c:when test="${tax<=1000&&tax>0}">
                您今年繳納的稅款爲${tax},加油!
            </c:when>
            
            <c:when test="${tax<=3000&&tax>1000}">
                您今年繳納的稅款爲${tax},再接再勵哦!
            </c:when>
            
            <c:otherwise>
                您今年納稅超過了3000元,多謝您爲國家的繁榮富強做出了貢獻!
            </c:otherwise>
          
          
          </c:choose>



      5. <c:forEach>


        • 循環
        • 語法
          <c:forEach [var="varName"] items="collection"      [varStatus="varStatusName"] [begin="begin"]  [end="end"] [step="step"]>
              Body 內容
          </c:forEach>
          • items : 須要迭代的集合
          • var : 迭代時取集合裏的值
        • 例子
          <%  
              List aList=new ArrayList(); 
              aList.add("You");       
              aList.add("are");   
              aList.add("a"); 
              aList.add("beautiful"); 
              aList.add("girl");   
              request.setAttribute("aList",aList);  
          %>
          
          <center> 
            <table border=1>
              
              <c:forEach var="word" items="${aList}">
                <tr>
                  <td>
                      ${word}
                  </td>
                </tr>
              </c:forEach>
          
            </table> 
          </center>
          
          
          
          
          
          <c:forEach items='${header}' var='h'>           
            <tr>
                <td>
                    <li>Header name:<c:out value="${h.key}"/>
                    </li>
                </td>
                
                <td>
                    <li>Header value:<c:out value="${h.value}"/>
                    </li>
                </td>
            </tr>
          </c:forEach>
          
          
          //另一種用法: (相似 for 循環)
          <c:forEach var="count" begin="10" end="100" step="10">
            <tr>
              <td>
                <c:out value="${count}"/><br>
              </td>
            </tr>
          </c:forEach>




    過濾器

    • Servlet過濾器是Servlet的一種特殊用法,主要用來完成一些通用的操做。好比編碼的過濾,判斷用戶的登錄狀態等等。

    • Servlet過濾器的適用場合:

      • 認證過濾
      • 登陸和審覈過濾
      • 圖像轉換過濾
      • 數據壓縮過濾
      • 加密過濾
      • 令牌過濾
      • 資源訪問觸發事件過濾
    • filter 實際上是一個「servlet chaining」(servlet 鏈)。 一個 filter 包括:

      1. 在 servlet 被調用以前截獲;
      2. 在 servlet 被調用以前檢查 servlet request;
      3. 根據須要修改 request 頭和 request 數據;
      4. 根據須要修改 response 頭和 response 數據;
      5. 在 servlet 被調用以後截獲.
    • Servlet過濾器接口的構成:

      • 全部的Servlet過濾器類都必須實現javax.servlet.Filter接口。這個接口含有3個過濾器類必須實現的方法:
        • init(FilterConfig cfg) 這是Servlet過濾器的初始化方法,性質等同與servlet的init方法。
        • doFilter(ServletRequest,ServletResponse,FilterChain) 完成實際的過濾操做,當請求訪問過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain參數用於訪問後續過濾器
        • destroy() Servlet容器在銷燬過濾器實例前調用該方法,這個方法中能夠釋放Servlet過濾器佔用的資源。,性質等同與servlet的destory()方法。
    • Servlet過濾器的建立步驟:

      1. 實現javax.servlet.Filter接口的servlet類
      2. 實現init方法,讀取過濾器的初始化函數
      3. 實現doFilter方法,完成對請求或過濾的響應
      4. 調用FilterChain接口對象的doFilter方法,向後續的過濾器傳遞請求或響應
      5. 在web.xml中配置Filter
        <filter>
            <filter-name>myfilter</filtername>
            <filter-class>com.filter.MyFilter</filter-class>
        </filter>
        
        <filter-mapping>
            <filter-name>myfilter</filter-name>
            <url-parten>*.do</url-parten>
        </filter-mapping>
    • Filter 有4種類型,主要體如今 中的 屬性:

      • <dispatcher>REQUEST</dispatcher> 默認,客戶端的直接的請求,才觸發該過濾器
      • <dispatcher>FORWARD</dispatcher> servlet 調用forward(req,resp)時觸發
      • <dispatcher>INCLUDE</dispatcher> servlet 調用 include(req,resp)時觸發
      • <dispatcher>ERROR</dispatcher> 發生錯誤,跳轉到錯誤頁面時觸發

    監聽器(Listener)

    • 它能夠監聽客戶端的請求. 服務端的操做等。經過監聽器,能夠自動激發一些操做。

    • 如:監聽在線的用戶數量。當增長一個session時,就激發sessionCreated(HttpSessionEvent se),給在線人數加1

    • 監聽器的種類 : 一共分三大類型,有 8 種 listener:

      1. 監聽 servlet context
        1. 生命週期事件
          • 接口: javax.servlet.ServletContextListener
          • 內容: servlet 上下文已經被建立,而且能夠用來向其第一個請求- 提供服務,或者 servlet 上下文即將關閉
        2. 屬性的改變
          • 接口: javax.servlet.ServletContextAttributeListener
          • 內容: 在 servlet 上下文中,增長. 刪除或者替換屬性
      2. 監聽 servlet session
        1. 生命週期事件
          • 接口: javax.servlet.http.HttpSessionListener
          • 內容: 對一個 HttpSession 對象進行建立. 失效處理或者超時處理
        2. 屬性改變
          • 接口: javax.servlet.http.HttpSessionAttributeListener
          • 內容: 在 servlet 會話中,增長. 刪除或者替換屬性
        3. 會話遷移
          • 接口: javax.servlet.http.HttpSessionActivationListener
          • 內容: HttpSession 被激活或者鈍化
        4. 對象綁定
          • 接口: javax.servlet.http.HttpSessionBindingListener
          • 內容: 對 HttpSession 中的對象進行綁定或者解除綁定
      3. 監聽 servlet request
        1. 生命週期
          • 接口: javax.servlet.ServletRequestListener
          • 內容: 一個 servlet 請求開始由 web 組件處理
        2. 屬性改變
          • 接口: javax.servlet.ServletRequestAttributeListener
          • 內容: 在 ServletRequest 中,增長. 刪除或者替換屬性
    • 監聽器建立步驟:

      1. 根據監聽事件繼承或實現相應的監聽器類或接口Listener。
      2. 重寫監聽器方法。
      3. 在web.xml中配置。 mylistener com.listener.MyListener

    Ajax——異步傳輸

    • XMLHttpRequest對象實現Ajax,

    • 屬性:

      • readystate——標明是否成功與服務器實現異步傳輸,返回4表示成功。
      • status——標明異步的請求的HTTP狀態,返回200表示鏈接正常。
      • onreadystatechange設置回調函數
    • 方法:

      • open(url)——初始化異步傳輸內容
      • send()——將請求發送給服務器
      • responseXML——以XML方式接收服務器返回數據
      • responseText——以文本的方式接收服務器返回數據
    • 使用Ajax的步驟:

      1. 建立XmlHttpRequest對象(注意瀏覽器)
      2. 準備請求地址和數據
      3. open方法初始化異步請求
      4. 設置回調函數
      5. send發送請求
      6. 回調函數接收返回數據(responseText. responseXML)
      7. 經過js處理
    • 經過jquery方式實現:

      1. 導入jquery
      2. 經過$.post(url,回調函數,"type"). $.get(url,回調函數,"type")實現異步傳輸,$.ajax
      3. 在回調函數中聲明參數,該參數表示服務器返回的數據。
      • type——xml, html, script, json, text
    相關文章
    相關標籤/搜索