激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談JSP與Servlet傳值及對比(總結)

淺談JSP與Servlet傳值及對比(總結)

2020-10-06 16:50Java之家 Java教程

下面小編就為大家帶來一篇淺談JSP與Servlet傳值及對比(總結)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。 JSP編譯后是”類servlet”。

Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。

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

本篇從以下四個方面探討下JSP與Servlet的傳值問題:

一、JSP傳值給Servlet

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

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

?
1
2
3
4
5
6
7
8
<servlet>
<servlet-name>taocan</servlet-name>
<servlet-class>(對應包名+類名)TaocanServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taocan</servlet-name>
<url-pattern>/taocan.do</url-pattern>
</servlet-mapping>

 

a、form表單傳值:

JSP頁面有:

?
1
2
3
4
5
<form action="login.do?number=${number}" method="post" >
<input type="text" placeholder="用戶名" 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>標簽的 href="login.do?number=${number}" rel="external nofollow" 與 <form>標簽的 action="login.do?number=${number}",在servlet同樣用 request.getParameter("number")獲取;

c、Java代碼傳值

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

但是實際中在頁面部分一般不直接寫java片段代碼,而是在javascipt代碼中來傳遞。

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

1、直接跳轉,在頁面的調用下面的方法實現跳轉。

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

 

2、頁面定義ID及方法動態傳值:

此處用到了jquery的語法,使用前請導入相應的包(例如:jquery-3.1.1.js)

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

 

另一種形態,當同一個循環體中需要調用不同的DOM對用ID對象,修改price名稱即可

?
1
2
3
4
5
6
7
<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

具體實現如下:

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

jsp頁面:通常使用EL表達式接收

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

三、Servlet傳值給Servlet

1、直接跳轉(假設變量num已經定義)

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

2、通過Session傳遞,當然Application也可以,此處省略。

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

總結下forward和sendRedirect區別:

1.request.getRequestDispatcher()是請求轉發,前后頁面共享一個request,是在服務器端運行 ;

Response.sendRedirect()是通過向客戶瀏覽器發送命令來完成,跳轉到另一個新的頁面. 所以RequestDispatcher.forward()對于瀏覽器來說是“透明的”; 而HttpServletResponse.sendRedirect()則不是。

四、JSP傳值給JSP

1、直接傳遞:

在第一個頁面中設置屬性:

?
1
2
3
4
5
<%
request.setAttribute("name","username");
request.setAttribute("date","new Date()");
%>
<jsp:forward page="demo2.jsp"/>

 

在第二個頁面中獲取:

?
1
2
3
4
5
6
<%
String username = (String)request.getAttribute("name");
Date date = (Date)request.getAttribute("date");
%>
<h2>姓名:<%=username%></h2>
<h2>日期:<%=date%></h2>

 

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

小結:兩者之間的聯系和區別

【1】JSP第一次運行的時候會編譯成Servlet,駐留在內存中以供調用。

【2】JSP是web開發技術,Servlet是服務器端運用的小程序,我們訪問一個JSP頁面時,服務器會將這個JSP頁面轉變成Servlet小程序運行得到結果后,反饋給用戶端的瀏覽器。

【3】Servlet相當于一個控制層再去調用相應的JavaBean處理數據,最后把結果返回給JSP。

【4】Servlet主要用于轉向,將請求轉向到相應的JSP頁面。

【5】JSP更多的是進行頁面顯示,Servlet更多的是處理業務,即JSP是頁面,Servlet是實現JSP的方法。

【6】Servlet可以實現JSP的所有功能,但由于美工使用Servlet做界面非常困難,后來開發了JSP。

【7】JSP技術開發網站的兩種模式:JSP + JavaBean;JSP + Servlet + JavaBean(一般在多層應用中, JSP主要用作表現層,而Servlet則用作控制層,因為在JSP中放太多的代碼不利于維護,而把這留給Servlet來實現,而大量的重復代碼寫在JavaBean中)。

【8】二者之間的差別就是,開發界面是JSP直接可以編寫。比如在JSP中寫Table標記:<table>[數據]</table>;Servlet需要加入:out.println(“<table>[數據]</table>”)。JSP文件在被應用服務器(例如:Tomcat、Resin、Weblogic和Websphere),調用過之后,就被編譯成為了Servlet文件。也就是說在網頁上顯示的其實是Servlet文件。Tomcat下面JSP文件編譯之后生成的Servlet文件被放在了work文件夾下,JSP中的HTML代碼在Servlet都被out出來,而JSP代碼按照標簽的不同會放在不同的位置。

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

【10】在一個標準的MVC架構中,Servlet作為Controller接受用戶請求并轉發給相應的Action處理,JSP作為View主要用來產生動態頁面,EJB作為Model實現你的業務代碼。

以上這篇淺談JSP與Servlet傳值及對比(總結)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99影视在线视频免费观看 | 精品国产一区二区三区久久久狼牙 | 91久久久久久亚洲精品禁果 | 色妞视频男女视频 | 欧美日韩视频网站 | 亚洲一区久久 | 一级性生活视频 | 第一区免费在线观看 | 国产精品入口夜色视频大尺度 | 羞羞视频免费视频欧美 | 久久99国产精品免费网站 | 亚洲成人激情av | 国产亚洲精品久久久久久大师 | 国产青草视频在线观看 | 成人精品视频网站 | 国产成人av一区 | 久久精品一区二区三区国产主播 | 91精品欧美一区二区三区 | 日韩av片在线播放 | 欧美另类在线视频 | 免费黄色入口 | 欧美成人高清视频 | vidz 98hd| 在线免费视频a | 日本一区二区久久久 | www.17c亚洲蜜桃 | 精品91av| 久久69精品久久久久久国产越南 | 成人啪啪18免费网站 | 欧美激情综合网 | 亚洲小视频在线 | 一级毛片播放 | 国产手机av在线 | 二级大黄大片高清在线视频 | 色婷婷综合久久久久中文 | 精品一区二区三区电影 | 国产免费黄网 | 精品一区二区三区欧美 | 一级免费a| 免费看日产一区二区三区 | 欧美成人精品一级 |