Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 99国产精品九九视频免费看,成人欧美影片在线观看免费视频,日韩一区二区三区免费视频

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JSP 表單處理

          我們在瀏覽網(wǎng)頁的時(shí)候,經(jīng)常需要向服務(wù)器提交信息,并讓后臺(tái)程序處理。瀏覽器中使用 GET 和 POST 方法向服務(wù)器提交數(shù)據(jù)。

          GET 方法

          GET方法將請求的編碼信息添加在網(wǎng)址后面,網(wǎng)址與編碼信息通過"?"號(hào)分隔。如下所示:

          http://www.runoob.com/hello?key1=value1&key2=value2

          GET方法是瀏覽器默認(rèn)傳遞參數(shù)的方法,一些敏感信息,如密碼等建議不使用GET方法。

          用get時(shí),傳輸數(shù)據(jù)的大小有限制 (注意不是參數(shù)的個(gè)數(shù)有限制),最大為1024字節(jié)。

          POST 方法

          一些敏感信息,如密碼等我們可以通過POST方法傳遞,POST提交數(shù)據(jù)是隱式的。

          POST提交數(shù)據(jù)是不可見的,GET是通過在url里面?zhèn)鬟f的(可以看一下你瀏覽器的地址欄)。

          JSP使用getParameter()來獲得傳遞的參數(shù),getInputStream()方法用來處理客戶端的二進(jìn)制數(shù)據(jù)流的請求。

          JSP 讀取表單數(shù)據(jù)

          • getParameter(): 使用 request.getParameter() 方法來獲取表單參數(shù)的值。

          • getParameterValues(): 獲得如checkbox類(名字相同,但值有多個(gè))的數(shù)據(jù)。 接收數(shù)組變量 ,如checkbox類型

          • getParameterNames():該方法可以取得所有變量的名稱,該方法返回一個(gè)Emumeration。

          • getInputStream():調(diào)用此方法來讀取來自客戶端的二進(jìn)制數(shù)據(jù)流。



          使用URL的 GET 方法實(shí)例

          以下是一個(gè)簡單的URL,并使用GET方法來傳遞URL中的參數(shù):

          http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com

          testjsp 為項(xiàng)目地址。

          以下是 main.jsp 文件的JSP程序用于處理客戶端提交的表單數(shù)據(jù),我們使用getParameter()方法來獲取提交的數(shù)據(jù):

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

          pageEncoding="UTF-8"%>

          <%@ page import="java.io.*,java.util.*" %>

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <h1>使用 GET 方法讀取數(shù)據(jù)</h1>

          <ul>

          <li><p><b>站點(diǎn)名:</b>

          <%= request.getParameter("name")%>

          </p></li>

          <li><p><b>網(wǎng)址:</b>

          <%= request.getParameter("url")%>

          </p></li>

          </ul>

          </body>

          </html>

          接下來我們通過瀏覽器訪問 http://localhost:8080/testjsp/main.jsp?name=菜鳥教程&url=http://ww.runoob.com 輸出結(jié)果如下所示:

          使用表單的 GET 方法實(shí)例

          以下是一個(gè)簡單的 HTML 表單,該表單通過GET方法將客戶端數(shù)據(jù)提交 到 main.jsp 文件中:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <form action="main.jsp" method="GET">

          站點(diǎn)名: <input type="text" name="name">

          <br />

          網(wǎng)址: <input type="text" name="url" />

          <input type="submit" value="提交" />

          </form>

          </body>

          </html>

          將以上HTML代碼保存到test.htm文件中。 將該文件放置于當(dāng)前jsp項(xiàng)目的 WebContent 目錄下(與 main.jsp 同一個(gè)目錄)。

          通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:

          在 "站點(diǎn)名" 與 "網(wǎng)址" 兩個(gè)表單中填入信息,并點(diǎn)擊 "提交" 按鈕,它將輸出結(jié)果。

          使用表單的 POST 方法實(shí)例

          接下來讓我們使用POST方法來傳遞表單數(shù)據(jù),修改main.jsp與Hello.htm文件代碼,如下所示:

          main.jsp文件代碼:

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

          pageEncoding="UTF-8"%>

          <%@ page import="java.io.*,java.util.*" %>

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <h1>使用 POST 方法讀取數(shù)據(jù)</h1>

          <ul>

          <li><p><b>站點(diǎn)名:</b>

          <%

          // 解決中文亂碼的問題

          String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");

          %>

          <%=name%>

          </p></li>

          <li><p><b>網(wǎng)址:</b>

          <%= request.getParameter("url")%>

          </p></li>

          </ul>

          </body>

          </html>

          代碼中我們使用 new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")來轉(zhuǎn)換編碼,防止中文亂碼的發(fā)生。

          以下是test.htm修改后的代碼:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <form action="main.jsp" method="POST">

          站點(diǎn)名: <input type="text" name="name">

          <br />

          網(wǎng)址: <input type="text" name="url" />

          <input type="submit" value="提交" />

          </form>

          </body>

          </html>

          通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:

          傳遞 Checkbox 數(shù)據(jù)到JSP程序

          復(fù)選框 checkbox 可以傳遞一個(gè)甚至多個(gè)數(shù)據(jù)。

          以下是一個(gè)簡單的HTML代碼,并將代碼保存在test.htm文件中:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <form action="main.jsp" method="POST" target="_blank">

          <input type="checkbox" name="google" checked="checked" /> Google

          <input type="checkbox" name="runoob" /> 菜鳥教程

          <input type="checkbox" name="taobao" checked="checked" />

          淘寶

          <input type="submit" value="選擇網(wǎng)站" />

          </form>

          </body>

          </html>

          以上代碼在瀏覽器訪問如下所示:

          以下為main.jsp文件代碼,用于處理復(fù)選框數(shù)據(jù):

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

          pageEncoding="UTF-8"%>

          <%@ page import="java.io.*,java.util.*" %>

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <h1>從復(fù)選框中讀取數(shù)據(jù)</h1>

          <ul>

          <li><p><b>Google 是否選中:</b>

          <%= request.getParameter("google")%>

          </p></li>

          <li><p><b>菜鳥教程是否選中:</b>

          <%= request.getParameter("runoob")%>

          </p></li>

          <li><p><b>淘寶是否選中:</b>

          <%= request.getParameter("taobao")%>

          </p></li>

          </ul>

          </body>

          </html>

          通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:

          讀取所有表單參數(shù)

          以下我們將使用 HttpServletRequestgetParameterNames() 來讀取所有表單參數(shù),該方法可以取得所有變量的名稱,該方法返回一個(gè)枚舉。

          一旦我們有了一個(gè) Enumeration(枚舉),我們就可以調(diào)用 hasMoreElements() 方法來確定是否還有元素,以及使用nextElement()方法來獲得每個(gè)參數(shù)的名稱。

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

          pageEncoding="UTF-8"%>

          <%@ page import="java.io.*,java.util.*" %>

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <h1>讀取所有表單參數(shù)</h1>

          <table width="100%" border="1" align="center">

          <tr bgcolor="#949494">

          <th>參數(shù)名</th><th>參數(shù)值</th>

          </tr>

          <%

          Enumeration paramNames = request.getParameterNames();

          while(paramNames.hasMoreElements()) {

          String paramName = (String)paramNames.nextElement();

          out.print("<tr><td>" + paramName + "</td>\n");

          String paramValue = request.getParameter(paramName);

          out.println("<td> " + paramValue + "</td></tr>\n");

          }

          %>

          </table>

          </body>

          </html>

          以下是test.htm文件的內(nèi)容:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>菜鳥教程(runoob.com)</title>

          </head>

          <body>

          <form action="main.jsp" method="POST" target="_blank">

          <input type="checkbox" name="google" checked="checked" /> Google

          <input type="checkbox" name="runoob" /> 菜鳥教程

          <input type="checkbox" name="taobao" checked="checked" />

          淘寶

          <input type="submit" value="選擇網(wǎng)站" />

          </form>

          </body>

          </html>

          現(xiàn)在我們通過瀏覽器訪問 test.htm 文件提交數(shù)據(jù),輸出結(jié)果如下:

          通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:

          你可以嘗試使用以上的JSP代碼讀取其它對象,如文本框,單選按鈕或下拉框等等其他形式的數(shù)據(jù)。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          自定義標(biāo)簽是用戶定義的JSP語言元素。當(dāng)JSP頁面包含一個(gè)自定義標(biāo)簽時(shí)將被轉(zhuǎn)化為servlet,標(biāo)簽轉(zhuǎn)化為對被 稱為tag handler的對象的操作,即當(dāng)servlet執(zhí)行時(shí)Web container調(diào)用那些操作。

          JSP標(biāo)簽擴(kuò)展可以讓你創(chuàng)建新的標(biāo)簽并且可以直接插入到一個(gè)JSP頁面。 JSP 2.0規(guī)范中引入Simple Tag Handlers來編寫這些自定義標(biāo)記。

          你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發(fā)一個(gè)最簡單的自定義標(biāo)簽。

          創(chuàng)建"Hello"標(biāo)簽

          接下來,我們想創(chuàng)建一個(gè)自定義標(biāo)簽叫作<ex:Hello>,標(biāo)簽格式為:

          <ex:Hello />

          要?jiǎng)?chuàng)建自定義的JSP標(biāo)簽,你首先必須創(chuàng)建處理標(biāo)簽的Java類。所以,讓我們創(chuàng)建一個(gè)HelloTag類,如下所示:

          package com.runoob;

          import javax.servlet.jsp.tagext.*;

          import javax.servlet.jsp.*;

          import java.io.*;

          public class HelloTag extends SimpleTagSupport {

          public void doTag() throws JspException, IOException {

          JspWriter out = getJspContext().getOut();

          out.println("Hello Custom Tag!");

          }

          }

          以下代碼重寫了doTag()方法,方法中使用了getJspContext()方法來獲取當(dāng)前的JspContext對象,并將"Hello Custom Tag!"傳遞給JspWriter對象。

          編譯以上類,并將其復(fù)制到環(huán)境變量CLASSPATH目錄中。最后創(chuàng)建如下標(biāo)簽庫:<Tomcat安裝目錄>webapps\ROOT\WEB-INF\custom.tld。

          <taglib>

          <tlib-version>1.0</tlib-version>

          <jsp-version>2.0</jsp-version>

          <short-name>Example TLD</short-name>

          <tag>

          <name>Hello</name>

          <tag-class>com.runoob.HelloTag</tag-class>

          <body-content>empty</body-content>

          </tag>

          </taglib>

          接下來,我們就可以在JSP文件中使用Hello標(biāo)簽:

          <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>

          <html>

          <head>

          <title>A sample custom tag</title>

          </head>

          <body>

          <ex:Hello/>

          </body>

          </html>

          以上程序輸出結(jié)果為:

          Hello Custom Tag!

          訪問標(biāo)簽體

          你可以像標(biāo)準(zhǔn)標(biāo)簽庫一樣在標(biāo)簽中包含消息內(nèi)容。如我們要在我們自定義的Hello中包含內(nèi)容,格式如下:

          <ex:Hello>

          This is message body

          </ex:Hello>

          我們可以修改標(biāo)簽處理類文件,代碼如下:

          package com.runoob;

          import javax.servlet.jsp.tagext.*;

          import javax.servlet.jsp.*;

          import java.io.*;

          public class HelloTag extends SimpleTagSupport {

          StringWriter sw = new StringWriter();

          public void doTag()

          throws JspException, IOException

          {

          getJspBody().invoke(sw);

          getJspContext().getOut().println(sw.toString());

          }

          }

          接下來我們需要修改TLD文件,如下所示:

          <taglib>

          <tlib-version>1.0</tlib-version>

          <jsp-version>2.0</jsp-version>

          <short-name>Example TLD with Body</short-name>

          <tag>

          <name>Hello</name>

          <tag-class>com.runoob.HelloTag</tag-class>

          <body-content>scriptless</body-content>

          </tag>

          </taglib>

          現(xiàn)在我們可以在JSP使用修改后的標(biāo)簽,如下所示:

          <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>

          <html>

          <head>

          <title>A sample custom tag</title>

          </head>

          <body>

          <ex:Hello>

          This is message body

          </ex:Hello>

          </body>

          </html>

          以上程序輸出結(jié)果如下所示:

          This is message body

          自定義標(biāo)簽屬性

          你可以在自定義標(biāo)準(zhǔn)中設(shè)置各種屬性,要接收屬性,值自定義標(biāo)簽類必須實(shí)現(xiàn)setter方法, JavaBean 中的setter方法如下所示:

          package com.runoob;

          import javax.servlet.jsp.tagext.*;

          import javax.servlet.jsp.*;

          import java.io.*;

          public class HelloTag extends SimpleTagSupport {

          private String message;

          public void setMessage(String msg) {

          this.message = msg;

          }

          StringWriter sw = new StringWriter();

          public void doTag()

          throws JspException, IOException

          {

          if (message != null) {

          /* 從屬性中使用消息 */

          JspWriter out = getJspContext().getOut();

          out.println( message );

          }

          else {

          /* 從內(nèi)容體中使用消息 */

          getJspBody().invoke(sw);

          getJspContext().getOut().println(sw.toString());

          }

          }

          }

          屬性的名稱是"message",所以setter方法是的setMessage()。現(xiàn)在讓我們在TLD文件中使用的<attribute>元素添加此屬性:

          <taglib>

          <tlib-version>1.0</tlib-version>

          <jsp-version>2.0</jsp-version>

          <short-name>Example TLD with Body</short-name>

          <tag>

          <name>Hello</name>

          <tag-class>com.runoob.HelloTag</tag-class>

          <body-content>scriptless</body-content>

          <attribute>

          <name>message</name>

          </attribute>

          </tag>

          </taglib>

          現(xiàn)在我們就可以在JSP文件中使用message屬性了,如下所示:

          <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>

          <html>

          <head>

          <title>A sample custom tag</title>

          </head>

          <body>

          <ex:Hello message="This is custom tag" />

          </body>

          </html>

          以上實(shí)例數(shù)據(jù)輸出結(jié)果為:

          This is custom tag

          你還可以包含以下屬性:

          屬性描述
          name定義屬性的名稱。每個(gè)標(biāo)簽的是屬性名稱必須是唯一的。
          required指定屬性是否是必須的或者可選的,如果設(shè)置為false為可選。
          rtexprvalue聲明在運(yùn)行表達(dá)式時(shí),標(biāo)簽屬性是否有效。
          type定義該屬性的Java類類型 。默認(rèn)指定為 String
          description描述信息
          fragment如果聲明了該屬性,屬性值將被視為一個(gè) JspFragment

          以下是指定相關(guān)的屬性實(shí)例:

          .....

          <attribute>

          <name>attribute_name</name>

          <required>false</required>

          <type>java.util.Date</type>

          <fragment>false</fragment>

          </attribute>

          .....

          如果你使用了兩個(gè)屬性,修改TLD文件,如下所示:

          .....

          <attribute>

          <name>attribute_name1</name>

          <required>false</required>

          <type>java.util.Boolean</type>

          <fragment>false</fragment>

          </attribute>

          <attribute>

          <name>attribute_name2</name>

          <required>true</required>

          <type>java.util.Date</type>

          </attribute>

          .....

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          言:在CGI(通用網(wǎng)關(guān)接口)編程風(fēng)行的日子,人們紛紛尋思簡化并讓其更加靈活的新方法和新技術(shù),包括PHP、JSP、ASP。1997年SUN公司推出了servlet,1999年初,SUN公司推出了JSP,實(shí)際上在servlet基礎(chǔ)上修改而成。JSP即Java服務(wù)器頁面(Java Server Page),將HTML和JAVA代碼使用某種方式結(jié)合起來,完成前后端的有效交互。本文通過JSP歷史回顧和應(yīng)用總結(jié)來審視過去和開拓未來。

          1.從實(shí)例項(xiàng)目入手

          其實(shí),從現(xiàn)在看來JSP依然極具魅力,據(jù)了解很多JSP老項(xiàng)目還在維護(hù)。下面使用STS作為IDE構(gòu)建一個(gè)實(shí)例項(xiàng)目,先體驗(yàn)其效果。

          1.1 動(dòng)態(tài)web項(xiàng)目模板

          如下圖,使用new dynamic web project創(chuàng)建項(xiàng)目:

          1.2修改文件編碼

          進(jìn)入preferences修改JSP文件的編碼:

          1.3 編寫簡單的JSP文件

          新增一個(gè)JSP文件到WebContent目錄,如下

          然后檢查并修改編碼,應(yīng)該都是UTF-8,如下圖:

          如果不是,就修改。

          1.4運(yùn)行和測試

          選中項(xiàng)目名稱,點(diǎn)郵件菜單的Run as ...-->Run on server

          之后出現(xiàn)如下界面:

          若沒有現(xiàn)存的tomcat server,就自己加一個(gè)。點(diǎn)Finish。然后自動(dòng)調(diào)用chrome,界面如下:

          自動(dòng)調(diào)用瀏覽器設(shè)置的地方是windows-->Web browser菜單:

          1.5增加功能:顯示IP地址

          (1)顯示ip地址:getRemoteAddr

          (2)變量聲明<%! %>

          (3)表達(dá)式<%=%>

          2.JSP語言介紹

          2.1語法

          語法

          描述

          <%-- 注釋 --%>

          JSP注釋,注釋內(nèi)容不會(huì)被發(fā)送至瀏覽器甚至不會(huì)被編譯

          <!-- 注釋 -->

          HTML注釋,通過瀏覽器查看網(wǎng)頁源代碼時(shí)可以看見注釋內(nèi)容

          <\%

          代表靜態(tài) <%常量

          %\>

          代表靜態(tài) %> 常量

          \'

          在屬性中使用的單引號(hào)

          \"

          在屬性中使用的雙引號(hào)

          2.2指令

          指令

          描述

          <%@ page ... %>

          定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等

          <%@ include ... %>

          包含其他文件

          <%@ taglib ... %>

          引入標(biāo)簽庫的定義,可以是自定義標(biāo)簽

          2.3Page指令屬性

          屬性

          描述

          buffer

          指定out對象使用緩沖區(qū)的大小

          autoFlush

          控制out對象的 緩存區(qū)

          contentType

          指定當(dāng)前JSP頁面的MIME類型和字符編碼

          errorPage

          指定當(dāng)JSP頁面發(fā)生異常時(shí)需要轉(zhuǎn)向的錯(cuò)誤處理頁面

          isErrorPage

          指定當(dāng)前頁面是否可以作為另一個(gè)JSP頁面的錯(cuò)誤處理頁面

          extends

          指定servlet從哪一個(gè)類繼承

          import

          導(dǎo)入要使用的Java類

          info

          定義JSP頁面的描述信息

          isThreadSafe

          指定對JSP頁面的訪問是否為線程安全

          language

          定義JSP頁面所用的腳本語言,默認(rèn)是Java

          session

          指定JSP頁面是否使用session

          isELIgnored

          指定是否執(zhí)行EL表達(dá)式

          isScriptingEnabled

          確定腳本元素能否被使用

          2.4行為標(biāo)簽

          行為標(biāo)簽語法:<jsp:行為名稱 attribute="value" />

          語法

          描述

          jsp:include

          用于在當(dāng)前頁面中包含靜態(tài)或動(dòng)態(tài)資源

          jsp:useBean

          尋找和初始化一個(gè)JavaBean組件

          jsp:setProperty

          設(shè)置 JavaBean組件的值

          jsp:getProperty

          將 JavaBean組件的值插入到 output中

          jsp:forward

          從一個(gè)JSP文件向另一個(gè)文件傳遞一個(gè)包含用戶請求的request對象

          jsp:plugin

          用于在生成的HTML頁面中包含Applet和JavaBean對象

          jsp:element

          動(dòng)態(tài)創(chuàng)建一個(gè)XML元素

          jsp:attribute

          定義動(dòng)態(tài)創(chuàng)建的XML元素的屬性

          jsp:body

          定義動(dòng)態(tài)創(chuàng)建的XML元素的主體

          jsp:text

          用于封裝模板數(shù)據(jù)

          使用bean是最好用的行為標(biāo)簽,例如,我們創(chuàng)建一個(gè)java類:

          然后,在JSP中使用useBea/setProperty/getProperty三個(gè)行為標(biāo)簽:

          測試:

          2.5隱含對象(默認(rèn)創(chuàng)建的對象)

          對象

          描述

          request

          HttpServletRequest類的實(shí)例

          response

          HttpServletResponse類的實(shí)例

          out

          PrintWriter類的實(shí)例,用于把結(jié)果輸出至網(wǎng)頁上

          session

          HttpSession類的實(shí)例

          application

          ServletContext類的實(shí)例,與應(yīng)用上下文有關(guān)

          config

          ServletConfig類的實(shí)例

          pageContext

          PageContext類的實(shí)例,提供對JSP頁面所有對象以及命名空間的訪問

          page

          類似于Java類中的this關(guān)鍵字

          Exception

          Exception類的對象,代表發(fā)生錯(cuò)誤的JSP頁面中對應(yīng)的異常對象

          2.6判斷語句

          判斷語句包括兩種:if else和switch case

          示例如下:

          2.7循環(huán)語句

          循環(huán)語句包括兩種:for和while

          示例如下:

          2.8運(yùn)算符

          類別

          操作符

          結(jié)合性

          后綴

          () [] . (點(diǎn)運(yùn)算符)

          左到右

          一元

          ++ - - ! ~

          右到左

          可乘性

          * / %

          左到右

          可加性

          + -

          左到右

          移位

          >> >>> <<

          左到右

          關(guān)系

          > >= < <=

          左到右

          相等/不等

          == !=

          左到右

          位與

          &

          左到右

          位異或

          ^

          左到右

          位或

          |

          左到右

          邏輯與

          &&

          左到右

          邏輯或

          ||

          左到右

          條件判斷

          ?:

          右到左

          賦值

          = += -= *= /= %= >>= <<= &= ^= |=

          右到左

          逗號(hào)

          ,

          左到右

          2.9變量類型

          布爾值(boolean):true 和 false;

          整型(int):與 Java 中的一樣;

          浮點(diǎn)型(float):與 Java 中的一樣;

          字符串(string):以單引號(hào)或雙引號(hào)開始和結(jié)束;

          Null:null。

          2.10表單處理

          以下提供一個(gè)例子來說明:

          (1)創(chuàng)建FormProcess.jsp文件:

          其中提供了兩個(gè)input輸入框。

          (2)再創(chuàng)建FormProcessMain.jsp文件,如下:

          其中使用request對象的getParameter方法來獲取Get參數(shù)。

          2.11過濾器

          JSP過濾器實(shí)際上和Servlet過濾器一樣。

          以下通過示例來說明:

          (1)在web.xml中增加一個(gè)過濾器:

          (2)然后創(chuàng)建過濾器處理類com.hunting.LogFilter,如下:

          2.12JSTL(JSP標(biāo)準(zhǔn)標(biāo)簽庫)

          (1)核心標(biāo)簽:

          標(biāo)簽

          描述

          <c:out>

          用于在JSP中顯示數(shù)據(jù),就像<%= ... >

          <c:set>

          用于保存數(shù)據(jù)

          <c:remove>

          用于刪除數(shù)據(jù)

          <c:catch>

          用來處理產(chǎn)生錯(cuò)誤的異常狀況,并且將錯(cuò)誤信息儲(chǔ)存起來

          <c:if>

          與我們在一般程序中用的if一樣

          <c:choose>

          本身只當(dāng)做<c:when>和<c:otherwise>的父標(biāo)簽

          <c:when>

          <c:choose>的子標(biāo)簽,用來判斷條件是否成立

          <c:otherwise>

          <c:choose>的子標(biāo)簽,接在<c:when>標(biāo)簽后,當(dāng)<c:when>標(biāo)簽判斷為false時(shí)被執(zhí)行

          <c:import>

          檢索一個(gè)絕對或相對 URL,然后將其內(nèi)容暴露給頁面

          <c:forEach>

          基礎(chǔ)迭代標(biāo)簽,接受多種集合類型

          <c:forTokens>

          根據(jù)指定的分隔符來分隔內(nèi)容并迭代輸出

          <c:param>

          用來給包含或重定向的頁面?zhèn)鬟f參數(shù)

          <c:redirect>

          重定向至一個(gè)新的URL.

          <c:url>

          使用可選的查詢參數(shù)來創(chuàng)造一個(gè)URL

          (2)格式化標(biāo)簽:

          標(biāo)簽

          描述

          <fmt:formatNumber>

          使用指定的格式或精度格式化數(shù)字

          <fmt:parseNumber>

          解析一個(gè)代表著數(shù)字,貨幣或百分比的字符串

          <fmt:formatDate>

          使用指定的風(fēng)格或模式格式化日期和時(shí)間

          <fmt:parseDate>

          解析一個(gè)代表著日期或時(shí)間的字符串

          <fmt:bundle>

          綁定資源

          <fmt:setLocale>

          指定地區(qū)

          <fmt:setBundle>

          綁定資源

          <fmt:timeZone>

          指定時(shí)區(qū)

          <fmt:setTimeZone>

          指定時(shí)區(qū)

          <fmt:message>

          顯示資源配置文件信息

          <fmt:requestEncoding>

          設(shè)置request的字符編碼

          (3)SQL標(biāo)簽:

          標(biāo)簽

          描述

          <sql:setDataSource>

          指定數(shù)據(jù)源

          <sql:query>

          運(yùn)行SQL查詢語句

          <sql:update>

          運(yùn)行SQL更新語句

          <sql:param>

          將SQL語句中的參數(shù)設(shè)為指定值

          <sql:dateParam>

          將SQL語句中的日期參數(shù)設(shè)為指定的java.util.Date 對象值

          <sql:transaction>

          在共享數(shù)據(jù)庫連接中提供嵌套的數(shù)據(jù)庫行為元素,將所有語句以一個(gè)事務(wù)的形式來運(yùn)行

          (4)XML標(biāo)簽:

          標(biāo)簽

          描述

          <x:out>

          與<%= ... >,類似,不過只用于XPath表達(dá)式

          <x:parse>

          解析 XML 數(shù)據(jù)

          <x:set>

          設(shè)置XPath表達(dá)式

          <x:if>

          判斷XPath表達(dá)式,若為真,則執(zhí)行本體中的內(nèi)容,否則跳過本體

          <x:forEach>

          迭代XML文檔中的節(jié)點(diǎn)

          <x:choose>

          <x:when>和<x:otherwise>的父標(biāo)簽

          <x:when>

          <x:choose>的子標(biāo)簽,用來進(jìn)行條件判斷

          <x:otherwise>

          <x:choose>的子標(biāo)簽,當(dāng)<x:when>判斷為false時(shí)被執(zhí)行

          <x:transform>

          將XSL轉(zhuǎn)換應(yīng)用在XML文檔中

          <x:param>

          與<x:transform>共同使用,用于設(shè)置XSL樣式表

          3.JSP歷史

          下面從前后端分離角度展現(xiàn)JSP的產(chǎn)生和發(fā)展脈絡(luò)。

          3.1互聯(lián)網(wǎng)的產(chǎn)生

          1957年美國國防部(DoD)組建了高級(jí)研究計(jì)劃局(ARPA)。1961年7月,MIT工程師Leonard Kleinrock發(fā)表Information Flow in Large Communication Nets論文。1962年8月, MIT工程師J.C.R. Licklider和W. Clark發(fā)表On-Line Man Computer Communication論文。1967 2月,在ARPA IPTO PI會(huì)議上,Larry Roberts組織了有關(guān)ARPANET設(shè)計(jì)方案的討論。互聯(lián)網(wǎng)雛形ARPANET由此產(chǎn)生。

          互聯(lián)網(wǎng)最初的目的是訪問和復(fù)制文件從一臺(tái)計(jì)算機(jī)到另一臺(tái)遠(yuǎn)程計(jì)算機(jī),兩臺(tái)計(jì)算機(jī)之間有網(wǎng)絡(luò),但速度慢,而且經(jīng)常專用于大學(xué)或者研究機(jī)構(gòu)是昂貴的,不支持大規(guī)模用戶。1970年,ARPANET主機(jī)開始使用網(wǎng)絡(luò)控制協(xié)議(NCP),這就是后來的傳輸控制協(xié)議(TCP)的雛形。

          人們基于TCP/IP構(gòu)建了更快的網(wǎng)絡(luò),其中應(yīng)用層文件傳輸協(xié)議(FTP)規(guī)范提供了交換這些文件的標(biāo)準(zhǔn)方法。1973年,文件傳輸協(xié)議(FTP)推出,用于在異構(gòu)系統(tǒng)之間交換文件。FTP傳輸?shù)奈募⒉荒苡行Р榭矗虼税l(fā)明了超文本標(biāo)記語言(HTML),使我們能夠在互聯(lián)網(wǎng)上看到文檔。

          3.2萬維網(wǎng)的產(chǎn)生

          1989年蒂姆伯納斯-李寫了一份關(guān)于建立一個(gè)通過網(wǎng)絡(luò)傳輸超文本系統(tǒng)的報(bào)告,其中創(chuàng)建了單行 HTTP 協(xié)議,這個(gè)協(xié)議在1991年被命名為HTTP/0.9,萬維網(wǎng)由此產(chǎn)生,1996年超文本傳送協(xié)議HTTP 1.0發(fā)布。

          盡管FTP可以傳輸HTML文件,但是并沒有提供有效小文件傳輸機(jī)制和無狀態(tài)管理能力,超文本傳輸協(xié)議(HTTP)才被發(fā)明出來專門用于傳輸HTML文檔,HTTP是一種無連接/無狀態(tài)協(xié)議,這使得許多短連接更加有效,而且可以不使用密碼就可以獲取HTML文檔,這讓萬維網(wǎng)真正到來,真正體現(xiàn)了互聯(lián)網(wǎng)的快捷、免費(fèi)思維。

          3.3通用網(wǎng)關(guān)接口的產(chǎn)生

          上面提到了TCP/IP,HTTP,F(xiàn)TP都是通信管道,后來大家把注意力轉(zhuǎn)向內(nèi)容。我們感興趣的文件隨著IT技術(shù)的發(fā)展而快速爆發(fā),例如數(shù)據(jù)庫快速發(fā)展導(dǎo)致各種應(yīng)用系統(tǒng)快速發(fā)展。同時(shí),數(shù)據(jù)的更新頻度更加快速,這種即時(shí)信息推動(dòng)了互聯(lián)網(wǎng)流量快速增長。通過基于HTTP的HTML,最終用戶可以瀏覽位于遠(yuǎn)程服務(wù)器上的文件。

          當(dāng)時(shí),遠(yuǎn)程服務(wù)器屬于局域網(wǎng),局域網(wǎng)連接到互聯(lián)網(wǎng)需要專用設(shè)備,可惜的是這種專用設(shè)備并不好用(直到后來路由器和交換機(jī)被思科發(fā)明出來),因此通用網(wǎng)關(guān)接口(CGI)規(guī)范被制定出來,它允許Web服務(wù)器超越文件服務(wù)器并從內(nèi)部數(shù)據(jù)庫中獲取數(shù)據(jù),并動(dòng)態(tài)更改HTML。

          最初,CGI是在1993年由美國國家超級(jí)電腦應(yīng)用中心(NCSA)為NCSA HTTPd Web服務(wù)器開發(fā)的,當(dāng)年NCSA內(nèi)部有一份簡單的CGI規(guī)范說明,后來在1997年Ken Coar領(lǐng)導(dǎo)的團(tuán)隊(duì)制定了CGI1.1規(guī)范,并提交RFC。CGI規(guī)范是Web應(yīng)用程序開發(fā)中的一個(gè)重大突破,確保了相同的CGI程序在不同的Web服務(wù)器上工作。

          CGI成為傳遞動(dòng)態(tài)內(nèi)容的最常用手段。只是互聯(lián)網(wǎng)發(fā)展太快了,CGI的性能無法跟上,每個(gè)對CGI腳本的請求都會(huì)產(chǎn)生一個(gè)單獨(dú)的進(jìn)程。這種設(shè)計(jì)讓CGI在高峰負(fù)載時(shí)也消耗大量資源。解決方案非常多,功能性和可伸縮性成為關(guān)鍵。

          許多CGI替代者都采用服務(wù)器端編程技術(shù)來實(shí)現(xiàn)業(yè)務(wù)邏輯,包括ASP、ColdFusion、PHP和Perl等等,其中至今仍然在大量使用的是PHP ,PHP 繼承自一個(gè)老的工程,名叫 PHP/FI,PHP/FI 在 1995 年由 Rasmus Lerdorf 創(chuàng)建,最初只是一套簡單的 Perl 腳本,用來跟蹤訪問他主頁的人。然后,即使是PHP,最終由于可移植性和面向?qū)ο蟮木幊淘O(shè)計(jì),Java超越了PHP和其他CGI平臺(tái)。

          3.4 JSP的產(chǎn)生

          Java自1991年誕生以來已經(jīng)走過了很長的一段路,當(dāng)時(shí)Sun公司推出了“綠色計(jì)劃”,試圖集成數(shù)字消費(fèi)設(shè)備,如電視機(jī)、CD播放機(jī)和計(jì)算機(jī)。OAK(名字來自高斯林窗外的一棵橡樹!)誕生了,但直到出現(xiàn)HotJava和小程序,才開始活躍起來。1995年,Sun發(fā)布了開源Java,向微軟發(fā)起了挑戰(zhàn),反響巨大。這促使Java深入到服務(wù)器端開發(fā)領(lǐng)域。

          Sun在Java中加入了Internet功能,并在1997年6月發(fā)布了servlet接口。servlet以CGI替代為目標(biāo)。與CGI為每個(gè)請求啟動(dòng)一個(gè)進(jìn)程不同,servlet使用更細(xì)粒度的線程在單個(gè)進(jìn)程中運(yùn)行。servlet采用了更有效的體系架構(gòu),能夠應(yīng)對互聯(lián)網(wǎng)上的復(fù)雜情況。Java servlet為開發(fā)Java Web組件提供了基礎(chǔ)。servlet優(yōu)點(diǎn)是每個(gè)額外的并發(fā)請求帶來的額外開銷非常小。

          servlet技術(shù)需要真正的Java編程技能才能有效應(yīng)用,外觀和良好體驗(yàn)為web應(yīng)用帶來了巨大方便,但是圖像支持還不是那么良好。于是Sun公司在1998年發(fā)布了JavaServer Pages (JSP),這來自于微軟ASP的啟發(fā),也有些人說是復(fù)制的,它使得編寫動(dòng)態(tài)HTML頁面變得容易。

          使用JSP的使用非常簡單,有些工具(例如Dreamweaver)能讓非程序員來構(gòu)建WWW網(wǎng)站前端頁面,當(dāng)然要servlet帶動(dòng)后端服務(wù)器代碼(例如javabean)才能完成完整的WWW網(wǎng)站構(gòu)建工作,這樣構(gòu)建的WWW網(wǎng)站具有模塊化、可維護(hù)、可伸縮和可移植優(yōu)點(diǎn),從而完成簡單網(wǎng)站到復(fù)雜Web應(yīng)用程序的轉(zhuǎn)變,從而實(shí)現(xiàn)前后端分離。

          JSP官方版本1.0和1.1都出現(xiàn)在1999年,都很受歡迎,版本1.2出現(xiàn)于2001年,是目前最流行的實(shí)現(xiàn)。

          3.5 Node的產(chǎn)生

          JSP終究還是含有Java代碼,前后端沒有徹底分離,因此人們在2009年發(fā)明了node-js,這讓前端開發(fā)人員崛起,他們單純使用HTML+CSS+JavaScript前端語言就能完成前端頁面的開發(fā),而不需要使用含有各種后端交互印記的標(biāo)簽。

          于是,基于node-js的React、Angela、VUE框架成為潮流。


          主站蜘蛛池模板: 精品福利一区3d动漫| 一色一伦一区二区三区| 国产精品视频免费一区二区三区| 国模视频一区二区| 一区二区三区日本电影| 国产成人一区在线不卡| 国产成人av一区二区三区在线观看| 国产午夜精品一区二区三区小说| 亚洲综合av一区二区三区| 亚洲AV乱码一区二区三区林ゆな| 国产精品一区二区三区免费| 成人在线视频一区| 成人日韩熟女高清视频一区| 国产一区二区中文字幕| 伊人精品视频一区二区三区| 中文字幕在线无码一区二区三区| 人妻少妇AV无码一区二区| 亚洲高清成人一区二区三区| 久久久精品日本一区二区三区| 北岛玲在线一区二区| 国产成人无码一区二区三区在线| 国产精品一区三区| 国产精品夜色一区二区三区| 精品一区二区视频在线观看| 国产伦精品一区二区三区视频猫咪| 无码av不卡一区二区三区| 国产亚洲无线码一区二区| 黑巨人与欧美精品一区| 国产91一区二区在线播放不卡 | 国产日韩一区二区三区| 一区二区国产精品| 国产一区二区三区91| 中文字幕日韩一区二区不卡| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 综合一区自拍亚洲综合图区| 免费无码VA一区二区三区| 99精品国产一区二区三区2021| 亚洲AV成人一区二区三区在线看| 99在线精品一区二区三区| 亚洲AV无码国产一区二区三区| 成人精品一区久久久久|