JSP與Servlet傳值及對比

 

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

Servlet和JSP最主要的不一樣點在於,Servlet的應用邏輯是在Java文件中,而且徹底從表示層中的HTML裏分離開來。
而JSP的狀況是Java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
jquery

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

1、JSP傳值給Servlet 小程序

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

在使用的taocan.do,login.do須要在web.xml中進行配置,代碼以下服務器

<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>session

a、form表單傳值:架構

JSP頁面有:
<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傳值app

好比這裏的 <a>標籤的 href="login.do?number=${number}"與 <form>標籤的 action="login.do?number=${number}",在
servlet一樣用 request.getParameter("number")獲取;jsp

c、Java代碼傳值

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

可是實際中在頁面部分通常不直接寫java片斷代碼,而是在javascipt代碼中來傳遞。

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

一、直接跳轉,在頁面的調用下面的方法實現跳轉。
var username= "${user.userName }";
function subm(){
window.location.href="login.do?username="+username;
}

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

此處用到了jquery的語法,使用前請導入相應的包(例如: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();
}
另外一種形態,當同一個循環體中須要調用不一樣的DOM對應的ID對象,修改price名稱便可
<td id="${cart.cartId}price">${cart.cartPrice }</td>

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

2、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的值。

3、Servlet傳值給Servlet
一、直接跳轉(假設變量num已經定義)
resp.sendRedirect("taocan.do?username="+username);

二、經過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()則不是。

4、JSP傳值給JSP
一、直接傳遞:
在第一個頁面中設置屬性:
<%
request.setAttribute("name","username");
request.setAttribute("date","new Date()");
%>
<jsp:forward page="demo2.jsp"/>

在第二個頁面中獲取:
<%
String username = (String)request.getAttribute("name");
Date date = (Date)request.getAttribute("date");
%>
<h2>姓名:<%=username%></h2>
<h2>日期:<%=date%></h2>

二、另外一種比較直觀的方式EL傳遞

第一個頁面中的跳轉

<a href="hotel.jsp?username=${user.username}&password=${user.password}">

另一個頁面的接收

${param.username}

${param.password}

三、通常在頁面中不多直接寫指令代碼,另外一個方法爲在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實現你的業務代碼。

相關文章
相關標籤/搜索