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 性乌克兰xxxx极品,精品福利一区二区免费视频,国内精品久久久久激情影院

          整合營銷服務(wù)商

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

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

          JSP 表單處理

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

          GET 方法

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

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

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

          用get時,傳輸數(shù)據(jù)的大小有限制 (注意不是參數(shù)的個數(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類(名字相同,但值有多個)的數(shù)據(jù)。 接收數(shù)組變量 ,如checkbox類型

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

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



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

          以下是一個簡單的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í)例

          以下是一個簡單的 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 同一個目錄)。

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

          在 "站點(diǎn)名" 與 "網(wǎng)址" 兩個表單中填入信息,并點(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 可以傳遞一個甚至多個數(shù)據(jù)。

          以下是一個簡單的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ù),該方法可以取得所有變量的名稱,該方法返回一個枚舉。

          一旦我們有了一個 Enumeration(枚舉),我們就可以調(diào)用 hasMoreElements() 方法來確定是否還有元素,以及使用nextElement()方法來獲得每個參數(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頁面包含一個自定義標(biāo)簽時將被轉(zhuǎn)化為servlet,標(biāo)簽轉(zhuǎn)化為對被 稱為tag handler的對象的操作,即當(dāng)servlet執(zhí)行時Web container調(diào)用那些操作。

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

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

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

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

          <ex:Hello />

          要創(chuàng)建自定義的JSP標(biāo)簽,你首先必須創(chuàng)建處理標(biāo)簽的Java類。所以,讓我們創(chuàng)建一個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()?,F(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定義屬性的名稱。每個標(biāo)簽的是屬性名稱必須是唯一的。
          required指定屬性是否是必須的或者可選的,如果設(shè)置為false為可選。
          rtexprvalue聲明在運(yùn)行表達(dá)式時,標(biāo)簽屬性是否有效。
          type定義該屬性的Java類類型 。默認(rèn)指定為 String
          description描述信息
          fragment如果聲明了該屬性,屬性值將被視為一個 JspFragment

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

          .....

          <attribute>

          <name>attribute_name</name>

          <required>false</required>

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

          <fragment>false</fragment>

          </attribute>

          .....

          如果你使用了兩個屬性,修改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)建一個實(shí)例項(xiàng)目,先體驗(yàn)其效果。

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

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

          1.2修改文件編碼

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

          1.3 編寫簡單的JSP文件

          新增一個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,就自己加一個。點(diǎn)Finish。然后自動調(diào)用chrome,界面如下:

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

          1.5增加功能:顯示IP地址

          (1)顯示ip地址:getRemoteAddr

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

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

          2.JSP語言介紹

          2.1語法

          語法

          描述

          <%-- 注釋 --%>

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

          <!-- 注釋 -->

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

          <\%

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

          %\>

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

          \'

          在屬性中使用的單引號

          \"

          在屬性中使用的雙引號

          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ā)生異常時需要轉(zhuǎn)向的錯誤處理頁面

          isErrorPage

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

          extends

          指定servlet從哪一個類繼承

          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)或動態(tài)資源

          jsp:useBean

          尋找和初始化一個JavaBean組件

          jsp:setProperty

          設(shè)置 JavaBean組件的值

          jsp:getProperty

          將 JavaBean組件的值插入到 output中

          jsp:forward

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

          jsp:plugin

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

          jsp:element

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

          jsp:attribute

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

          jsp:body

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

          jsp:text

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

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

          然后,在JSP中使用useBea/setProperty/getProperty三個行為標(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ā)生錯誤的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)系

          > >= < <=

          左到右

          相等/不等

          == !=

          左到右

          位與

          &

          左到右

          位異或

          ^

          左到右

          位或

          |

          左到右

          邏輯與

          &&

          左到右

          邏輯或

          ||

          左到右

          條件判斷

          ?:

          右到左

          賦值

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

          右到左

          逗號

          ,

          左到右

          2.9變量類型

          布爾值(boolean):true 和 false;

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

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

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

          Null:null。

          2.10表單處理

          以下提供一個例子來說明:

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

          其中提供了兩個input輸入框。

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

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

          2.11過濾器

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

          以下通過示例來說明:

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

          (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)生錯誤的異常狀況,并且將錯誤信息儲存起來

          <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時被執(zhí)行

          <c:import>

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

          <c:forEach>

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

          <c:forTokens>

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

          <c:param>

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

          <c:redirect>

          重定向至一個新的URL.

          <c:url>

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

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

          標(biāo)簽

          描述

          <fmt:formatNumber>

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

          <fmt:parseNumber>

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

          <fmt:formatDate>

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

          <fmt:parseDate>

          解析一個代表著日期或時間的字符串

          <fmt:bundle>

          綁定資源

          <fmt:setLocale>

          指定地區(qū)

          <fmt:setBundle>

          綁定資源

          <fmt:timeZone>

          指定時區(qū)

          <fmt:setTimeZone>

          指定時區(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ù)庫行為元素,將所有語句以一個事務(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時被執(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ì)劃局(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會議上,Larry Roberts組織了有關(guān)ARPANET設(shè)計(jì)方案的討論?;ヂ?lián)網(wǎng)雛形ARPANET由此產(chǎn)生。

          互聯(lián)網(wǎng)最初的目的是訪問和復(fù)制文件從一臺計(jì)算機(jī)到另一臺遠(yuǎn)程計(jì)算機(jī),兩臺計(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)于建立一個通過網(wǎng)絡(luò)傳輸超文本系統(tǒng)的報(bào)告,其中創(chuàng)建了單行 HTTP 協(xié)議,這個協(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ù)據(jù)的更新頻度更加快速,這種即時信息推動了互聯(lián)網(wǎng)流量快速增長。通過基于HTTP的HTML,最終用戶可以瀏覽位于遠(yuǎn)程服務(wù)器上的文件。

          當(dāng)時,遠(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ù),并動態(tài)更改HTML。

          最初,CGI是在1993年由美國國家超級電腦應(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ā)中的一個重大突破,確保了相同的CGI程序在不同的Web服務(wù)器上工作。

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

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

          3.4 JSP的產(chǎn)生

          Java自1991年誕生以來已經(jīng)走過了很長的一段路,當(dāng)時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為每個請求啟動一個進(jìn)程不同,servlet使用更細(xì)粒度的線程在單個進(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)是每個額外的并發(fā)請求帶來的額外開銷非常小。

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

          使用JSP的使用非常簡單,有些工具(例如Dreamweaver)能讓非程序員來構(gòu)建WWW網(wǎng)站前端頁面,當(dāng)然要servlet帶動后端服務(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框架成為潮流。


          主站蜘蛛池模板: 日韩在线一区二区三区免费视频| 国产福利电影一区二区三区,亚洲国模精品一区| 国产成人精品一区二区A片带套| 中文乱码精品一区二区三区| 国产亚洲综合精品一区二区三区 | 亚洲视频免费一区| 国产精品一区二区三区99| 免费高清在线影片一区| 亚洲精品色播一区二区| 精品无码AV一区二区三区不卡| 一区二区乱子伦在线播放| 丝袜人妻一区二区三区| 无码毛片一区二区三区视频免费播放 | 免费观看一区二区三区| 日本精品一区二区三区在线视频一| 国产情侣一区二区| 加勒比无码一区二区三区| 无码中文字幕一区二区三区| 亚洲一区中文字幕在线观看| 国产高清一区二区三区| 中文字幕AV一区二区三区| 日本高清一区二区三区| 亚洲一区AV无码少妇电影| 国模一区二区三区| 一本色道久久综合一区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 无码人妻精品一区二区三| 日本一区二区不卡在线| 日韩内射美女人妻一区二区三区 | 久久久久人妻一区二区三区vr| 一区二区三区四区精品视频| 一区高清大胆人体| 天堂va在线高清一区| 日本高清一区二区三区| 日本中文字幕在线视频一区| 成人精品视频一区二区三区| 亚洲一区二区电影| 海角国精产品一区一区三区糖心| 国产福利一区二区精品秒拍| 一区二区三区免费在线观看| 亚洲国产精品一区二区成人片国内|