欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談JSP與Servlet傳值及對(duì)比(總結(jié))

 更新時(shí)間:2017年05月18日 08:21:10   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談JSP與Servlet傳值及對(duì)比(總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。 JSP編譯后是”類(lèi)servlet”。

Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開(kāi)來(lái)。

而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。

本篇從以下四個(gè)方面探討下JSP與Servlet的傳值問(wèn)題:

一、JSP傳值給Servlet

JSP傳值給Servlet有幾種形式:Form表單傳值,url傳值,其他方式傳值,以下使用中默認(rèn)使用了EL表達(dá)式。

在使用的taocan.do,login.do需要在web.xml中進(jìn)行配置,代碼如下

<servlet>
<servlet-name>taocan</servlet-name>
<servlet-class>(對(duì)應(yīng)包名+類(lèi)名)TaocanServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taocan</servlet-name>
<url-pattern>/taocan.do</url-pattern>
</servlet-mapping>

a、form表單傳值:

JSP頁(yè)面有:

<form action="login.do?number=${number}" method="post" >
<input type="text" placeholder="用戶(hù)名" name="username">
<input type="password" placeholder="密碼" name="password">
<input type="submit" value="submit">
</form>

Sevlet中,在程序中如下:

String username = request.getParameter("username");
String password = request.getParameter("password");

可獲取jsp傳的username,password

b、url傳值

比如這里的 <a>標(biāo)簽的 href="login.do?number=${number}" rel="external nofollow" 與 <form>標(biāo)簽的 action="login.do?number=${number}",在servlet同樣用 request.getParameter("number")獲?。?/p>

c、Java代碼傳值

java片段代碼,servlet只能接到 session.setAttribute("testSession","Hello session")的內(nèi)容,而接不到 request的內(nèi)容。在 servlet里用 request.getSession().getAttribute("testSession")獲取 session內(nèi)容。

但是實(shí)際中在頁(yè)面部分一般不直接寫(xiě)java片段代碼,而是在javascipt代碼中來(lái)傳遞。

javascipt中傳遞的幾種形式如下:

1、直接跳轉(zhuǎn),在頁(yè)面的調(diào)用下面的方法實(shí)現(xiàn)跳轉(zhuǎn)。

var username= "${user.userName }";
function subm(){
window.location.href="login.do?username=" rel="external nofollow" +username;
}

2、頁(yè)面定義ID及方法動(dòng)態(tài)傳值:

此處用到了jquery的語(yǔ)法,使用前請(qǐng)導(dǎo)入相應(yīng)的包(例如:jquery-3.1.1.js)

<td id="${cart.cartId}">${cart.cartPrice }</td>
<input type="button" onClick="add(${cart.cartPrice })"/>
jquery中接收:
var currentprice;
function add(id){
currentprice=$("#"+id).text();
}

另一種形態(tài),當(dāng)同一個(gè)循環(huán)體中需要調(diào)用不同的DOM對(duì)用ID對(duì)象,修改price名稱(chēng)即可

<td id="${cart.cartId}price">${cart.cartPrice }</td>

<input type="button" onClick="add(${cart.cartPrice })"/>
var currentprice;
function add(id){
currentprice=$("#"+id+"price").text();
}

二、Servlet傳值給Jsp

具體實(shí)現(xiàn)如下:

Servlet中java代碼:String username = req.getParameter("username");
req.setAttribute("num", num);
req.getSession().setAttribute("userphone", user.getUserPhone());
request.getRequestDispatcher( "網(wǎng)址/jsp頁(yè)面 ").forward(request,response);

jsp頁(yè)面:通常使用EL表達(dá)式接收

<%String s =(String)request.getAttribute( "num");%>
如${num},${sessionScope.userphone}等形式j(luò)sp頁(yè)面就可以取出Servlet的值。

三、Servlet傳值給Servlet

1、直接跳轉(zhuǎn)(假設(shè)變量num已經(jīng)定義)

resp.sendRedirect("taocan.do?username="+username);

2、通過(guò)Session傳遞,當(dāng)然Application也可以,此處省略。

req.getSession().setAttribute("userphone", user.getUserPhone());
String username = (String)req.getSession().getAttribute("username");

總結(jié)下forward和sendRedirect區(qū)別:

1.request.getRequestDispatcher()是請(qǐng)求轉(zhuǎn)發(fā),前后頁(yè)面共享一個(gè)request,是在服務(wù)器端運(yùn)行 ;

Response.sendRedirect()是通過(guò)向客戶(hù)瀏覽器發(fā)送命令來(lái)完成,跳轉(zhuǎn)到另一個(gè)新的頁(yè)面. 所以RequestDispatcher.forward()對(duì)于瀏覽器來(lái)說(shuō)是“透明的”; 而HttpServletResponse.sendRedirect()則不是。

四、JSP傳值給JSP

1、直接傳遞:

在第一個(gè)頁(yè)面中設(shè)置屬性:

<% 
request.setAttribute("name","username");
request.setAttribute("date","new Date()");
%>
<jsp:forward page="demo2.jsp"/>

在第二個(gè)頁(yè)面中獲?。?/p>

<%
String username = (String)request.getAttribute("name");
Date date = (Date)request.getAttribute("date");
%>
<h2>姓名:<%=username%></h2>
<h2>日期:<%=date%></h2>

2、一般在頁(yè)面中很少直接寫(xiě)指令代碼,另一個(gè)方法為在JS中先傳值到中間Servlet中,然后再傳到另外一個(gè)頁(yè)面用EL表達(dá)式直接獲取。

小結(jié):兩者之間的聯(lián)系和區(qū)別

【1】JSP第一次運(yùn)行的時(shí)候會(huì)編譯成Servlet,駐留在內(nèi)存中以供調(diào)用。

【2】JSP是web開(kāi)發(fā)技術(shù),Servlet是服務(wù)器端運(yùn)用的小程序,我們?cè)L問(wèn)一個(gè)JSP頁(yè)面時(shí),服務(wù)器會(huì)將這個(gè)JSP頁(yè)面轉(zhuǎn)變成Servlet小程序運(yùn)行得到結(jié)果后,反饋給用戶(hù)端的瀏覽器。

【3】Servlet相當(dāng)于一個(gè)控制層再去調(diào)用相應(yīng)的JavaBean處理數(shù)據(jù),最后把結(jié)果返回給JSP。

【4】Servlet主要用于轉(zhuǎn)向,將請(qǐng)求轉(zhuǎn)向到相應(yīng)的JSP頁(yè)面。

【5】JSP更多的是進(jìn)行頁(yè)面顯示,Servlet更多的是處理業(yè)務(wù),即JSP是頁(yè)面,Servlet是實(shí)現(xiàn)JSP的方法。

【6】Servlet可以實(shí)現(xiàn)JSP的所有功能,但由于美工使用Servlet做界面非常困難,后來(lái)開(kāi)發(fā)了JSP。

【7】JSP技術(shù)開(kāi)發(fā)網(wǎng)站的兩種模式:JSP + JavaBean;JSP + Servlet + JavaBean(一般在多層應(yīng)用中, JSP主要用作表現(xiàn)層,而Servlet則用作控制層,因?yàn)樵贘SP中放太多的代碼不利于維護(hù),而把這留給Servlet來(lái)實(shí)現(xiàn),而大量的重復(fù)代碼寫(xiě)在JavaBean中)。

【8】二者之間的差別就是,開(kāi)發(fā)界面是JSP直接可以編寫(xiě)。比如在JSP中寫(xiě)Table標(biāo)記:<table>[數(shù)據(jù)]</table>;Servlet需要加入:out.println(“<table>[數(shù)據(jù)]</table>”)。JSP文件在被應(yīng)用服務(wù)器(例如:Tomcat、Resin、Weblogic和Websphere),調(diào)用過(guò)之后,就被編譯成為了Servlet文件。也就是說(shuō)在網(wǎng)頁(yè)上顯示的其實(shí)是Servlet文件。Tomcat下面JSP文件編譯之后生成的Servlet文件被放在了work文件夾下,JSP中的HTML代碼在Servlet都被out出來(lái),而JSP代碼按照標(biāo)簽的不同會(huì)放在不同的位置。

【9】JSP中嵌入HTML代碼,而Servlet中嵌入JAVA代碼。

【10】在一個(gè)標(biāo)準(zhǔn)的MVC架構(gòu)中,Servlet作為Controller接受用戶(hù)請(qǐng)求并轉(zhuǎn)發(fā)給相應(yīng)的Action處理,JSP作為View主要用來(lái)產(chǎn)生動(dòng)態(tài)頁(yè)面,EJB作為Model實(shí)現(xiàn)你的業(yè)務(wù)代碼。

以上這篇淺談JSP與Servlet傳值及對(duì)比(總結(jié))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • Java實(shí)現(xiàn)添加,讀取和刪除Excel圖片的方法詳解

    Java實(shí)現(xiàn)添加,讀取和刪除Excel圖片的方法詳解

    本文介紹在Java程序中如何添加圖片到excel表格,以及如何讀取、刪除excel表格中已有的圖片。文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Springboot2以代碼的方式統(tǒng)一配置Jackson教程

    Springboot2以代碼的方式統(tǒng)一配置Jackson教程

    這篇文章主要介紹了Springboot2以代碼的方式統(tǒng)一配置Jackson教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot Starter機(jī)制及整合tomcat的實(shí)現(xiàn)詳解

    SpringBoot Starter機(jī)制及整合tomcat的實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringBoot Starter機(jī)制及整合tomcat的實(shí)現(xiàn),我們知道SpringBoot自己在“后臺(tái)”幫我們配置了很多原本需要我們手動(dòng)去的東西,至于這個(gè)“后臺(tái)”是啥,就是Starter機(jī)制
    2022-09-09
  • Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法

    Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法

    這篇文章主要介紹了Java實(shí)用工具之使用oshi獲取主機(jī)信息的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java中的兩種for循環(huán)介紹

    Java中的兩種for循環(huán)介紹

    在學(xué)習(xí)Hibernate的時(shí)候?qū)W習(xí)一種在Java當(dāng)中的for循環(huán),估計(jì)是以前學(xué)習(xí)的時(shí)候沒(méi)有記住,忘記了在這里再寫(xiě)下筆記
    2012-10-10
  • 關(guān)于jd-gui啟動(dòng)報(bào)This?program?requires?Java?1.8+的錯(cuò)誤問(wèn)題及解決方法

    關(guān)于jd-gui啟動(dòng)報(bào)This?program?requires?Java?1.8+的錯(cuò)誤問(wèn)題及解決方法

    最近,在Mac使用上JD-GUI啟動(dòng)時(shí)總是報(bào)錯(cuò),接下來(lái)通過(guò)本文給大家介紹關(guān)于jd-gui啟動(dòng)報(bào)this?program?requires?Java?1.8+的錯(cuò)誤問(wèn)題及解決方法,需要的朋友可以參考下
    2022-05-05
  • Java多線程學(xué)習(xí)筆記

    Java多線程學(xué)習(xí)筆記

    常用的實(shí)現(xiàn)多線程的兩種方式:Thread和Runnable。之所以說(shuō)是“常用”,是因?yàn)樵贘ava 5后可以通過(guò)java.util.concurrent包中的線程池來(lái)實(shí)現(xiàn)多線程
    2021-09-09
  • Java抽象類(lèi)和接口的區(qū)別詳情

    Java抽象類(lèi)和接口的區(qū)別詳情

    這篇文章主要介紹的是Java抽象類(lèi)和接口的區(qū)別詳情,
    2021-11-11
  • springboot配置加密的正確姿勢(shì)分享

    springboot配置加密的正確姿勢(shì)分享

    在Spring boot開(kāi)發(fā)中,需要在application.yml文件里配置數(shù)據(jù)庫(kù)的連接信息,或者在啟動(dòng)時(shí)傳入數(shù)據(jù)庫(kù)密碼,如果不加密,傳明文,數(shù)據(jù)庫(kù)就直接暴露了,下面這篇文章主要給大家介紹了關(guān)于springboot配置加密的正確姿勢(shì),需要的朋友可以參考下
    2022-11-11
  • intellij idea tomcat熱部署配置教程

    intellij idea tomcat熱部署配置教程

    這篇文章主要介紹了intellij idea tomcat熱部署配置教程圖解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07

最新評(píng)論