JSP學習筆記

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   使用   java   

一,JSP簡介

  • JSP---Java Server Pages
  • 擁有servlet的特性與優點(本身就是一個servlet)
  • 直接在HTML中內嵌JSP代碼
  • JSP程式由JSP Engine先將它轉換成Servlet代碼,接著將它編譯成類檔案載入執行
  • 只有當用戶端第一次請求JSP時,才需要將其轉換、編譯
  • 優點:
    • 優良的效能
      • 優於CGI,PHP,ASP
    • 平台無關性
      • 作業系統無關,Web伺服器無關
    • 可擴充性
      •   tag的擴充機制,簡化頁面開發

二,JSP基本文法

JSP傳統文法
  • Declaration 聲明
  • Scriptlet  小程式段
  • Expression  運算式
  • Comment  注釋
  • Directives  指令
  • Action 動作指令
  • 內建對象

JSTL

JSF

1,JSP-Declaration

基本文法:  <%!  %>  說明:在此聲明的變數、方法都會被保留成唯一的一份,直到JSP程式停止執行
body>    <%! int count=0; %>//成員變數,相當於全域變數,因為jsp會先轉換為servlet,servlet只new一個執行個體。可以定義方法    <% int count2=0; %>//局部變數,不能定義方法    <h>        count:<%= ++count %><br>        count2:<%= ++count2 %>    </h>  </body>

2,Scriptlet

基本文法:   <%程式碼區%>  可以放入任何的Java程式碼
<!-- html注釋,用戶端源碼可以看見 -->  <%-- jsp注釋 --%>  <%  // 注釋1 java注釋  /*      注釋2  */  String bgColor=request.getParameter("bgColor");  boolean hasColor;  if(bgColor!=null){      hasColor=true;  }  else{      hasColor=false;      bgColor="white";  }  %>  <body BGCOLOR=<%= bgColor %>>    <%        if(hasColor){            out.println("bgColor:"+bgColor);        }        else{        out.println("background is white");        }     %>  </body>

3,運算式

基本文法:  <%=… …%>  =後面必須是字串變數或者可以被轉換成字串的運算式  不需要以 ; 結束  只有一行例:  <%=“hello world”%>  <%=i+1%>  <%=request.getParameter(“name”)%>

 4,Derictive

  • Directive(編譯指令)相當於在編譯期間的命令
  • 格式:
    • <%@Directive 屬性=“屬性值”%>
  • 常見的Directive:
    • page
    • include
    • taglib
a,Derictive-page指明與JSP Container 的溝通方式基本格式:
<%@page language=“script language”|  extends=“className”|  import=“importList”|  buffer=“none|kb size”|   --none:不緩衝,預設8k  session=“true|false”|   --是否可以使用session,預設true  autoFlush=“true|false”  --緩衝器是否自動清除,預設true  isThreadSafe=“true|false”|  --預設false(永遠不要設成true)  info=“infoText”|    --任何字元  errorPage=“errorPageUrl”|  isErrorPage=“true|false”|  contentType=“contentTyepInfo”|  pageEncoding=“gb2312”%>

 b,Directive--include 編譯期間的指令

  • 將指定的JSP程式或者HTML檔案包含進來
  • 格式:
    •   <%@include file=“fileURL%>
  • JSP Engine會在JSP程式的轉換時期先把file屬性設定的檔案包含進來,然後開始執行轉換及編譯的工作。(原封不動的把檔案的代碼copy到該位置,然後進行轉換和編譯,只生   成一個java和class)
  • 限制:
    • 不能向fileURL中傳遞參數
    • 不能abc.jsp?user=aaa

5,Action

Action(動作指令)在運行期間的命令常見的:
  • jsp:useBean
    •   jsp:setProperty
    •   jsp:getProperty
  • jsp:include
  • jsp:forward
    •   jsp:param
  • jsp:plugin
    •   嵌入applet

a,jsp:include/jsp:param

  • 用於動態包含JSP程式或HTML檔案等
  • 除非這個指令會被執行到,否則它是不會被Tomcat等JSP Engine編譯。
  • 格式:
    •   <jsp:include page=“URLSpec” flush=“true”/>
    •   <jsp:include page=“URLSpec” flush=“true”>
      •       <jsp:param name=“ParamName” value=“paramValue”/>
    •     </jsp:include>
  • jsp:param用來設定include檔案時的參數和對應的值
  • 和編譯指令include的區別
    •   include編譯指令是在JSP程式的轉換時期就將file屬性所指定的程式內容嵌入,然後再編譯執行;而include指令在轉換時期是不會被編譯的,只有在用戶端請求時期如果被執行到才會被動態編譯載入
    • Include不能帶參數, 而<jsp:include>可以

b,jsp:forward / jsp:param

用於將一個jsp的內容傳送到page所指定的JSP程式或者Servlet中處理(URL)格式:<jsp:forward page=“urlSpec” flush=“true”/><jsp:forward page=“urlSpec”>

  <jsp:param name=“paramName” value=“paramValue”/>

 </jsp:forward>

<jsp:param>用於指定參數和其對應的值例如:test.jspforward.jsp / forforward.jsp 
<jsp:forward page="forforward.jsp" />
forward1.jsp / forforward1.jsp(with parameters)
<jsp:forward page="forforward1.jsp">    <jsp:param name="name" value="m" />    <jsp:param name="oldName" value=‘<%=request.getParameter("name")%>‘ />    <jsp:param name="roles" value="manager" /></jsp:forward>

 

Forward的頁面和forward到的頁面用的是同一個request與此相對應的是   response.sendRedirect<jsp:forward>與response.sendRedirect的區別
  • <jsp:forward>
使用同一個requestforward後的語句不會繼續發送給用戶端速度快伺服器內部轉換,可以傳參數
  • response.sendRedirect
是不同的requestsend後的語句會繼續執行,除非return速度慢需要到用戶端的往返,可以轉到任何頁面可以傳參數,直接寫在url後面c,jsp:useBean
  • 通過jsp:useBean,可以在JSP中使用定義好的Bean
  • Bean的基本要素:
    • 必須要有一個不帶參數的構造器。在JSP元素建立Bean時會調用空構造器
    • Bean類應該沒有任何公用執行個體變數,也就是說,不允許直接存取執行個體變數,變數名稱首字母必需小寫
    • 通過getter/setter方法來讀/寫變數的值,並且將對應的變數首字母改成大寫
  • 基本用法:
    •   <jsp:useBean id="cb" class="bean.CounterBean" type="typeName" scope="page|request|session|application">         </jsp:useBean>
    • test.jsp/CounterBean.java 不要使用裸體類(規範要求)應該放在包裡面
<%@ page import="bean.*" %><%--<% //response.sendRedirect("../servlet/ShowRs"); %><% CounterBean cb = new CounterBean(); %><font color="red" size="5">    <%=cb.getCount()%></font>--%><jsp:useBean id="cb" class="bean.CounterBean">              <%-- 相當於 CounterBean cb = new CounterBean() --%></jsp:useBean><jsp:setProperty name="cb" property="count" value="23"/>     <%-- 相當於 cb.setCount(Integer.parseInt("23")) --%><jsp:getProperty name="cb" property="count"/>                <%-- 相當於 out.print(cb.getCount()) --%>        

 

  • jsp:useBean各項參數含義:
    id:對象執行個體名稱    scope:Bean作用的範圍,預設為page,對整個jsp頁面有效    class:Bean類名稱(全名)    type:Bean執行個體類型,可以是本類,或其父類,或實現的介面,預設為本類
  • Scope各項參數的意義:
    page:僅涵蓋使用JavaBean的頁面,相當於局部變數        PageBean.jsp/CounterBean.java)    request:有效範圍僅限於使用JavaBean的請求      (RequestBean.jsp/RequestBean2.jsp/CounterBean.java)    session:有效範圍在使用者整個串連過程中(整個會話階段均有效)      (SessionBean.jsp/Session2.jsp/CounterBean.java)    application:有效範圍涵蓋整個應用程式。也就是對整個網站均有效      (Application.jsp/Application2.jsp/CounterBean.java)
  • jsp:setProperty的格式:
    <jsp:setProperty name=“beanName”

      property=“propertyName” |property=“*”

      value=“property value” |param=“paramName”/>

    相當於beanName.setPropertyName(value)方法調用(setXxx()方法)
  • jsp:getProperty的格式:
    <jsp:getProperty name=“beanName” property=“propertyName”/>    相當於beanName.getPropertyName()方法調用(getXxx()方法)
  • 建立表單參數和Bean屬性之間的關聯
    通過param指定表單元素的名稱,通過perperty指定對應的Bean屬性名稱,由此建立這兩個變數的關聯      (SaleEntry.jsp/SaleEntry.java,用url傳遞參數)
<jsp:setProperty     name="entry"    property="numItems"       param="numItems" />   //相當於<jsp:setProperty name="entry" property="numItems"  numItems=<%=reuest.getParameter("numItems")%> />

 

    通過*來設定所有屬性和輸入參數之間的關聯        (SayHelloBean.html/SayHelloBean.jsp/HelloBean.java)
  • 在建立Bean屬性和表單參數之間的對應關係時,伺服器會將對應的參數自動轉換成和屬性類型匹配的資料
  • 初步解釋編碼問題
    • <%=new String(hello.getName().getBytes("ISO8859_1"),"GBK")%>
    • request.setCharacterEncoding("gb2312");

三,JSP內建對象

JSP的內建對象  out  request  response  pageContext à用的很少  session  application  config 用的很少  exception  Page 用的很少
  • JSP編程---out
    Out內建對象是一個緩衝的輸出資料流,用來給用戶端返回資訊。它是javax.servlet.jsp.JspWriter的一個執行個體    典型應用:向用戶端輸出內容  常用方法:    println():向用戶端輸出各種類型資料 write()    newLine():輸出一個分行符號    close():關閉輸出資料流    flush():輸出緩衝區裡的資料    clearBuffer():清除緩衝區裡的資料,同時把資料輸出到用戶端    clear():清除緩衝區裡的資料,但不把資料輸出到用戶端    getBufferSize():返回緩衝區的大小
  • JSP編程--request
    request內建對象表示的是調用JSP頁面的請求。通常,request對象是javax.servlet.http.HttpServletRequest介面的一個執行個體    典型應用:通過request.getParameter(“paramName”)可以獲得Form提交過來的參數值    可以用此對象取得請求的Header、資訊(如瀏覽器版本、語言和編碼等)、請求的方式(get/post)、請求的參數名稱、參數值、用戶端的主機名稱等  常用方法:    getMethod():返回用戶端向伺服器端傳送資料的方法    getParameter(String paramName):返回用戶端向伺服器端傳送的參數值,該參數由paramName指定    getParameterNames():獲得用戶端傳送給伺服器端的所有參數的名字,結果是一個枚舉類型資料(Enumeration)    getParameterValues(String  name):獲得指定參數的所有值,由name指定    getRequestURI():獲得發出請求字串的用戶端地址    getRemoteAddr():擷取用戶端的IP地址    getRemoteHost():擷取用戶端機器名稱    getServerName():擷取伺服器的名字    getServletName():用戶端所請求的指令檔路徑    getServerPort():擷取伺服器端的連接埠  對應類: javax.servlet.http.HttpServletRequest
  • JSP-response
    表示的是返回給用戶端的響應    是javax.servlethttp.HttpServletResponse介面的一個執行個體    經常用於設定HTTP標題,添加cookie、設定響應內容的類型和狀態、發送HTTP重新導向和編碼URL  常用方法:    addCookie(Cookie cookie):添加一個Cookie對象,用於在用戶端儲存特定的資訊    addHeader(String name,String value):添加HTTP頭資訊,該Header資訊將發送到用戶端    containsHeader(String name):判斷指定名字的HTTP檔案頭是否存在    sendError(int):向用戶端發送錯誤的資訊    sendRedirect(String url):重新導向JSP檔案      和<jsp:forward>的區別        sendRedirect通過用戶端發起二次申請,不同的request對象        Jsp:forward是同一個request,在伺服器內部轉寄    setContentType(String contentType):設定MIME類型與編碼方式
  • JSP-Cookie
    Http協議的無串連性要求出現一種儲存C/S間狀態的機制    Cookie:儲存到用戶端的一個文字檔,與特定客戶相關    Cookie以“名-值”對的形式儲存資料    通過getName和getValue的方式得到相應的名字和值
  • JSP—session & application
    <% @page session=“true”%>(預設)--表示session功能已經在jsp頁面中啟動  session常用方法:    void setAttribute(String name,Object value)    Object getAttribute(String name)    boolean isNew()  application    ServletContext四,Servlet和JSP的通訊
  • 從JSP調用Servlet可用<jsp:forward>
     請求資訊自動傳遞到Servlet     或者通過sendRedirect
<jsp:forward page="/servlet/ServletToJSP" />
<%
response.sendRedirect("../servlet/ShowParameters?a=b");
%>

 

  • 從Servlet調用JSP使用
    RequestDispatcher介面的forward(req, res)方法    請求資訊需要顯式傳遞(在req、res參數中)    或者通過sendRedirect
public class ServletToJSP extends HttpServlet {    public void doGet (HttpServletRequest req,HttpServletResponse resp) {        try {            // 設定屬性並將它提交給ServletUseJsp.jsp            resp.setContentType("text/html;charset=gb2312");            req.setAttribute ("servletName", "ServletToJsp");            getServletConfig().getServletContext().getRequestDispatcher            ("/servlet_jsp/ServletUseJsp.jsp").forward(req, resp);
        //.forward(req, resp)把servlet的請求發送到另一個頁面
        //.include(req, resp)把另一個頁面的內容包含在response中
}catch (Exception e){ e.printStackTrace (); } }}

 

  例如:    FromJspToServlet.jsp / ServletToJsp.java / ServletUseJsp.jsp    forward可以用”/” 路徑, 是指web app的根路徑, servlet forward jsp的時候一定要用“/”開頭    jspsendRedirect到servlet應該用相對路徑,因為這裡”/”指網站的根路徑 ,servlet sendRedirect jsp也是

JSP學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.