JSP實現簡單登錄跳轉

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邏輯代碼的話讀來難免有些晦澀難懂!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章