day12Session案例 JSP

2 Session案例

                            用戶登陸場景html

 

 1 package gz.itcast;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 /**
12  * 用戶主頁的邏輯
13  * @author APPle
14  *
15  */
16 public class IndexServlet extends HttpServlet {
17 
18     public void doGet(HttpServletRequest request, HttpServletResponse response)
19             throws ServletException, IOException {
20         response.setContentType("text/html;charset=utf-8");
21         PrintWriter writer = response.getWriter();
22         
23         
24         String html = "";
25         
26         /**
27          * 接收request域對象的數據
28          */
29         /*
30         String loginName = (String)request.getAttribute("loginName");
31         */
32         
33         /**
34          * 2、在用戶主頁,判斷session不爲空且存在指定的屬性才視爲登陸成功!才能訪問資源。
35          * 從session域中獲取會話數據
36          */
37         //1.獲得session對象
38         HttpSession session = request.getSession(false);
39         if(session==null){
40             //沒有登陸成功,跳轉到登陸頁面
41             response.sendRedirect(request.getContextPath()+"/login.html");
42             return;
43         }
44         //2.取出會話數據
45         String loginName = (String)session.getAttribute("loginName");
46         if(loginName==null){
47             //沒有登陸成功,跳轉到登陸頁面
48             response.sendRedirect(request.getContextPath()+"/login.html");
49             return;
50         }
51         
52         html = "<html><body>歡迎回來,"+loginName+",<a href='"+request.getContextPath()+"/LogoutServlet'>安全退出</a></body></html>";
53         
54         
55         writer.write(html);
56     }
57 
58     public void doPost(HttpServletRequest request, HttpServletResponse response)
59             throws ServletException, IOException {
60         doGet(request, response);
61     }
62 
63 }
View Code
 1 package gz.itcast;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 /**
11  * 處理登陸的邏輯
12  * @author APPle
13  *
14  */
15 public class LoginServlet extends HttpServlet {
16 
17     public void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         request.setCharacterEncoding("utf-8");
20         //1.接收參數
21         String userName = request.getParameter("userName");
22         String userPwd = request.getParameter("userPwd");
23         
24         //2.判斷邏輯
25         if("eric".equals(userName)
26                  && "123456".equals(userPwd)){
27             //登陸成功
28             /**
29              * 分析:
30              *       context域對象:不合適,可能會覆蓋數據。
31              *    request域對象: 不合適,整個網站必須得使用轉發技術來跳轉頁面
32              *    session域對象:合適。
33              */
34             /*
35             request.setAttribute("loginName", userName);
36             //request.getRequestDispatcher("/IndexServlet").forward(request, response);
37             response.sendRedirect(request.getContextPath()+"/IndexServlet");
38             */
39             
40             /**
41              * 1、登陸成功後,把用戶數據保存session對象中
42              */
43             //1.建立session對象
44             HttpSession session = request.getSession();
45             //2.把數據保存到session域中
46             session.setAttribute("loginName", userName);
47             //3.跳轉到用戶主頁
48             response.sendRedirect(request.getContextPath()+"/IndexServlet");
49             
50         }else{
51             //登陸失敗
52             //請求重定向
53             response.sendRedirect(request.getContextPath()+"/fail.html");
54         }
55     }
56 
57     public void doPost(HttpServletRequest request, HttpServletResponse response)
58             throws ServletException, IOException {
59         doGet(request, response);
60     }
61 
62 }
View Code
 1 package gz.itcast;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 /**
11  * 退出邏輯
12  * @author APPle
13  *
14  */
15 public class LogoutServlet extends HttpServlet {
16 
17     public void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         /**
20          * 3、安全退出:
21          *         刪除掉session對象中指定的loginName屬性便可!  
22          */
23         //1.獲得session對象
24         HttpSession session = request.getSession(false);
25         if(session!=null){
26             //2.刪除屬性
27             session.removeAttribute("loginName");
28         }
29         
30         //2.回來登陸頁面
31         response.sendRedirect(request.getContextPath()+"/login.html");
32         
33     }
34 
35     public void doPost(HttpServletRequest request, HttpServletResponse response)
36             throws ServletException, IOException {
37         doGet(request, response);
38     }
39 
40 }
View Code

4 Jsp基礎

4.1 Jsp引入

                                     Servlet的做用: 用java語言開發動態資源的技術!!!java

                                     Jsp的做用:用java語言(+html語言)開發動態資源的技術!!!apache

                                               Jsp就是servlet!!!瀏覽器

4.2 Jsp的特色

                                     1)jsp的運行必須交給tomcat服務器!!!!tomcat

                                                        tomcat的work目錄: tomcat服務器存放jsp運行時的臨時文件安全

                                     2)jsp頁面既能夠寫html代碼,也能夠寫java代碼。服務器

                                               (html頁面不能寫java代碼 。而jsp頁面能夠寫java代碼)session

  4.3 體驗jsp頁面做用

                                     需求:顯示當前時間到瀏覽器上jsp

 1 <%@ page language="java" import="java.util.*,java.text.*" pageEncoding="utf-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head> 
 6     <title>第一個jsp頁面</title>  
 7   </head>
 8   
 9   <body>
10     <%
11         //寫java代碼
12         //獲取當前時間
13         SimpleDateFormat sdf = new SimpleDateFormat();
14         String curDate = sdf.format(new Date());
15         //輸出內容到瀏覽器
16         //response.getWriter().write("");
17         out.write("當前時間爲2:"+curDate);
18      %>
19   </body>
20 </html>
View Code

                                     能夠把jsp頁面當作html頁面在tomcat中訪問!!!                           ide

4.4 Jsp的執行過程

                            問題: 訪問http://localhost:8080/day12/01.hello.jsp  如何顯示效果?

 

                            1)訪問到01.hello.jsp頁面,tomcat掃描到jsp文件,在%tomcat%/work把jsp文件翻譯成java源文件

                                                        (01.hello.jsp   ->   _01_hello_jsp.java) (翻譯)

                            2)tomcat服務器把java源文件編譯成class字節碼文件 (編譯)

                                               (_01_hello_jsp.java  ->  _01_hello_jsp.class)

                            3)tomcat服務器構造_01_hello_jsp類對象

                            4)tomcat服務器調用_01_hello_jsp類裏面方法,返回內容顯示到瀏覽器。

 

         第一次訪問jsp:

                                     走(1)(2)(3)(4)

         第n次訪問jsp:

                                     走(4)

        

注意:

                            1)jsp文件修改了或jsp的臨時文件被刪除了,要從新走翻譯(1)和編譯(2)的過程

                           

 

                   

4.5 疑問

                   問題: 爲何Jsp就是servlet!!!

                            jsp翻譯的java文件:

                                     public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase

    implements org.apache.jasper.runtime.JspSourceDependent {

 

                                     HttpJspBase類:

                            public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {

 

                     結論: Jsp就是一個servlet程序!!!

                            servlet的技術能夠用在jsp程序中

                            jsp的技術並非所有適用於servlet程序!

 

                    

                     Servlet的生命週期:

                                   1)構造方法(第1次訪問)

                                   2)init方法(第1次訪問)

                                   3)service方法

                                   4)destroy方法           

                     Jsp的生命週期

                                   1)翻譯: jsp->java文件

                                   2)編譯: java文件->class文件(servlet程序)

                                   3)構造方法(第1次訪問)

                                   4)init方法(第1次訪問):_jspInit()

                                   5)service方法:_jspService()

                                   6)destroy方法:_jspDestroy()

 

5 Jsp語法

5.1 Jsp模板

                                     jsp頁面中的html代碼就是jsp的模板

 5.2 Jsp表達式

                                     語法:<%=變量或表達式%>

                                     做用: 向瀏覽器輸出變量的值或表達式計算的結果

                                     注意:             

                                               1)表達式的原理就是翻譯成out.print(「變量」 );經過該方法向瀏覽器寫出內容

                                               2)表達式後面不須要帶分號結束。

5.3 Jsp的腳本

                                     語法:<%java代碼 %>

                                     做用: 執行java代碼 

                                     注意:

                                               1)原理把腳本中java代碼原封不動拷貝到_jspService方法中執行。

5.4 Jsp的聲明

                                     語法:<%! 變量或方法 %>

                                     做用: 聲明jsp的變量或方法

                                     注意:

                                               1)變量翻譯成成員變量,方法翻譯成成員方法。

 5.5 Jsp的註釋

                                     語法: <%!--  jsp註釋  --%>

                                     注意;

                                               1)html的註釋會被翻譯和執行。而jsp的註釋不能被翻譯和執行。

6 Jsp的三大指令

6.1 include指令

                                     做用: 在當前頁面用於包含其餘頁面

                                     語法: <%@include file="common/header.jsp"%>

                                     注意:

                                               1)原理是把被包含的頁面(header.jsp)的內容翻譯到包含頁面(index.jsp)中,合併成翻譯成一個java源文件,再編譯運行!!,這種包含叫靜態包含(源碼包含)

                                               2)若是使用靜態包含,被包含頁面中不須要出現全局的html標籤了!!!(如html、head、  body)

6.2 page指令

做用: 告訴tomcat服務器如何翻譯jsp文件
                <%@ page 
                    language="java"   --告訴服務器使用什麼動態語言來翻譯jsp文件
                    import="java.util.*" --告訴服務器java文件使用什麼包
                                                導入包,多個包之間用逗號分割
                    pageEncoding="utf-8"  --告訴服務器使用什麼編碼翻譯jsp文件(成java文件)
                 contentType="text/html; charset=utf-8" 服務器發送瀏覽器的數據類型和內容編碼
                        注意:在開發工具中,之後只須要設置pageEncoding便可解決中文亂碼問題
                    errorPage="error.jsp"
                    isErrorPage="false"
                    buffer="8kb"
                    session="true"
                    isELIgnored="false"
    %>

6.3 taglib指令

相關文章
相關標籤/搜索