day12Session案例 JSP

Posted Michael2397

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day12Session案例 JSP相关的知识,希望对你有一定的参考价值。

2 Session案例

                            用户登录场景

 

 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          * 二、在用户主页,判断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              * 一、登录成功后,把用户数据保存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          * 三、安全退出:
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语言开发动态资源的技术!!!

                                     Jsp的作用:用java语言(+html语言)开发动态资源的技术!!!

                                               Jsp就是servlet!!!

4.2 Jsp的特点

                                     1)jsp的运行必须交给tomcat服务器!!!!

                                                        tomcat的work目录: tomcat服务器存放jsp运行时的临时文件

                                     2)jsp页面既可以写html代码,也可以写java代码。

                                               (html页面不能写java代码 。而jsp页面可以写java代码)

  4.3 体验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中访问!!!                           

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指令

以上是关于day12Session案例 JSP的主要内容,如果未能解决你的问题,请参考以下文章

Java 之 Session 包含验证码登录案例

jsp&cookie&session-01

Session案例:简易的购物车

会话技术:Cookie && Session

Session & Cookie登录案例 January 27,2020

jsp基础语言-jsp代码段