亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP基礎

2019-11-17 03:59:16
字體:
來源:轉載
供稿:網友
一、jsp簡介
JSP (java Server Pages)是服務器端的腳本語言,是一種在HTML頁面中加入Java語言而生成動態頁面的技術:加入了新的標簽(<%,%>,…)。
JSP是以Java和Servlet為基礎開發而成的動態網頁生成技術,它的底層實現是Java Servlet。
JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端所請求以后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。


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


三、JSP基本語法
1. 兩種注釋類型
(1)HTML注釋
可以在JSP代碼中添加一段HTML格式的注釋,此注釋發生到客戶端,但不在頁面上顯示,語法如下:
<!-- HTML格式的注釋,在客戶端查看源代碼時可見 -->
<!-- 此注釋由<%=PRogrammer%>添加-->
如果programmer為hackiller,則在客戶端返回的注釋是<!-- 此注釋由hackiller添加-->
(2)JSP注釋
寫在JSP代碼中,但不發送到客戶端。
<%-- JSP注釋,該注釋會在JSP編譯時被忽略掉 --%>
<%-- /*Scriptlet中的多行注釋*/ --%>
<%-- /**Scriptlet中的多行注釋,可以用javadoc從java文件中提取出來*/ --%>
<%-- JSP的單行注釋 --%>


2. 3個腳本元素
(1)聲明(Declaration)全局變量
<%! int i=0; String str="Hello World!"; %>
(2)表達式(Expression)
在JSP代碼中,經常使用表達式來輸出變量的值,可以在任何地方
<%! int a=1; int b=2; String str="Hello World!"; %>
<%=a+b%>  <%=str>
PS:不能用“;”號來作為表達式的結束符。但同樣的表達式在Scriptlet中必須以分號來結尾。
(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(服務端到客戶端的輸出格式)
其位置可以在頁面的任何位置,但推薦放在頁首。
language:聲明腳本語言的種類,目前只能用"java"。
extends:標明JSP編譯時需要加入的Java Class的全名,它會限制JSP的編譯能力,慎用!
import:需要導入的java包列表。
session:設定客戶是否需要HTTP Session。默認為true。
buffer:buffer的大小被out對象用于處理執行后的JSP對客戶瀏覽器的輸出。默認值為8Kb。
autoFlush:設置如果buffer溢出,是否要強制輸出,如果定義其為true(默認值),輸出正常;如果定義為false,會導致一個意外錯誤的發生。
isThreadSafe:設置JSP文件是否能多線程使用。默認為true。
info:文本信息。能夠使用Servlet.getServletInfo()方法取回。
errorPage:設置處理異常事件的JSP文件
sErrorPage:設置此頁是否為處理異常事件的頁面,如果設置為true,就能使用exception對象。
contentType:設置MIME類型和字符編碼集。MIME類型默認為text/html,字符集默認為charset=ISO-8859-1。
可以在一個頁面中使用多個<%@page %>指令,但是除了import屬性,其他的屬性只能使用一次。
JSP缺省引入的包,下面這些包在JSP編譯時已經導入了,所以在JSP文件中無需再用page指令引入:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*

(2)include指令

Html代碼
<%@ include file = "相對路徑" %>   
使用include指令可以在JSP中包含一個靜態的文件,同時解析這個文件中JSP語句。
如果路徑以“/”開頭,那么此路徑主要是參照jsp應用的上下文關系路徑。
如果路徑以文件名或文件目錄開通,那么此路徑就是正在使用的JSP文件的當前路徑。

(3)taglib指令

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

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

Html代碼
<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>允許包含靜態和動態Web資源,這兩種包含的結果是不同的。
如果包含的僅是靜態文件,那么這種包含僅僅是把包含文件的內容加到JSP文件中去,類似于<%@include%>;
如果包含的是動態web資源,那么這個被包含的文件也會被JSP編譯器執行。
如果這個包含文件是動態的,那么還可以使用<jsp:param》傳遞參數和參數值。

(3)創建Bean:<jsp:useBean>
創建一個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關鍵字及class構造器從一個class中實例一個bean。這個class不能是抽象的,并且必須有一個公用的,沒有參數的構造器。
type:如果這個Bean已經指定范圍中存在,使用type將賦予這個Bean一個數據類型。如果使用type的同時沒有使用class或beanName,Bean將不會被實例化。
beanName:beanName可以是字符串的package.class,也可以是jsp表達式,它的值會傳遞給Beans.instantiate方法。type的值可以與beanName相同也可以是它的基類,或者是它所實現的接口。

(4)設置Bean屬性:<jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name:表示已經在<jsp:useBean>中創建的Bean實例的名字,即id。
property:匹配Bean中的屬性
param:指request對象中的參數名,將對應的值設定給Bean的屬性。
value:使用指定的值來設定Bean屬性。這個值可以是字符串,也可以是表達式。如果是字符串,那么就會被轉換成Bean屬性的類型(如"0.98"會轉化成double類型0.98)。如果是表達式,則要求它的類型與Bean屬性的類型一致。
PS:在同一個<jsp:setProperty>中不能同時使用param屬性和value屬性


(5)取得Bean屬性:<jsp:getProperty>
獲取已經存在的Bean對象中的屬性值,在頁面中顯示。
<jsp:getProperty name="beanInstanceName property="propertyName"/>
name:與存在的對象實例的名字相同。
property:對象中屬性名


(6)使用Applet插件:<jsp:plugin>

Html代碼
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">   
<jsp:parmas>   
  <jsp:param name="way" value="Hall"/>   
</jsp:params>   
<jsp:fallback>   
  <p>Unable to load applet!</p>   
</fallback>   
</jsp:plugin>   
使用<jsp:plugin>插入一個applet或Bean,必要的話還要下載一個Java插件用于執行它。


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

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

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

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

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

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

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

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

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

8.PageContext:頁面上下文對象
JSP引入的PageContext的類,通過它可以訪問頁面的許多屬性。pageContext變量存儲與當前頁面相關聯的PageContext對象的值。PageContext類擁有getRequest、getResponse、getOut、getSession等方法。

9.Exception:例外對象
exception對象代表了JSP文件運行時所產生的例外對象,此對象不能在一般的JSP文件中直接使用,而只能在使用了

<%@page isErrorPage="true"%>的JSP文件中使用。這是因為JSP文件運行時產生的錯誤對象被向外拋出,只能被使用了<%@pageisErrorPage="true"%>標記從而具有攔截錯誤對象功能的JSP所攔截。最常用的方法就是getMessage,用來獲取錯誤信息。

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

Html代碼
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>   
<html>   
<head>   
  <title>系統登錄</title>   
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">   
  <link href="CSS/vbulletin.css" rel="stylesheet" type="text/css">   
  <style type="text/css">   
   .btn {   
    font-family: "Tahoma", "宋體";   
    font-size: 9pt;   
    color: #001E3C;   
    BORDER-BOTTOM: #6794BC 1px solid;   
    BORDER-LEFT: #8BB8E0 1px solid;   
    BORDER-RIGHT: #6794BC 1px solid;   
    BORDER-TOP: #8BB8E0 1px solid;   
    background-image: url(image/buttonbg.gif);   
    CURSOR: hand;   
    font-style: normal;   
    padding-left: 3px;   
    padding-right: 3px;   
   }   
  </style>     
  <script type="text/Javascript">   
   function doLogin(){   
    var vform = document.loginform;   
    if(!loginform.username.value){   
     alert("請輸入用戶名!")   
     return;   
    }   
        
    if(!loginform.password.value){   
     alert("請輸入密碼!")   
     return;   
    }   
      
    vform.submit();   
       
   }   
  </script>   
</head>   
<body topmargin="0" leftmargin="0" >   
  <form action="receive.jsp" name="longinForm" method="post">   
   <table width="100%" height="100%">    
    <tr>   
     <td align="center" valign="middle">   
      <TABLE id="form1"       
       cellspacing="0" cellpadding="0" border="0" style="width: 500;">   
       <CAPTION style="display: none">   
       </CAPTION>   
       <TR>   
        <TD>   
         <TABLE width="100%" height="100%" cellspacing="0"    
          cellpadding="0" border="0" style="table-layout: fixed">   
          <TR>   
           <TD valign="top">   
            <FIELDSET id="form1_group0" style="width: 100%;">   
             <LEGEND>系統登錄</LEGEND>   
             <DIV>   
              <DIV  style="width: 100%; height: 100%">   
               <TABLE  width="100%" cellspacing="0"   
                cellpadding="4" border="0" style="table-layout: fixed;">   
                <COLGROUP>   
                 <COL width="100"></COL>   
                 <COL width="50%"></COL>   
                 <COL width="100"></COL>   
                 <COL width="50%"></COL>   
                </COLGROUP>   
                <TR>   
                 <TD  align="right">   
                  用戶名   
                 </TD>   
                 <TD class="InnerTableContentCell">   
                  <input type="text" name="username"   
                   style="width: 100%;">   
                 </TD>   
                 <TD  align="right">   
                  密碼   
                 </TD>   
                 <TD>   
                  <input type="password" name="password"   
                   style="width: 100%;" />   
                  <input type="hidden" name="action2" value="0">   
                 </TD>   
                </TR>   
                <TR>   
                 <TD colSpan="4"   
                  align="right">   
                  <input type="button" name="login" value="登錄" onclick="this.form.submit();"   class="btn"/>   
                 </TD>   
                </TR>   
               </TABLE>   
              </DIV>   
             </DIV>   
            </FIELDSET>   
           </TD>   
          </TR>   
         </TABLE>   
        </TD>   
       </TR>   
      </TABLE>   
     </td>   
    </tr>   
   </table>   
  </form>   
</body>   
</html>   
接收數據頁面:receive.jsp

Html代碼
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="動作標簽"%>   
   
<jsp:useBean id="userVo" class="exercise.vo.UserVo" scope="request">   
  <jsp:setProperty name="userVo" property="name" param="username"/>   
  <jsp:setProperty name="userVo" property="password" param="password"/>   
</jsp:useBean>   
   
<html>   
  <head>   
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >   
    <link href="css/vbulletin.css" rel="stylesheet" type="text/css">   
  </head>   
     
  <body>    
    This is my JSP page. <br>   
    <hr>用&lt;jsp:getProperty&gt;獲取表單中提交過來的值<br>   
    name:<jsp:getProperty property="name" name="userVo"/><br>   
    password:<jsp:getProperty property="password" name="userVo"/>   
    <br><br><hr>   
    <%   
      out.println("從vo對象中直接獲?。?lt;br> name:"+userVo.getName()+   
      "<br>password:"+userVo.getPassword()+"<br>");   
      String serviceName = request.getServerName();//1.jsp內部的request對象   
      out.println("<br><hr>服務器名: "+serviceName);   
      out.println("<br>MIME類型: "+response.getContentType());//2.jsp內部的response對象   
      session.setAttribute("sessionName","jsp內部的session對象");//3.jsp內部的session對象   
      out.println("<br>session對象: "+session.getAttribute("sessionName"));//4.jsp內部的out對象   
      pageContext.setAttribute("pageContext","上下文環境的引用");//5.jsp內部的pageContext對象   
     //6. application   
     //7. config   ServletConfig的實例   
     //8. page   java.lang.Object的實例   
     //9. exception  必須在page指令中isErrorPage=true的頁面使用   java.lang.Throwable的一個實例   
     String info = pageContext.getServletContext().getServerInfo();   
     out.println("獲取page指令中的info屬性:"+info);   
    %>   
  </body>   
</html>   
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频在线观看亚洲| 欧美电影免费观看高清| 欧美国产日韩一区二区三区| 日韩精品亚洲精品| 亚洲精品视频在线观看视频| 欧美大尺度电影在线观看| 日韩经典一区二区三区| www国产亚洲精品久久网站| 456亚洲影院| 欧美午夜精品伦理| 97精品国产91久久久久久| 午夜精品久久久久久99热| 久久久国产视频| 欧美性精品220| 国产97色在线|日韩| 久久免费高清视频| 亚洲一区二区久久久久久| 亚洲片在线观看| 91久久国产综合久久91精品网站| 国内精品模特av私拍在线观看| 欧美一区第一页| 亚洲乱码国产乱码精品精天堂| 亚洲日本欧美日韩高观看| 亚洲欧美日韩直播| 国内精品一区二区三区四区| 97超碰国产精品女人人人爽| 国产精欧美一区二区三区| 高清视频欧美一级| 亚洲精品网站在线播放gif| 国产精品小说在线| 欧美精品videofree1080p| 国产欧美精品在线播放| 午夜免费日韩视频| 麻豆乱码国产一区二区三区| 亚洲国内高清视频| 久久久久久久999精品视频| 亚洲色图第三页| 国产精品久久久久久久久| 日韩精品视频在线| 午夜精品久久久久久99热软件| 91在线无精精品一区二区| 2019亚洲日韩新视频| 日韩在线观看免费高清| 国产亚洲欧美aaaa| 亚洲a成v人在线观看| 欧美成人免费va影院高清| 亚洲精品一区二区三区婷婷月| 黑人与娇小精品av专区| 日韩麻豆第一页| 91人成网站www| 992tv在线成人免费观看| 动漫精品一区二区| 国产亚洲精品va在线观看| 国产91精品最新在线播放| 国产精品久久久久久久久粉嫩av| 精品久久香蕉国产线看观看gif| 福利微拍一区二区| 精品久久久久人成| 久久免费成人精品视频| 亚洲成人激情在线观看| 91av免费观看91av精品在线| 国产精品第一区| 欧美视频免费在线| 日本久久亚洲电影| 91中文精品字幕在线视频| 福利视频一区二区| 亚洲大胆人体视频| 91日本在线观看| 精品中文字幕乱| 亚洲成人激情在线观看| 成人www视频在线观看| 中文字幕亚洲自拍| 日韩在线免费视频观看| 久久国产精品久久久| 亚洲视频欧洲视频| 97免费在线视频| 亚洲一级一级97网| 亚洲精品国精品久久99热一| 欧美激情视频网址| 久久精品国产亚洲精品| 亚洲国产精品99久久| 日韩va亚洲va欧洲va国产| 亚洲性生活视频在线观看| 久久天堂av综合合色| 欧美日韩999| 精品国产31久久久久久| 国内精品视频久久| 亚洲天堂一区二区三区| 国产成人一区二区三区电影| 亚洲嫩模很污视频| 日本午夜人人精品| 91a在线视频| 亚洲欧美国产日韩中文字幕| 国产午夜精品全部视频在线播放| 欧美日韩国产成人| 97久久久久久| 欧美激情欧美激情| 欧美一区二区三区艳史| 日韩成人xxxx| 亚洲天堂2020| 亚洲国产高清高潮精品美女| 久久欧美在线电影| 国产亚洲精品日韩| 尤物tv国产一区| 97视频免费在线看| 欧美综合一区第一页| 欧美视频在线视频| 国产亚洲成精品久久| 国产欧美中文字幕| 久久69精品久久久久久国产越南| 亚洲www永久成人夜色| 欧美激情精品久久久久久变态| 欧美性猛交xxxx黑人| 亚洲精品一区二区网址| 亚洲国产一区自拍| 国内精品久久久久影院 日本资源| 欧美日韩在线视频观看| 国产精品视频免费在线| 国产视频久久久久| 亚洲综合在线做性| 中文日韩在线视频| 成人午夜在线影院| 久久久久久久一| 在线视频欧美性高潮| 成人伊人精品色xxxx视频| 久久精品国产成人| 亚洲自拍小视频免费观看| 国产精品久久久久久久久影视| 成人免费网站在线| 热99在线视频| 欧美天天综合色影久久精品| 久久久精品一区二区三区| 国产精品99久久久久久久久久久久| 国产综合福利在线| 中文字幕欧美日韩精品| 欧美—级高清免费播放| 高清日韩电视剧大全免费播放在线观看| 日本成人精品在线| 亚洲综合在线播放| 欧美电影在线观看| 日本久久精品视频| 琪琪第一精品导航| 国产精品高潮粉嫩av| 美女视频黄免费的亚洲男人天堂| 成人福利在线视频| 亚洲免费av片| 欧美日韩在线视频一区二区| 欧美中文字幕第一页| 国产精品户外野外| 亚洲欧美一区二区激情| 欧美性猛交丰臀xxxxx网站| 国产精品视频一区二区高潮| 欧美一级黑人aaaaaaa做受| 国内偷自视频区视频综合| 国产丝袜一区二区三区| 夜夜嗨av一区二区三区免费区| 久久久久久久一区二区| 久久久噜久噜久久综合| 久久久久久久久中文字幕| 97国产精品免费视频| 亚洲图中文字幕| 日本国产精品视频| 久久久久久亚洲精品不卡| 亚洲国产女人aaa毛片在线|