整合營銷服務商

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

          免費咨詢熱線:

          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代碼是實現動態頁面的邏輯基礎)

          JavaBean是特殊的Java類,使用J ava語言書寫,并且遵守JavaBean API規范。

          接下來給出的是JavaBean與其它Java類相比而言獨一無二的特征:

          • 提供一個默認的無參構造函數。

          • 需要被序列化并且實現了Serializable接口。

          • 可能有一系列可讀寫屬性。

          • 可能有一系列的"getter"或"setter"方法。

          JavaBean屬性

          一個JavaBean對象的屬性應該是可訪問的。這個屬性可以是任意合法的Java數據類型,包括自定義Java類。

          一個JavaBean對象的屬性可以是可讀寫,或只讀,或只寫。JavaBean對象的屬性通過JavaBean實現類中提供的兩個方法來訪問:

          方法描述
          getPropertyName()舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也稱為訪問器。
          setPropertyName()舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也稱為寫入器。

          一個只讀的屬性只提供getPropertyName()方法,一個只寫的屬性只提供setPropertyName()方法。

          JavaBean 程序示例

          這是StudentBean.java文件:

          package com.runoob;

          public class StudentsBean implements java.io.Serializable

          {

          private String firstName = null;

          private String lastName = null;

          private int age = 0;

          public StudentsBean() {

          }

          public String getFirstName(){

          return firstName;

          }

          public String getLastName(){

          return lastName;

          }

          public int getAge(){

          return age;

          }

          public void setFirstName(String firstName){

          this.firstName = firstName;

          }

          public void setLastName(String lastName){

          this.lastName = lastName;

          }

          public void setAge(int age) {

          this.age = age;

          }

          }

          編譯 StudentBean.java 文件(最后一個實例會用到):

          $ javac StudentsBean.java

          編譯后獲得 StudentBean.class 文件,將其拷貝到 <JSP 項目>/WebContent/WEB-INF/classes/com/runoob,如下圖所示:

          訪問JavaBean

          <jsp:useBean> 標簽可以在JSP中聲明一個JavaBean,然后使用。聲明后,JavaBean對象就成了腳本變量,可以通過腳本元素或其他自定義標簽來訪問。<jsp:useBean>標簽的語法格式如下:

          <jsp:useBean id="bean 的名字" scope="bean 的作用域" typeSpec/>

          其中,根據具體情況,scope的值可以是page,request,session或application。id值可任意只要不和同一JSP文件中其它<jsp:useBean>中id值一樣就行了。

          接下來給出的是 <jsp:useBean> 標簽的一個簡單的用法:

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

          pageEncoding="UTF-8"%>

          <html>

          <head>

          <title>useBean 實例</title>

          </head>

          <body>

          <jsp:useBean id="date" class="java.util.Date" />

          <p>日期為:<%= date %>

          </body>

          </html>

          它將會產生如下結果:

          日期為:Tue Jun 28 15:22:24 CST 2016

          訪問 JavaBean 對象的屬性

          <jsp:useBean> 標簽主體中使用 <jsp:getProperty/> 標簽來調用 getter 方法,使用 <jsp:setProperty/> 標簽來調用 setter 方法,語法格式如下:

          <jsp:useBean id="id" class="bean 編譯的類" scope="bean 作用域">

          <jsp:setProperty name="bean 的 id" property="屬性名"

          value="value"/>

          <jsp:getProperty name="bean 的 id" property="屬性名"/>

          ...........

          </jsp:useBean>

          name屬性指的是Bean的id屬性。property屬性指的是想要調用的getter或setter方法。

          接下來給出使用以上語法進行屬性訪問的一個簡單例子:

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

          pageEncoding="UTF-8"%>

          <html>

          <head>

          <title>get 和 set 屬性實例</title>

          </head>

          <body>

          <jsp:useBean id="students"

          class="com.runoob.StudentsBean">

          <jsp:setProperty name="students" property="firstName"

          value="小強"/>

          <jsp:setProperty name="students" property="lastName"

          value="王"/>

          <jsp:setProperty name="students" property="age"

          value="10"/>

          </jsp:useBean>

          <p>學生名字:

          <jsp:getProperty name="students" property="firstName"/>

          </p>

          <p>學生姓氏:

          <jsp:getProperty name="students" property="lastName"/>

          </p>

          <p>學生年齡:

          <jsp:getProperty name="students" property="age"/>

          </p>

          </body>

          </html>

          訪問以上 JSP,運行結果如下:

          學生名字: 小強

          學生姓氏: 王

          學生年齡: 10

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

          ookie是存儲在客戶機的文本文件,它們保存了大量軌跡信息。在servlet技術基礎上,JSP顯然能夠提供對HTTP cookie的支持。

          通常有三個步驟來識別回頭客:

          • 服務器腳本發送一系列cookie至瀏覽器。比如名字,年齡,ID號碼等等。

          • 瀏覽器在本地機中存儲這些信息,以備不時之需。

          • 當下一次瀏覽器發送任何請求至服務器時,它會同時將這些cookie信息發送給服務器,然后服務器使用這些信息來識別用戶或者干些其它事情。

          如何去設置或重設cookie的方法,還有如何訪問它們及如何刪除它們。

          JSP Cookie 處理需要對中文進行編碼與解碼,方法如下:

          String str = java.net.URLEncoder.encode("中文","UTF-8"); //編碼String str = java.net.URLDecoder.decode("編碼后的字符串","UTF-8"); // 解碼

          Cookie 剖析

          Cookie通常在HTTP信息頭中設置(雖然JavaScript能夠直接在瀏覽器中設置cookie)。在JSP中,設置一個cookie需要發送如下的信息頭給服務器:

          HTTP/1.1 200 OKDate: Fri, 04 Feb 2015 21:03:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=runoob; expires=Friday, 04-Feb-07 22:03:38 GMT;
           path=/; domain=runoob.comConnection: closeContent-Type: text/html

          正如您所見,Set-Cookie信息頭包含一個鍵值對,一個GMT(格林尼治標準)時間,一個路徑,一個域名。鍵值對會被編碼為URL。有效期域是個指令,告訴瀏覽器在什么時候之后就可以清除這個cookie。

          如果瀏覽器被配置成可存儲cookie,那么它將會保存這些信息直到過期。如果用戶訪問的任何頁面匹配了cookie中的路徑和域名,那么瀏覽器將會重新將這個cookie發回給服務器。瀏覽器端的信息頭長得就像下面這樣:

          GET / HTTP/1.0Connection: Keep-AliveUser-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)Host: zink.demon.co.uk:1126Accept: image/gif, */*
          Accept-Encoding: gzip
          Accept-Language: en
          Accept-Charset: iso-8859-1,*,utf-8
          Cookie: name=xyz

          JSP腳本通過request對象中的getCookies()方法來訪問這些cookie,這個方法會返回一個Cookie對象的數組。


          Servlet Cookie 方法

          下表列出了Cookie對象中常用的方法:

          序號方法 & 描述
          1public void setDomain(String pattern)設置cookie的域名,比如 runoob.com
          2public String getDomain()獲取cookie的域名,比如 runoob.com
          3public void setMaxAge(int expiry)設置cookie有效期,以秒為單位,默認有效期為當前session的存活時間
          4public int getMaxAge()獲取cookie有效期,以秒為單位,默認為-1 ,表明cookie會活到瀏覽器關閉為止
          5public String getName()返回 cookie的名稱,名稱創建后將不能被修改
          6public void setValue(String newValue)設置 cookie的值
          7public String getValue()獲取cookie的值
          8public void setPath(String uri)設置cookie 的路徑,默認為當前頁面目錄下的所有URL,還有此目錄下的所有子目錄
          9public String getPath()獲取cookie 的路徑
          10public void setSecure(boolean flag)指明cookie是否要加密傳輸
          11public void setComment(String purpose)設置注釋描述 cookie的目的。當瀏覽器將cookie展現給用戶時,注釋將會變得非常有用
          12public String getComment()返回描述cookie目的的注釋,若沒有則返回null

          使用JSP設置Cookie

          使用JSP設置cookie包含三個步驟:

          (1)創建一個Cookie對象: 調用Cookie的構造函數,使用一個cookie名稱和值做參數,它們都是字符串。

          Cookie cookie = new Cookie("key","value");

          請務必牢記,名稱和值中都不能包含空格或者如下的字符:

          [ ] ( ) = , " / ? @ : ;

          (2) 設置有效期:調用setMaxAge()函數表明cookie在多長時間(以秒為單位)內有效。下面的操作將有效期設為了24小時。

          cookie.setMaxAge(60*60*24);

          (3) 將cookie發送至HTTP響應頭中:調用response.addCookie()函數來向HTTP響應頭中添加cookie。

          response.addCookie(cookie);

          實例演示

          main.jsp 文件代碼如下所示:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%@ page import="java.net.*" %><%
           // 編碼,解決中文亂碼 
           String str = URLEncoder.encode(request.getParameter("name"),"utf-8"); 
           // 設置 name 和 url cookie
           Cookie name = new Cookie("name", str);
           Cookie url = new Cookie("url", request.getParameter("url"));
           // 設置cookie過期時間為24小時。
           name.setMaxAge(60*60*24);
           url.setMaxAge(60*60*24);
           // 在響應頭部添加cookie
           response.addCookie( name );
           response.addCookie( url );%><html><head><title>設置 Cookie</title></head><body><h1>設置 Cookie</h1><ul><li><p><b>網站名:</b>
           <%= request.getParameter("name")%></p></li><li><p><b>網址:</b>
           <%= request.getParameter("url")%></p></li></ul></body></html>

          以下是一個簡單的 HTML 表單通過GET方法將客戶端數據提交到 main.jsp 文件中,并設置 cookie:

          <!DOCTYPE html><html><head><meta charset="utf-8"><title>我愛學習(run.com)</title></head><body><form action="main.jsp" method=GET>站點名: <input type="text" name="name"><br />網址: <input type="text" name="url" /><input type="submit" value="提交" /></form></body></html>

          將以上HTML代碼保存到test.htm文件中。

          將該文件放置于當前jsp項目的 WebContent 目錄下(與 main.jsp 同一個目錄)。

          通過訪問 http://localhost:8080/testjsp/test.html 提交表單數據到 main.jsp 文件,試著輸入 "站點名" 和 "網址",然后點擊提交按鈕,它將會在您的屏幕中顯示 "站點名" 和 "網址",并且設置 "站點名" 和 "網址" 的兩個 cookie。


          使用 JSP 讀取 Cookie

          想要讀取cookie,您就需要調用request.getCookies()方法來獲得一個javax.servlet.http.Cookie對象的數組,然后遍歷這個數組,使用getName()方法和getValue()方法來獲取每一個cookie的名稱和值。

          <h3實例演示< h3="" data-filtered="filtered" style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; font-size: 12px; white-space: normal;">

          讓我們來讀取上個例子中的cookie, 以下為 cookie.jsp 文件代碼:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%@ page import="java.net.*" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>獲取 Cookie</title></head><body><%
           Cookie cookie = null;
           Cookie[] cookies = null;
           // 獲取cookies的數據,是一個數組
           cookies = request.getCookies();
           if( cookies != null ){
           out.println("<h2> 查找 Cookie 名與值</h2>");
           for (int i = 0; i < cookies.length; i++){
           cookie = cookies[i];
           out.print("參數名 : " + cookie.getName());
           out.print("<br>");
           out.print("參數值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
           out.print("------------------------------------<br>");
           }
           }else{
           out.println("<h2>沒有發現 Cookie</h2>");
           }%></body></html>


          使用JSP刪除Cookie

          刪除cookie非常簡單。如果您想要刪除一個cookie,按照下面給的步驟來做就行了:

          • 獲取一個已經存在的cookie然后存儲在Cookie對象中。

          • 將cookie的有效期設置為0。

          • 將這個cookie重新添加進響應頭中。


          實例演示

          下面的程序刪除一個名為"name"的cookie,當您第二次運行cookie.jsp時,name 將會為 null。

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%@ page import="java.net.*" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>獲取 Cookie</title></head><body><%
           Cookie cookie = null;
           Cookie[] cookies = null;
           // 獲取當前域名下的cookies,是一個數組
           cookies = request.getCookies();
           if( cookies != null ){ out.println("<h2> 查找 Cookie 名與值</h2>");
           for (int i = 0; i < cookies.length; i++){
           cookie = cookies[i];
           if((cookie.getName( )).compareTo("name") == 0 ){
           cookie.setMaxAge(0);
           response.addCookie(cookie);
           out.print("刪除 Cookie: " +
           cookie.getName( ) + "<br/>");
           }
           out.print("參數名 : " + cookie.getName());
           out.print("<br>");
           out.print("參數值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
           out.print("------------------------------------<br>");
           }
           }else{ out.println("<h2>沒有發現 Cookie</h2>");
           }%></body></html>

          再次訪問 http://localhost:8080/testjsp/cookie.jsp,將會得到如下結果:

          可以看到名為"name" 的 cookie 已經不見了。

          您也可以手動在瀏覽器中刪除 cookie。IE 瀏覽器通過點擊Tools菜單項,然后選擇Internet Options,點擊 Delete Cookies,就能刪除所有 cookie 。


          主站蜘蛛池模板: 国产av一区二区三区日韩| 日韩免费一区二区三区在线| 亚洲毛片αv无线播放一区| 蜜臀Av午夜一区二区三区| 一区二区三区免费视频播放器| 国产精品伦一区二区三级视频| 风间由美在线亚洲一区| 麻豆一区二区99久久久久| 国产福利视频一区二区| 日本中文一区二区三区亚洲| 91精品福利一区二区| 久久久国产精品亚洲一区| 中文字幕一区二区三区免费视频| 亚洲国产AV无码一区二区三区| 男女久久久国产一区二区三区| 精品视频在线观看你懂的一区| 能在线观看的一区二区三区| 精品人妻少妇一区二区三区不卡| 国产精品合集一区二区三区| 中文字幕在线一区二区在线| 无码人妻精品一区二区三区久久 | 人妻激情偷乱视频一区二区三区| 国产成人综合精品一区| 日本精品一区二区久久久| 日本一道一区二区免费看| 国产乱码精品一区二区三区四川人 | 无码人妻aⅴ一区二区三区有奶水| 无码少妇精品一区二区免费动态| 国模丽丽啪啪一区二区| 另类一区二区三区| 中文字幕一区二区三区在线观看 | 在线日韩麻豆一区| 色多多免费视频观看区一区| 福利一区在线视频| A国产一区二区免费入口| 精品一区二区在线观看| 色窝窝无码一区二区三区色欲| 一区二区三区视频在线| 日韩一区二区视频| 波多野结衣在线观看一区二区三区| 一区二区网站在线观看|