<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVADREAM

    hackiller
    數(shù)據(jù)加載中……
    J2EE復(fù)習(xí)(五)JSP基礎(chǔ)
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

    一、JSP簡介
    JSP (Java Server Pages)是服務(wù)器端的腳本語言,是一種在HTML頁面中加入Java語言而生成動態(tài)頁面的技術(shù):加入了新的標簽(<%,%>,…)。
    JSP是以Java和Servlet為基礎(chǔ)開發(fā)而成的動態(tài)網(wǎng)頁生成技術(shù),它的底層實現(xiàn)是Java Servlet。
    JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁面被客戶端所請求以后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。

    二、JSP的執(zhí)行過程
    客戶端請求JSP頁面——>JSP Parser解析*.jsp編譯為*.java——>javac命令編譯成*.class——>執(zhí)行class文件——>響應(yīng)返回結(jié)果給客戶端
    JSP代碼中包含JSP元素和Template data兩類。Template data指的是JSP引擎不處理的部分,就是JSP引擎會把除在標記<%...%>以外的部分直接傳遞出去而不進行任何處理。
    JSP在第一次或修改JSP文件后執(zhí)行都會調(diào)用JSP Parser將*.jsp文件編譯成servlet程序,所以會比較慢。

    三、JSP基本語法
    1. 兩種注釋類型
    (1)HTML注釋
    可以在JSP代碼中添加一段HTML格式的注釋,此注釋發(fā)生到客戶端,但不在頁面上顯示,語法如下:
    <!-- HTML格式的注釋,在客戶端查看源代碼時可見 -->
    <!-- 此注釋由<%=programmer%>添加-->

    如果programmer為hackiller,則在客戶端返回的注釋是<!-- 此注釋由hackiller添加-->
    (2)JSP注釋
    寫在JSP代碼中,但不發(fā)送到客戶端。
    <%-- JSP注釋,該注釋會在JSP編譯時被忽略掉 --%>
    <%-- /*Scriptlet中的多行注釋*/ --%>
    <%-- /**Scriptlet中的多行注釋,可以用javadoc從java文件中提取出來*/ --%>
    <%-- JSP的單行注釋 --%>

    2. 3個腳本元素
    (1)聲明(Declaration)全局變量
    <%! int i=0; String str="Hello World!"; %>
    (2)表達式(Expression)
    在JSP代碼中,經(jīng)常使用表達式來輸出變量的值,可以在任何地方
    <%! int a=1; int b=2; String str="Hello World!"; %>
    <%=a+b%>  <%=str>

    PS:不能用“;”號來作為表達式的結(jié)束符。但同樣的表達式在Scriptlet中必須以分號來結(jié)尾。
    (3)腳本段(Scriptlet)
    腳本段用來包含一個有效地Java程序段
    <% int b=3; %>局部變量

    3. 3個指令元素
    (1)page指令

    <%@ page contentType="text/html;charset=utf-8"%>

    定義JSP文件的全局屬性,屬性包括:language、extends、import、session、buffer、autoflush、isThreadSafe、info、errorPage、isErrorPage、contentType(服務(wù)端到客戶端的輸出格式)
    其位置可以在頁面的任何位置,但推薦放在頁首。
    language:聲明腳本語言的種類,目前只能用"java"。
    extends:標明JSP編譯時需要加入的Java Class的全名,它會限制JSP的編譯能力,慎用!
    import:需要導(dǎo)入的java包列表。
    session:設(shè)定客戶是否需要HTTP Session。默認為true。
    buffer:buffer的大小被out對象用于處理執(zhí)行后的JSP對客戶瀏覽器的輸出。默認值為8Kb。
    autoFlush:設(shè)置如果buffer溢出,是否要強制輸出,如果定義其為true(默認值),輸出正常;如果定義為false,會導(dǎo)致一個意外錯誤的發(fā)生。
    isThreadSafe:設(shè)置JSP文件是否能多線程使用。默認為true。
    info:文本信息。能夠使用Servlet.getServletInfo()方法取回。
    errorPage:設(shè)置處理異常事件的JSP文件
    sErrorPage:設(shè)置此頁是否為處理異常事件的頁面,如果設(shè)置為true,就能使用exception對象。
    contentType:設(shè)置MIME類型和字符編碼集。MIME類型默認為text/html,字符集默認為charset=ISO-8859-1

    可以在一個頁面中使用多個<%@page %>指令,但是除了import屬性,其他的屬性只能使用一次。
    JSP缺省引入的包,下面這些包在JSP編譯時已經(jīng)導(dǎo)入了,所以在JSP文件中無需再用page指令引入:
    java.lang.*
    javax.servlet.*
    javax.servlet.jsp.*
    javax.servlet.http.*

    (2)include指令

    <%@ include file = "相對路徑" %>

    使用include指令可以在JSP中包含一個靜態(tài)的文件,同時解析這個文件中JSP語句。
    如果路徑以“/”開頭,那么此路徑主要是參照jsp應(yīng)用的上下文關(guān)系路徑。
    如果路徑以文件名或文件目錄開通,那么此路徑就是正在使用的JSP文件的當(dāng)前路徑。

    (3)taglib指令

    <%@ taglib uri = "TagLibrary" prefix = "mypfx" %>

    是用taglib指令定義一個標簽庫及其自定義的前綴。
    uri:Uniform Resource Identifier根據(jù)標簽的前綴對自定義的標簽進行唯一的命名,可以是一個相對或絕對的路徑
    prefix:自定義標簽的前綴。不要使用jsp、jspx、java、javax、servlet、sun、sunw作為前綴,這些已被Sun公司聲明保留。

    4. 8個動作指令
    (1)頁面跳轉(zhuǎn):<jsp:forward>
    <jsp:forward>標簽從一個jsp文件向另外一個文件傳遞一個包含用戶請求的request對象。
    共包含2個屬性
    page屬性是一個表達式或是一個字符串用于說明將要定向的文件或URL。
    <jsp:param>向一個動態(tài)文件發(fā)送一個或多個參數(shù)。如果使用了<jsp:param>標簽,目標文件必須是動態(tài)的文件(如Servlet或者JSP等)

    <jsp:forward page=test.jsp>
     
    <jsp:param name="username" value="<%=user%>"/>
     
    <jsp:param name="password" value="12345678"/>
    </jsp:forward>

    通過request.getParameter("username")獲取用戶名
    (2)包含頁面:<jsp:include>
    <jsp:include>允許包含靜態(tài)和動態(tài)Web資源,這兩種包含的結(jié)果是不同的。
    如果包含的僅是靜態(tài)文件,那么這種包含僅僅是把包含文件的內(nèi)容加到JSP文件中去,類似于<%@include%>;
    如果包含的是動態(tài)web資源,那么這個被包含的文件也會被JSP編譯器執(zhí)行。
    如果這個包含文件是動態(tài)的,那么還可以使用<jsp:param》傳遞參數(shù)和參數(shù)值。

    (3)創(chuàng)建Bean:<jsp:useBean>
    創(chuàng)建一個Bean實例并指定她的名字和作用范圍。

    <jsp:useBean id="beanInstanceName" scope="page|request|session|application" class="package.className"/>

    包含5個屬性。
    id:在所定義的范圍中確認Bean的變量,程序中用id來使用此Bean實例。id的值對大小寫敏感。
    scope:Bean存在的范圍及id變量名的有效范圍。默認值為page。
    class:使用new關(guān)鍵字及class構(gòu)造器從一個class中實例一個bean。這個class不能是抽象的,并且必須有一個公用的,沒有參數(shù)的構(gòu)造器。
    type:如果這個Bean已經(jīng)指定范圍中存在,使用type將賦予這個Bean一個數(shù)據(jù)類型。如果使用type的同時沒有使用class或beanName,Bean將不會被實例化。
    beanName:beanName可以是字符串的package.class,也可以是jsp表達式,它的值會傳遞給Beans.instantiate方法。type的值可以與beanName相同也可以是它的基類,或者是它所實現(xiàn)的接口。

    (4)設(shè)置Bean屬性:<jsp:setProperty>

    <jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"
    |param
    ="parameterName"/>

    name:表示已經(jīng)在<jsp:useBean>中創(chuàng)建的Bean實例的名字,即id。
    property:匹配Bean中的屬性
    param:指request對象中的參數(shù)名,將對應(yīng)的值設(shè)定給Bean的屬性。
    value:使用指定的值來設(shè)定Bean屬性。這個值可以是字符串,也可以是表達式。如果是字符串,那么就會被轉(zhuǎn)換成Bean屬性的類型(如"0.98"會轉(zhuǎn)化成double類型0.98)。如果是表達式,則要求它的類型與Bean屬性的類型一致。
    PS:在同一個<jsp:setProperty>中不能同時使用param屬性和value屬性

    (5)取得Bean屬性:<jsp:getProperty>
    獲取已經(jīng)存在的Bean對象中的屬性值,在頁面中顯示。

    <jsp:getProperty name="beanInstanceName property="propertyName"/>

    name:與存在的對象實例的名字相同。
    property:對象中屬性名

    (6)使用Applet插件:<jsp:plugin>
    使用<jsp:plugin>插入一個applet或Bean,必要的話還要下載一個Java插件用于執(zhí)行它。

    1  <jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
    2   <jsp:parmas>
    3    <jsp:param name="way" value="Hall"/>
    4   </jsp:params>
    5   <jsp:fallback>
    6    <p>Unable to load applet!</p>
    7   </fallback>
    8  </jsp:plugin>

    (7)定義參數(shù):<jsp:param>
    可以在<jsp:include>、<jsp:forward>、<jsp:plugin>中使用。

    (8)插件錯誤提示:<jsp:fallback>
    當(dāng)<jsp:plugin>插件不能夠正常顯示時顯示提示信息。

    三、JSP內(nèi)置對象
    1. Request:請求對象
    該對象封裝了用戶提交的信息,通過調(diào)用該對象相應(yīng)方法可以獲取封裝的信息。
    當(dāng)request對象獲取客戶提交的漢字字符是,會出現(xiàn)亂碼,必須進行特殊處理。
    常用方法:
    getParameter(String parameterName):獲取表單提交的信息。
    getProtocol():獲取客戶使用的協(xié)議。
    getServletPath():獲取客戶提交信息的頁面。
    getMethod():獲取客戶提交信息的方式。
    getHeader(String str):獲取HTTP頭文件中的accept、accept-encoding和Host的值。
    getRermoteHost():獲取客戶的IP地址。
    getServerName:獲取服務(wù)器名稱。
    getServerPort:獲取服務(wù)器的端口號。
    getParameterNames():獲取客戶段提交的所有參數(shù)的名字。

    2. Response:響應(yīng)對象
    對客戶的請求做出動態(tài)的響應(yīng),向客戶端發(fā)生數(shù)據(jù)。
    (1)動態(tài)響應(yīng)contentType屬性
    用page指令靜態(tài)地設(shè)置頁面的contentType屬性,動態(tài)設(shè)置這個屬性時使用response.setContextType("text/html;charset=utf-8");
    (2)Response重定向
    response.sendRedirect("index.jsp");

    3. Session:會話對象
    (1)什么是Session對象?
    Session對象在第一個JSP頁面被裝載時自動創(chuàng)建,完成會話期管理。
    從一個客戶打開瀏覽器并連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束,被稱為一個會話。
    (2)Session對象的ID
    當(dāng)一個客戶首次訪問服務(wù)器上的一個JSP頁面時,JSP引擎產(chǎn)生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發(fā)送到客戶端,存放在Cookie中,這樣Session對象,直到客戶關(guān)閉瀏覽器后服務(wù)器端改該客戶的Session對象才取消,并且和客戶的會話對應(yīng)關(guān)系消失。
    (3)常用方法
    public String getId():獲取Session對象的編號。
    public void setAttribute(String str,Object obj):將參數(shù)對象添加到Session對象中。
    public Object getAttribute():根據(jù)屬性名獲取在Session對象中的屬性。
    public boolean isNew():判斷是否是一個新的客戶。

    4. Application:應(yīng)用程序?qū)ο?
    (1)什么是Application對象?
    在服務(wù)器啟動后就產(chǎn)生了這個Application對象,當(dāng)客戶在所訪問的網(wǎng)站的各個頁面之間瀏覽時,這個Appliaction對象都是同一個,所有的客戶共享這個內(nèi)置的Application對象。
    (2)常用方法
    setAttribute(String key,Object obj):將參數(shù)對象添加到Application對象中。
    getAttibute(String key):根據(jù)屬性名獲取Application對象中的屬性

    5. Out:輸出對象
    out對象是一個輸出流,用來向客戶輸出數(shù)據(jù)。
    out.print():輸出各種類型數(shù)據(jù)。
    out.newLine():輸出一個換行符。
    out.close():關(guān)閉流。

    6. Config:配置對象
    一般我們使用Config對象獲取一些初始化配置信息,常用的方法有g(shù)etInitParameter和getInitParameterNames,以獲得Servlet初始化時的參數(shù)。

    7.Page:頁面對象
    page對象代表了正在運行的由JSP文件產(chǎn)生的類對象,不建議一般讀者使用。

    8.PageContext:頁面上下文對象
    JSP引入的PageContext的類,通過它可以訪問頁面的許多屬性。pageContext變量存儲與當(dāng)前頁面相關(guān)聯(lián)的PageContext對象的值。PageContext類擁有g(shù)etRequest、getResponse、getOut、getSession等方法。

    9.Exception:例外對象
    exception對象代表了JSP文件運行時所產(chǎn)生的例外對象,此對象不能在一般的JSP文件中直接使用,而只能在使用了
    <%@page isErrorPage="true"%>的JSP文件中使用。這是因為JSP文件運行時產(chǎn)生的錯誤對象被向外拋出,只能被使用了
    <%@page isErrorPage="true"%>標記從而具有攔截錯誤對象功能的JSP所攔截。最常用的方法就是getMessage,用來獲取錯誤信息。

    四、實例
    登陸頁面:index.jsp

      1<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
      2<html>
      3 <head>
      4  <title>系統(tǒng)登錄</title>
      5  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      6  <link href="css/vbulletin.css" rel="stylesheet" type="text/css">
      7  <style type="text/css">
      8   .btn {
      9    font-family: "Tahoma", "宋體";
     10    font-size: 9pt;
     11    color: #001E3C;
     12    BORDER-BOTTOM: #6794BC 1px solid;
     13    BORDER-LEFT: #8BB8E0 1px solid;
     14    BORDER-RIGHT: #6794BC 1px solid;
     15    BORDER-TOP: #8BB8E0 1px solid;
     16    background-image: url(image/buttonbg.gif);
     17    CURSOR: hand;
     18    font-style: normal;
     19    padding-left: 3px;
     20    padding-right: 3px;
     21   }

     22  
    </style>  
     23  <script type="text/javascript">
     24   function doLogin(){
     25    var vform = document.loginform;
     26    if(!loginform.username.value){
     27     alert("請輸入用戶名!")
     28     return;
     29    }

     30     
     31    if(!loginform.password.value){
     32     alert("請輸入密碼!")
     33     return;
     34    }

     35   
     36    vform.submit();
     37    
     38   }

     39  
    </script>
     40 </head>
     41 <body topmargin="0" leftmargin="0" >
     42  <form action="receive.jsp" name="longinForm" method="post">
     43   <table width="100%" height="100%"> 
     44    <tr>
     45     <td align="center" valign="middle">
     46      <TABLE id="form1"    
     47       cellspacing="0" cellpadding="0" border="0" style="width: 500;">
     48       <CAPTION style="display: none">
     49       </CAPTION>
     50       <TR>
     51        <TD>
     52         <TABLE width="100%" height="100%" cellspacing="0" 
     53          cellpadding="0" border="0" style="table-layout: fixed">
     54          <TR>
     55           <TD valign="top">
     56            <FIELDSET id="form1_group0" style="width: 100%;">
     57             <LEGEND>系統(tǒng)登錄</LEGEND>
     58             <DIV>
     59              <DIV  style="width: 100%; height: 100%">
     60               <TABLE  width="100%" cellspacing="0"
     61                cellpadding="4" border="0" style="table-layout: fixed;">
     62                <COLGROUP>
     63                 <COL width="100"></COL>
     64                 <COL width="50%"></COL>
     65                 <COL width="100"></COL>
     66                 <COL width="50%"></COL>
     67                </COLGROUP>
     68                <TR>
     69                 <TD  align="right">
     70                  用戶名
     71                 </TD>
     72                 <TD class="InnerTableContentCell">
     73                  <input type="text" name="username"
     74                   style="width: 100%;">
     75                 </TD>
     76                 <TD  align="right">
     77                  密碼
     78                 </TD>
     79                 <TD>
     80                  <input type="password" name="password"
     81                   style="width: 100%;" />
     82                  <input type="hidden" name="action2" value="0">
     83                 </TD>
     84                </TR>
     85                <TR>
     86                 <TD colSpan="4"
     87                  align="right">
     88                  <input type="button" name="login" value="登錄" onclick="this.form.submit();"   class="btn"/>
     89                 </TD>
     90                </TR>
     91               </TABLE>
     92              </DIV>
     93             </DIV>
     94            </FIELDSET>
     95           </TD>
     96          </TR>
     97         </TABLE>
     98        </TD>
     99       </TR>
    100      </TABLE>
    101     </td>
    102    </tr>
    103   </table>
    104  </form>
    105 </body>
    106</html>

    接收數(shù)據(jù)頁面:receive.jsp

     1<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="動作標簽"%>
     2
     3<jsp:useBean id="userVo" class="exercise.vo.UserVo" scope="request">
     4  <jsp:setProperty name="userVo" property="name" param="username"/>
     5  <jsp:setProperty name="userVo" property="password" param="password"/>
     6</jsp:useBean>
     7
     8<html>
     9  <head>
    10    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
    11    <link href="css/vbulletin.css" rel="stylesheet" type="text/css">
    12  </head>
    13  
    14  <body> 
    15    This is my JSP page. <br>
    16    <hr>&lt;jsp:getProperty&gt;獲取表單中提交過來的值<br>
    17    name:<jsp:getProperty property="name" name="userVo"/><br>
    18    password:<jsp:getProperty property="password" name="userVo"/>
    19    <br><br><hr>
    20    <%
    21      out.println("從vo對象中直接獲取:<br> name:"+userVo.getName()+
    22      "<br>password:"+userVo.getPassword()+"<br>");
    23      String serviceName = request.getServerName();//1.jsp內(nèi)部的request對象
    24      out.println("<br><hr>服務(wù)器名: "+serviceName);
    25      out.println("<br>MIME類型: "+response.getContentType());//2.jsp內(nèi)部的response對象
    26      session.setAttribute("sessionName","jsp內(nèi)部的session對象");//3.jsp內(nèi)部的session對象
    27      out.println("<br>session對象: "+session.getAttribute("sessionName"));//4.jsp內(nèi)部的out對象
    28      pageContext.setAttribute("pageContext","上下文環(huán)境的引用");//5.jsp內(nèi)部的pageContext對象
    29     //6. application
    30     //7. config   ServletConfig的實例
    31     //8. page   java.lang.Object的實例
    32     //9. exception  必須在page指令中isErrorPage=true的頁面使用   java.lang.Throwable的一個實例
    33     String info = pageContext.getServletContext().getServerInfo();
    34     out.println("獲取page指令中的info屬性:"+info);
    35    
    %>
    36  </body>
    37</html>


     

    posted on 2009-04-12 20:51 hackiller 閱讀(1195) 評論(2)  編輯  收藏 所屬分類: J2EE第一次復(fù)習(xí)

    評論

    # re: J2EE復(fù)習(xí)(五)JSP基礎(chǔ) 2009-04-12 23:47 cbbs

    總結(jié)得不錯!
      回復(fù)  更多評論    

    # re: J2EE復(fù)習(xí)(五)JSP基礎(chǔ) 2009-04-13 20:32 hackiller

    @cbbs
    謝謝,歡迎常來坐坐!
      回復(fù)  更多評論    
    主站蜘蛛池模板: 久久亚洲AV无码精品色午夜| 国产一级一片免费播放i| 在线精品免费视频无码的| 黄视频在线观看免费| 亚洲乱色熟女一区二区三区蜜臀| 久久久久久a亚洲欧洲aⅴ| 免费一级毛片在级播放| 97在线观免费视频观看 | 亚洲黄色免费电影| fc2免费人成在线| 国产精品亚洲AV三区| 在线aⅴ亚洲中文字幕| 亚洲天堂福利视频| 亚洲电影一区二区三区| 久久久久亚洲AV成人网| 亚洲伦乱亚洲h视频| 免费va人成视频网站全| 日韩在线a视频免费播放| 毛片免费视频播放| 国产在线观看麻豆91精品免费| 久久免费观看国产精品| a级毛片免费全部播放| a免费毛片在线播放| 黄色a三级免费看| 色噜噜狠狠色综合免费视频| 亚洲AV香蕉一区区二区三区| 亚洲欧美日韩综合久久久| 亚洲人成网站色在线观看| 亚洲乱码一区av春药高潮| 亚洲成av人片不卡无码| 亚洲国产成人精品久久| 亚洲a∨无码男人的天堂| 亚洲一级免费毛片| 亚洲精品久久久久无码AV片软件| 亚洲中文字幕无码一去台湾| 中文字幕亚洲精品无码| 亚洲国产精品日韩av不卡在线| 亚洲成AV人影片在线观看| 边摸边脱吃奶边高潮视频免费| 老司机免费午夜精品视频| 成人嫩草影院免费观看|