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 日本精品中文字幕在线不卡,国产成人精品久久一区二区三区,亚洲影视在线观看

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          java-web中jsp的理解

          SP:Java Server Pages。JSP是一種網頁的編碼格式,不同于HTML的是JSP中是由 HTML中的標簽指令 和 Java邏輯代碼 拼湊而成, 其中的Java代碼類似于JavaScript中的邏輯代碼, 但相對比來說JSP中的Java代碼更方便閱讀和書寫.

          一:JSP的運行原理

          當JSP頁面被運行時,WEB容器會把請求交給JSP引擎處理,會將JSP翻譯成一個_jspServlet,然后按照Servlet的調用方式來進行調用,

          瀏覽器向服務器發請求,不管訪問的是什么資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過后的那個Servlet,

          二:Tomcat

          Tomcat在Web中的作用:

          Tomcat是Web中的容器,

          當客戶在Web服務器中輸入請求的時候, 如果請求的動態頁面, 那么Web服務器會創建一個Servlet來處理, Servlet就是Java代碼, 只是在服務器端的Java代碼, Servlet通過配置文件來攔截客戶所發出的請求, 并進行相應的處理, 最后反饋到客戶端.

          在這一系列的請求中,Web服務器是如何創建出Servlet來對請求進行處理? 而Tomcat的作用就是幫助Web服務器來創建Servlet的

          Tomcat是應用(java)服務器,它只是一個Servlet容器,是Apache的擴展,處理動態頁面的部分

          Tomcat各個文件夾的含義

          • bin:二進制執行文件。里面最常用的文件是startup.bat
          • conf:配置目錄。里面最核心的文件是server.xml。可以在里面改端口號等。默認端口號是8080,也就是說,此端口號不能被其他應用程序占用。
          • lib:庫文件。tomcat運行時需要的jar包所在的目錄
          • logs:日志
          • temp:臨時產生的文件,即緩存
          • webapps:web的應用程序。web應用放置到此目錄下瀏覽器可以直接訪問
          • work:編譯以后的class文件。

          當我們通過瀏覽器訪問index.jsp時,服務器首先將index.jsp翻譯成一個index_jsp.class,在Tomcat服務的work\Catalina\localhost\項目名\org\apache\jsp 目錄下可以看到index_jsp.class的源代碼文件index_jsp.java

          index_jsp這個類是繼承 org.apache.jasper.runtime.HttpJspBase這個類的,通過查看Tomcat服務器的源代碼,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目錄下存HttpJspBase這個類的源代碼文件

          HttpJspBase 類是繼承 HttpServlet 的,所以 HttpJspBase 類是一個 Servlet ,而 index_jsp 又是繼承 HttpJspBase類的,所以index_jsp類也是一個Servlet,所以當瀏覽器訪問服務器上的index.jsp頁面時,其實就是在訪問index_jsp這個Servlet,index_jsp這個Servlet使用_jspService這個方法處理請求。

          三:Jsp中的HTML代碼和Java代碼如何發送到客戶端

          1:jsp中的代碼是由 Java代碼 和 HTML 代碼組成的 但是兩種不同的代碼是如何實現他們的作用的?

          在客戶端發出請求時(請求的是動態代碼) 但是客戶端卻只能看到HTML代碼, Java代碼是客戶端看不到的

          原因是: 請求的JSP頁面中,所有的代碼是通過了Web服務器(在Tomcat下)編譯后的Servlet代碼, 在jsp中編寫的java代碼和html代碼都會被翻譯到_jspService方法中去,在jsp中編寫的java代碼會原封不動地翻譯成java代碼,如<%out.print("HelloJsp");%>直接翻譯成out.print("Hello Jsp");,而HTML代碼則會翻譯成使用out.write("<html標簽>\r\n");的形式輸出到瀏覽器。在jsp頁面中編寫的html排版標簽都是以out.write("<html標簽>\r\n");的形式輸出到瀏覽器,瀏覽器拿到html代碼后才能夠解析執行html代碼。

          當執行_jspService方法處理請求時,就會執行在jsp編寫的java代碼了,所以Jsp頁面中的java代碼服務器是通過調用_jspService方法處理請求時執行的。(_jspService中的Java代碼是實現動態頁面的邏輯基礎)

          本程序

          腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。

          腳本程序的語法格式:

          <% 代碼片段 %>

          或者,您也可以編寫與其等價的XML語句,就像下面這樣:

          <jsp:scriptlet>
           代碼片段</jsp:scriptlet>

          任何文本、HTML標簽、JSP元素必須寫在腳本程序的外面。

          下面給出一個示例,同時也是本教程的第一個JSP示例:

          <html><head><title>Hello World</title></head><body>Hello World!<br/><%out.println("Your IP address is " + request.getRemoteAddr());%></body></html>

          注意:請確保Apache Tomcat已經安裝在C:\apache-tomcat-7.0.2目錄下并且運行環境已經正確設置。

          將以上代碼保存在hello.jsp中,然后將它放置在 C:\apache-tomcat-7.0.2\webapps\ROOT目錄下,打開瀏覽器并在地址欄中輸入http://localhost:8080/hello.jsp。運行后得到以下結果:

          中文編碼問題

          如果我們要在頁面正常顯示中文,我們需要在 JSP 文件頭部添加以下代碼:<>

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

          接下來我們將以上程序修改為:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body>Hello World!<br/><%out.println("你的 IP 地址 " + request.getRemoteAddr());%></body></html>

          這樣中文就可以正常顯示了。


          JSP聲明

          一個聲明語句可以聲明一個或多個變量、方法,供后面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然后才能使用它們。

          JSP聲明的語法格式:

          <%! declaration; [ declaration; ]+ ... %>

          或者,您也可以編寫與其等價的XML語句,就像下面這樣:

          <jsp:declaration>
           代碼片段</jsp:declaration>

          程序示例:

          <%! int i = 0; %>
          <%! int a, b, c; %>
          <%! Circle a = new Circle(2.0); %>

          JSP表達式

          一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然后插入到表達式出現的地方。

          由于表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標簽。

          表達式元素中可以包含任何符合Java語言規范的表達式,但是不能使用分號來結束表達式。

          JSP表達式的語法格式:

          <%= 表達式 %>

          同樣,您也可以編寫與之等價的XML語句:

          <jsp:expression>
           表達式</jsp:expression>

          程序示例:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><p>
           今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p></body> </html>

          運行后得到以下結果:

          今天的日期是: 2016-6-25 13:40:07

          JSP注釋

          JSP注釋主要有兩個作用:為代碼作注釋以及將某段代碼注釋掉。

          JSP注釋的語法格式:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><%-- 該部分注釋在網頁中不會被顯示--%>
          <p>
           今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p></body> </html>

          運行后得到以下結果:

          今天的日期是: 2016-6-25 13:41:26

          不同情況下使用注釋的語法規則:

          語法描述
          <%-- 注釋 --%>JSP注釋,注釋內容不會被發送至瀏覽器甚至不會被編譯
          <!-- 注釋 -->HTML注釋,通過瀏覽器查看網頁源代碼時可以看見注釋內容
          <\%代表靜態 <%常量
          %\>代表靜態 %> 常量
          \'在屬性中使用的單引號
          \"在屬性中使用的雙引號

          JSP指令

          JSP指令用來設置與整個JSP頁面相關的屬性。

          JSP指令語法格式:

          <%@ directive attribute="value" %>

          這里有三種指令標簽:

          指令描述
          <%@ page ... %>定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等
          <%@ include ... %>包含其他文件
          <%@ taglib ... %>引入標簽庫的定義,可以是自定義標簽

          JSP行為

          JSP行為標簽使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,為Java插件產生相關的HTML等等。

          行為標簽只有一種語法格式,它嚴格遵守XML標準:

          <jsp:action_name attribute="value" />

          行為標簽基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行為標簽::

          語法描述
          jsp:include用于在當前頁面中包含靜態或動態資源
          jsp:useBean尋找和初始化一個JavaBean組件
          jsp:setProperty設置 JavaBean組件的值
          jsp:getProperty將 JavaBean組件的值插入到 output中
          jsp:forward從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象
          jsp:plugin用于在生成的HTML頁面中包含Applet和JavaBean對象
          jsp:element動態創建一個XML元素
          jsp:attribute定義動態創建的XML元素的屬性
          jsp:body定義動態創建的XML元素的主體
          jsp:text用于封裝模板數據

          JSP隱含對象

          JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介見下表:

          對象描述
          requestHttpServletRequest類的實例
          responseHttpServletResponse類的實例
          outPrintWriter類的實例,用于把結果輸出至網頁上
          sessionHttpSession類的實例
          applicationServletContext類的實例,與應用上下文有關
          configServletConfig類的實例
          pageContextPageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問
          page類似于Java類中的this關鍵字
          ExceptionException類的對象,代表發生錯誤的JSP頁面中對應的異常對象

          控制流語句

          JSP提供對Java語言的全面支持。您可以在JSP程序中使用Java API甚至建立Java代碼塊,包括判斷語句和循環語句等等。

          判斷語句

          If…else塊,請看下面這個例子:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%! int day = 3; %>
          <!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><h3>IF...ELSE 實例</h3><% if (day == 1 | day == 7) { %> <p>今天是周末</p><% } else { %> <p>今天不是周末</p><% } %></body> </html>

          運行后得到以下結果:

          IF...ELSE 實例今天不是周末

          現在來看看switch…case塊,與if…else塊有很大的不同,它使用out.println(),并且整個都裝在腳本程序的標簽中,就像下面這樣:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%! int day = 3; %>
          <!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><h3>SWITCH...CASE 實例</h3><% switch(day) {case 0:
           out.println("星期天");
           break;case 1:
           out.println("星期一");
           break;case 2:
           out.println("星期二");
           break;case 3:
           out.println("星期三");
           break;case 4:
           out.println("星期四");
           break;case 5:
           out.println("星期五");
           break;default:
           out.println("星期六");}%></body> </html>

          瀏覽器訪問,運行后得出以下結果:

          SWITCH...CASE 實例星期三

          循環語句

          在JSP程序中可以使用Java的三個基本循環類型:for,while,和 do…while。

          讓我們來看看for循環的例子,以下輸出的不同字體大小的"我愛學習":

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%! int fontSize; %>
          <!DOCTYPE html><html><head><meta charset="utf-8"><title>我愛學習(run.com)</title></head><body><h3>For 循環實例</h3><%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
           <font color="green" size="<%= fontSize %>"> 我愛學習 </font><br /><%}%></body> </html>

          將上例改用while循環來寫:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%! int fontSize; %>
          <!DOCTYPE html><html><head><meta charset="utf-8"><title>我愛學習(run.com)</title></head><body><h3>While 循環實例</h3><%while ( fontSize <= 3){ %>
           <font color="green" size="<%= fontSize %>">
           我愛學習 </font><br /><%fontSize++;%><%}%></body> </html>JSP運算符

          JSP支持所有Java邏輯和算術運算符。

          下表羅列出了JSP常見運算符,優先級從高到底:

          類別操作符結合性
          后綴() [] . (點運算符)左到右
          一元++ - - ! ~右到左
          可乘性* / %左到右
          可加性+ -左到右
          移位>> >>> <<左到右
          關系> >= < <=左到右
          相等/不等== !=左到右
          位與&左到右
          位異或^左到右
          位或|左到右
          邏輯與&&左到右
          邏輯或||左到右
          條件判斷?:右到左
          賦值= += -= *= /= %= >>= <<= &= ^= |=右到左
          逗號,左到右

          JSP 字面量

          JSP語言定義了以下幾個字面量:

          • 布爾值(boolean):true 和 false;

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

          • 浮點型(float):與 Java 中的一樣;

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

          • Null:null。

          SP是Servlet 技術的擴展,所有的jsp文件都會被翻譯為一個繼承HttpServlet的類,也就是說jsp最終也是一個Servlet ,這個Servlet對外提供服務。

          Servlet 和jsp最主要的不同點在于jsp側重于視圖,Servlet 主要用于控制邏輯。

          Servlet 的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來,Servlet如果要實現HTML的功能,必須使用Writer輸出對應的HTML,比較麻煩。而jsp的情況是Java和HTML可以組合成一個擴展名為 .jsp 的文件,做界面展示比較方便而嵌入邏輯比較復雜。


          主站蜘蛛池模板: 亚洲色婷婷一区二区三区| 久久久综合亚洲色一区二区三区| 日韩精品一区二区午夜成人版| 在线电影一区二区| 亚洲色无码一区二区三区 | 中文字幕永久一区二区三区在线观看| 亚洲一区二区久久| 国产亚洲综合一区柠檬导航| 成人国产精品一区二区网站| 日本一区二区三区精品国产| 暖暖免费高清日本一区二区三区 | 亚洲av无码一区二区三区四区 | 香蕉久久AⅤ一区二区三区| 亲子乱av一区区三区40岁| 麻豆AV一区二区三区| 91精品一区二区三区在线观看| 国产视频一区在线观看| 国产综合无码一区二区辣椒| 综合久久一区二区三区| 东京热无码一区二区三区av | 精品深夜AV无码一区二区老年| 日本欧洲视频一区| 国产AV午夜精品一区二区三区| 亚洲日韩国产精品第一页一区| 中文字幕在线观看一区二区| 亚洲啪啪综合AV一区| 日韩视频一区二区三区| 人妻无码第一区二区三区| 亚洲电影唐人社一区二区| 无码国产精品一区二区免费虚拟VR| 国产成人精品无码一区二区| 亚洲熟妇av一区| 性色AV一区二区三区天美传媒| 亚洲AV无码一区二区三区久久精品 | 熟女大屁股白浆一区二区| 亚洲AV无一区二区三区久久| 亚洲国产日韩一区高清在线| 麻豆文化传媒精品一区二区| 国产怡春院无码一区二区| 精品一区二区三区在线观看l | 亚洲一区中文字幕久久|