1.JSP介紹
JSP即Java Server Pages,JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。 它是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。
1)原理
2)內置對象(參考自百科)
request
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。
response
response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。
session
從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱為一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反復連接,反復刷新一個頁面,服務器應當通過某種辦法知道這是同一個客戶,這就需要session對象。
application
服務器啟動后就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象。
out
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區。在使用 out 對象輸出數據時,可以對數據緩沖區進行操作,及時清除緩沖區中的殘余數據,為其他的輸出讓出緩沖空間。待數據輸出完畢后,要及時關閉輸出流。
page
page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。
config
config 對象的主要作用是取得服務器的配置信息。通過 pageContext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中為應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
exception
java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該對象才可以使用。常用的方法有getMessage()和printStackTrace()等。
pageContext
pageContext 對象的作用是取得任何范圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
2.如何查看jsp經過解析轉換之后的Java代碼(啟動項目並利用tomcat發布之后,可以在tomcat安裝目錄下的“work”目錄找到解析后對於的.java文件和編譯后的.class文件)
3.簡單登錄跳轉實例代碼實現
- login.jsp
1 <%@ page contentType="text/html; charset=gbk" import="dto.User"%> 2 3 <html> 4 <head> 5 <title>login</title> 6 </head> 7 <body> 8 <!-- <p1>test!</p1> --> 9 <h2 align="center">歡迎登錄</h2> 10 <form name=loginForm action="handlelogin.jsp" method=post> 11 <table align="center"> 12 <tr> 13 <td>用戶名:</td><td><input type=text name=username /></td> 14 </tr> 15 <tr> 16 <td>密碼:</td><td><input type=password name=pwd /></td> 17 <tr/> 18 <tr> 19 <td colspan="2",align="center"> 20 <input type="submit" value="submit" /> 21 <input type="reset" value="reset" /> 22 </td> 23 </tr> 24 </table> 25 26 </form> 27 </body> 28 </html>
- handlelogin.jsp
1 <%@page contentType="text/html; charset=gbk" import="dto.User" %> 2 3 <!-- 內嵌java代碼,主要控制邏輯跳轉 --> 4 <% 5 String username = request.getParameter("username"); 6 String pwd = request.getParameter("pwd"); 7 if(username.equals("admin")&&pwd.equals("123")){ 8 User u = new User(username,pwd); 9 session.setAttribute("username",username); 10 pageContext.forward("ok.jsp"); 11 }else{ 12 pageContext.forward("login.jsp"); 13 } 14 %>
- ok.jsp
1 <%@ page contentType="text/html; charset=gbk" import="dto.User" %> 2 3 <html> 4 <body> 5 <h1>登錄成功,<%=session.getAttribute("username") %></h1> 6 </body> 7 </html>
- User.java
1 package dto; 2 3 public class User { 4 5 private String username; 6 private String pwd; 7 8 public User(String username, String pwd) { 9 super(); 10 this.username = username; 11 this.pwd = pwd; 12 } 13 public String getUsername() { 14 return username; 15 } 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 public String getPwd() { 20 return pwd; 21 } 22 public void setPwd(String pwd) { 23 this.pwd = pwd; 24 } 25 26 }
登錄演示:
結語
jsp跟Servlet沒有具體的孰優孰劣。一般我們項目當中都是結合二者的長處進行開發的。使用jsp代碼確實可以減少冗余代碼,提高開發效率。不過,jsp的短板就是它在對頁面邏輯進行處理時比較麻煩。而且每個人有各自的代碼風格,如果有過多的jsp邏輯代碼的話讀來難免有些晦澀難懂!