jsp和servlet知識點總結

來源:互聯網
上載者:User

一.Jsp與servlet的區別:

1.jsp經編譯後就變成了Servlet.(JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)

2.jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制.

3.Servlet中沒有內建對象,Jsp中的內建對象都是必須通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到.

Jsp是Servlet的一種簡化,使用Jsp只需要完成程式員需要輸出到用戶端的內容,Jsp中的Java指令碼如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用於產生對用戶端的響應。

 

老師發的答案1:

JSP在本質上就是SERVLET,但是兩者的建立方式不一樣.Servlet完全是JAVA程式碼構成擅長於流程式控制制和交易處理而通過Servlet

來產生動態網頁;JSP由HTML代碼和JSP標籤構成,可以方便地編寫動態網頁

因此在實際應用中採用Servlet來控制商務程序,而採用JSP來產生動態網頁.在struts架構中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層.

答案2:

JSP是Servlet技術的擴充,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從展示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於視圖,Servlet主要用於控制邏輯。

 

二.Jsp的九大對象,七大動作,三大指令

 

jsp九大內建對象:

1>out 向用戶端輸出資料,位元組流.如out.print(" dgaweyr");

 

2>request 接收用戶端的http請求.

String getParameter(String name):得到表單參數名name的值.

String[] getParameterValues(String name):(得到String[]複選框時常用).

setAttribute(String name,Object obj):設定屬性名稱為name,屬性值為obj.

getAttribute(String name);得到屬性值.

 

3>response:封裝jsp產生的回應,然後發送到用戶端以響應客戶的請求.重新導向跳轉任意介面.(伺服器跳轉)

addCookie(Cookie cookie):

sendRedirect("/wel.jsp"):跳轉到指定頁面

 

4>session:用於儲存使用者資訊,跟蹤使用者行為,當前開啟的瀏覽器內,多個頁面共用資料. session對象指的是用戶端與伺服器的一次會話,從客戶連到伺服器的一個WebApplication開始,直到用戶端與伺服器中斷連線為止.它是HttpSession類的執行個體. 

setAttribute(String name,Object obj):設定屬性名稱為name,屬性值為obj.

getAttribute(String name):得到屬性值.

 

5>application對象:實現了使用者間資料的共用,可存放全域變數.它開始於伺服器的啟動,直到伺服器的關閉,在此期間,此對象將一直存在;這樣在使用者的前後串連或不同使用者之間的串連中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他使用者對此的訪問.伺服器的啟動和關閉決定了application對象的生命.它是ServletContext類的執行個體. 

 

session,application,request的區別:

一個項目中session盡量少用幾個,因為過多的session會影響程式的執行效率.它主要用於儲存登入資訊(使用者資訊,許可權,資源)即頻繁使用的資訊.

application: 用於多個瀏覽器之間共用資料,多個使用者共用該對象,可以做計數器.它的用法與session完全一樣.

資料範圍:

application(伺服器關閉時失效)>ression(瀏覽器關閉時失效)>request(只能用於兩個跳轉頁面之間)

 

6>page對象代表jsp這個實體本身,即當前頁面有效.相當於java中的this.

資料範圍:page<session<application

 

7>.exception:代表運行時的異常.

在會發生異常的頁面加入指令:<%@ page errorPage="處理錯誤的頁面.jsp"%>

在處理異常的頁面寫入:<%@ page isErrorPage="true"%>

 

8>.pageContext對象 pageContext對象提供了對JSP頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當於頁面中所有功能的集大成者,它的本類名也叫pageContext.

 

9>.config jsp對應的servlet的配置,可以得到web.xml中的初使化參數.

 

jsp七大動作:

一:include 動態包含(分別編譯):

用jsp:include動作實現<jsp: include page="included.jsp" flush="true" />

它總是會檢查所含檔案中的變化,適合用於包含動態網頁面,並且可以帶參數。flush屬性: 用true ,表示頁面可重新整理。預設為false;

 

二:useBean動作(jsp頁面使用javaBean的第二種方式):

<jsp:useBean id="對象名" class="包名.類名" scope="作用範圍(request/page/application/session)"/>

範圍預設為page(本頁面有效).

三:getProperty動作(name為useBean動作中的id).

從對象中取出屬性值:<jsp:getProperty name="javaBean對象" property="javaBean對象屬性名稱" />

四:setProperty動作(name為useBean動作中的id):

為對象設定屬性值:<jsp:setProperty name="javaBean對象" property="javaBean對象屬性名稱" value="值"/>

為對象設定屬性值:<jsp:setProperty property="javaBean對象屬性名稱" name="javaBean對象" param="username"/>

(param="username" 相當於 value=<%=request.getParameter("username")%>)

 

五:param動作(傳遞參數)):

到達跳轉頁面可以通過 request.getParameter(“參數名”)方式取出參數值

<jsp:include page="轉向頁面的url" > 

           <jsp:param   name="參數名1" value="參數值1"> 

           <jsp:param   name="參數名2" value="參數值2"> 

           ........... 

 </jsp:include> 

或:

<jsp:forward page="轉向頁面的url" > 

           <jsp:param   name="參數名1" value="參數值1"> 

           <jsp:param   name="參數名2" value="參數值2"> 

           ........... 

</jsp:forward>

 

六:forward動作:

跳轉頁面:<jsp:forward page="login.jsp" />

 

七:plugin動作:<jsp:plugin>:用於指定在用戶端啟動並執行外掛程式

 

JSP三大指令之:

一:page指令:

1.指定頁面編碼.例:

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

2.匯入包,例:

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

二:include 指令

靜態包含(統一編譯):<%@ include file="included.jsp"%>

 

三:taglib

 

三.Jsp中的靜態包含與動態包含

動態include(<jsp: include page="included.jsp"/>)

靜態include(<%@ include file="included.jsp"%>)

1. 靜態include的結果是把其他jsp引入當前jsp,兩者合為一體,可以達到資料的共用即可以說是統一編譯的,而

動態include的結構是兩者獨立的,直到輸出時才合并即為分別編譯的.

2.動態include的jsp檔案獨立性很強,是一個單獨的jsp檔案,需要使用的對象,版面設定,都由自己建立,而靜態include純粹是把代碼寫在外面的一種共用方法,所有的變數都是可以和include它的主檔案共用,兩者高度緊密結合,不能 有變數同名的衝突.而版面設定也可以借用主檔案的.

3.動態包含總是檢查被包含頁面的變化,靜態包含不一定檢查被包含頁面的變化.

4.動態包含可帶參數,靜態包含不能帶參數.如(<jsp: include page="included.jsp">放入參數</jsp:include>);

 

四.Servlet的生命週期

載入(伺服器啟動時,會到web.xml檔案中去找到Servlet檔案的配置並建立servlet的執行個體) → 初使化(init()此方法只執行一次) → 執行(service(),doGet(),doPost()) → 清理(銷毀destory()) 

service():方法本身包含了doGet()和doPost().如果伺服器發現了service()方法,則不再執行doGet(),doPost().

一般不建議去重寫父類的service方法.因為重寫了此方法doGet方法和doPost方法將得不到利用.

沒有service()方法預設執行doGet()方法.

 

五.Servlet的十大方法

init(HttpServletConfig config): 被servlet 容器調用以指明一個servlet被放進服務中。

service(HttpServletRequest request, HttpServletResponse response):被servlet 容器調用以允許servlet響應一個請求

doGet(HttpServletRequest request, HttpServletResponse response):被server調用處理用戶端的GET請求 .

doPost(HttpServletRequest request, HttpServletResponse response):被server調用處理用戶端的POST請求. 

doPut(HttpServletRequest request, HttpServletResponse response):被server調用處理用戶端的PUT請求. 

doDelete(HttpServletRequest request, HttpServletResponse response):被server調用處理用戶端的DELETE請求.

destroy():被 servlet container調用以告知一個servlet它被剔除服務。

getServletInfo():返回有關servlet的資訊,例如作者、版本、著作權。

getServletConfig():返回ServletConfig對象

doHead(HttpServletRequest request, HttpServletResponse response):被server調用處理用戶端的Head請求.

 

六.Servlet類的基本架構

Servlet 介面:主要定義了servlet的生命週期方法 

ServletConfig介面:為servlet提供了使用Container Service的若干重要對象和方法。 

ServletContext介面:是Servlet的內容物件,這個對象是在伺服器啟動時建立的,為servlet提供了使用Container Service的若干重要方法。 

GenericServlet抽象類別:為servlet提供了一般的實現(包括實現了servlet和ServletConfig兩個介面),儲存了容器通過init方法傳遞給servlet的一個ServletConfig類型的重要對象。 

HttpServlet抽象類別:為處理http請求的servlet提供了一般實現,主要是定義和實現了若干service方法。 

繼承關係:GenericServlet繼承了Servlet和ServletConfig介面;HttpServlet繼承了GenericServlet;我們寫的servlet繼承了HttpServlet 

 

七.如何配置一個servlet使它運行

1.servlet的名字,包類

<servlet>

<servlet-name>httpServletDemo(為servlet取的名字)</servlet-name>

<servlet-class>com.lxitedu.HttpServletDemo(包名.類名)</servlet-class>

</servlet>

 

2.映射.訪問的地址(url)

<servlet-mapping>

<servlet-name>httpServletDemo(與上面的servlet名字要完全一樣)</servlet-name>

<url-pattern>/myServlet(運行時地址欄顯示的檔案名稱)</url-pattern>

</servlet-mapping>

 

八. Get與post有何區別

1.post比get安全.(get用的問號傳值法)

2.post接收的長度比較長.

3.post是以表單的形式提交請求的,get是以瀏覽器的形式提交請求的。所以get比較快。

4.post更能解決我們的中文亂碼問題。

在預設情況下是get請求,form的method屬性如果不指定,也預設為get請求。

get請求,會將參數顯示在瀏覽器的地址欄上,其顯示格式,在地址之後會以?開始,以'&'分隔參數,可以通過HttpServletRequest()對象的getQueryString()方法來獲得get請求的參數值。

post請求:ServletRequest對象的getInputStream()方法可以獲得一個由Socket得來的輸入資料流,可以使用這個流來實現檔案的上傳。getReader()方法可以直接擷取post請求的參數

 

九.說說jsp或servlet中有哪幾種跳轉方式。它們有何區別

1.用戶端跳轉:

1).使用form表單的action屬性設定要跳轉的頁面(此方法可以將此頁面的form表單屬性值傳遞到下一頁面):如下

<form action="my.jsp" name="lili" onsubmit="return test()">

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

或者(為button類型需要手動提交表單):

<input type="button" value="註冊" onclick="test()">

javascript的函數:

function test(){

    //手動設定跳轉頁面

     document.lili.action="my1.jsp";

    document.lili.submit();

}

2).使用javascript中的頁面跳轉的方法(不能將form表單中的屬性值傳遞到下一頁面):

window.location.href="my.jsp";

window.location.replace("my.jsq");//此方法不可將頁面後退.

2.服務端跳轉的兩種方法對比:

<jsp:forward page="xxx.jsp"/>:等價於

request.getRequestDispatcher("xxx.jsp").forward(request,response);

本伺服器的資源跳轉,效率更高.地址欄不改變(仍為跳轉前的頁面).可得到request屬性值.

response.sendRedirect("xxx.jsp"):

重新導向到任意資源.地址欄改為當前頁面.無法得到request屬性值.

 

十.servlet中的資料能與jsp共用嗎?如果可以如何傳遞

能,我們可以將servlet中的資料放入HttpSession,HttpServletRequest,ServletContext,PageContext對象中,

在jsp頁面中使用其相對應的內建對象得到我們servlet中的資料.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.