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 }

 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 }

 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 }

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>

可以把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指令

时间: 2024-08-01 18:53:51

day12Session案例 JSP的相关文章

转账案例中引入事务

JSP模式&JDBC 使用MVC设计模式开发一个转账案例 JSP的回顾 JSP : * JSP的概述: * JSP:Java Server Pages. * JSP的运行原理:翻译成Servlet,编译成Class进行执行. * JSP的脚本元素: * <%!   %> * <%    %> * <%=   %> * JSP的注释: * JSP的三个指令: * page,include,taglib   <%@ 指令名称 属性="属性值"

Ajax发送GET、POST请求和响应XML数据案例

1.新建工程 新建一个java web工程,新建一个Servlet文件 AServlet.java,用于返回get和post请求. public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Hello

jquery.multiSelect下拉框多选

使用multiSelect需要导入jquery.bgiframe.min.js,jquery.multiSelect.css,jquery.multiSelect.js还有一些图片,详见附件. 案例 jsp代码: <td>部门:         <select id="departmentId" name="roleIds" style="width:180px" multiple="multiple">

【知识点】Ajax

JS/Ajax JavaScript基础知识 常识 js的特点:调试起来比较困难:是弱类型的. Aptana简介 Aptana是一个非常强大,开源,专注于javaScript的Ajax开发的IDE,它的特性包括 javaS,JavaScript函数,html,css语言的CodeAssist功能 Outliner(大纲):显示JavaScript,html和css的代码结构 支持js,html,css代码提示,包括js自定函数 代码语法错误提示 支持ApatanaUI自定义和扩展 调试Js 支持

局部刷新的js分页插件

补上写好的js分页插件.水平有限,可供参考.另外有好建议的可以在评论里面提出,我再做优化.废话不多说了,代码走起! (一)splitPage.js分页插件 直接copy就能使用: /*** * 功能:局部刷新分页显示表格内容 * 作者:JML * 版本:1.0 * 备注:自己封装的局部刷新分页插件,主要是想了解一下分页插件是如何运作的 * 缺陷:水平有限,插件很不灵活,还有两个硬编码块 * 建议:大家还是下载专门的js分页插件来进行使用吧(本代码可供参考) */ /** * 帮助文档: * 1.

SpringMVC框架之第二篇

6.参数绑定(重点) Springmvc作为表现层框架,是连接页面和service层的桥梁,它负责所有请求的中转.怎么从请求中接收参数是重点,这也体现了我们刚开始说的Springmvc的第一个作用:“接收请求中的参数”. 接收的参数具体有哪些类型呢?6.1~6.5是绝大部分参数绑定的类型,还有两种第二天课程讲. 6.1.简述参数绑定的类型 1.默认支持的参数类型:HttpServletRequest,HttpServletResponse,HttpSession,Model 2.简单类型:Str

不用动手术的肝脏清洗法

几乎每个人体内都有肝胆结石,或许很多人只知道胆结石,不知道肝脏内也有结石,也不知道其实很多胆结石的初期就是在肝脏内形成的,更不知道吃夜宵.晚饭在7点之后吃.吃油炸食品.甚至喝水较少也会导致肝胆结石.就以上几个不良生活习惯,我们每个人占多少?简单的讲,肝脏是人体内最大的器官,它是人体的解毒工厂,它的构造极其复杂,所以至今为止,人类无法设计出人造肝脏,它的复杂度仅次于脑组织.所以让肝脏维持正常功能直接关系着人体的健康.肝脏可以使激素,酒精以及某些有害药物在体内失效.各种人体无法代谢的毒素都会由肝脏负

导演与明星老婆离婚 恋亲手捧红干女儿

http://www.ehotelier.cn/Thread.jsp?tid=182934http://www.ehotelier.cn/Thread.jsp?tid=182940http://www.ehotelier.cn/Thread.jsp?tid=182946http://www.ehotelier.cn/Thread.jsp?tid=182951http://www.ehotelier.cn/Thread.jsp?tid=182957http://www.ehotelier.cn/T

JSP与oracle数据库交互案例

本案例为咖啡销售情况录入查询系统 一.数据输入系统: 1.  设计输入信息页面 代码如下: <html> <head> </head> <body> <center><H1>咖啡管理系统--录入系统</H1></center> 欢迎来到录入系统<br /> <form action="inputaction.jsp" method="post" name