目录


  • 设置IDEA中的Servlet模板

  • 会话技术

    • Cookie
      • 简单入门使用
      • 实现原理
      • Cookie细节
      • 特点及作用
      • 小案例:记住上次访问时间
    • Session
      • 概念
      • 快速入门使用
      • 原理
      • 存活时间
      • 与Cookie的区别
  • JSP

    • JSP入门学习(为了完成验证码验证小案例)
      • 概念
      • 原理
      • JSP脚本
      • JSP的内置对象
      • 验证码登录小案例

开始

IDEA开发环境设置Servlet注解模板

在这里插入图片描述

一、会话技术

会话就是发生在浏览器和服务器之间请求、响应的过程

一次会话结束于浏览器或者服务器关闭

在这里插入图片描述

在这里插入图片描述

  • Cookie提供客户端一种共享数据的方法

  • Session提供服务器端一种共享数据的方法

1.1Cookie

在这里插入图片描述

1.1.1简单入门使用

在服务器的一个Servlet 创建Cookie对象,然后设置键值,发送Cookie到浏览器客户端

在这里插入图片描述

在这里插入图片描述

适应浏览器访问另外一个Servlet,因为Cookie可以多个键值对

request.getCookies返回的是Cookie[]其实就是封装的一种对象集,底层是Collection

然后可以遍历
在这里插入图片描述

1.1.2实现原理

基于响应头set-Cookie和请求头Cookie实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.3Cookie细节

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

中文问题下面小案例会说明

在这里插入图片描述

1.1.4特点及作用

在这里插入图片描述

1.1.5小案例:记录上次访问时间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关于tomcat8之后随解决支持Cookie中文输出问题,但是特殊字符像空格还是不行,会报错

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最后设置之后,会进行URL编码解码,就能解决中文字符问题
在这里插入图片描述

代码

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/servletShowTime")
public class ServletShowTime extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        //设置响应得消息体数据格式以及编码
        response.setContentType("text/html;charset=utf-8");

        //1. 获取所有的cookies
        Cookie[] cookies = request.getCookies();

        //标记默认是第一次登陆
        boolean flag = false;


        //不是第一次访问
        if(cookies != null && cookies.length > 0){
            //遍历找Cookie是否有lastTime属性
            for (Cookie cookie : cookies) {
                //System.out.println(cookie.getValue());
                String name = cookie.getName();

                //找到了不是第一次访问,记录这次登陆的时间
                if("lastTime".equals(name)){
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String str_date = sdf.format(date);
                    //设置中文URL编码,待会打印值的时候还需要解码
                    str_date = URLEncoder.encode(str_date,"utf-8");
                    cookie.setValue(str_date);

                    cookie.setMaxAge(60 * 60 * 24);
                    response.addCookie(cookie);



                    String value = cookie.getValue();
                    value = URLDecoder.decode(value,"utf-8");
                    response.getWriter().write("<h1>欢迎回来,您上次访问的时间为:" + value + "</h1>");
                    flag = true;
                }



            }
            //是第一次访问
            if(cookies == null || cookies.length == 0 || flag == false){

                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                String str_date = sdf.format(date);


                str_date = URLEncoder.encode(str_date,"utf-8");
                Cookie cookie= new Cookie("lastTime",str_date);
                cookie.setMaxAge(60 * 60 * 24);

                response.addCookie(cookie);
                response.getWriter().write("<h1>您好,欢迎首次访问!</h1>");
                flag = true;


            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.2Session

Session的用处就是用于服务器端数据的共享,例如一个服务器的购物车功能,我们可以一直累积加入商品到购物车

在这里插入图片描述

1.2.1概念

在这里插入图片描述

1.2.2快速入门使用

在这里插入图片描述

在这里插入图片描述
能在控制台打印设置的hello session 信息

1.2.3原理

Session的实现是依赖于Cookie的,才能保证一次会话范围内使用的是一个Session对象

在这里插入图片描述
第一次创建Session对象的时候,会response给浏览器一个set-Cookie,里面包含Session 对象的id

下次浏览器请求的时候,Cookie会带上此id,找到自己的session对象
在这里插入图片描述

1.2.4存活时间

一次会话范围内是一个session对象我们知道了,如果想要浏览器关闭再打开(第二次会话)仍是一个session对象呢

一般一次会话结束时(浏览器关闭再打开访问)session对象就会改变

但是如果我们一直希望是一个session对象,我们可以设置session的存活时间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
浏览器关闭、打开重新关闭导致的会话更新 我们 可以保证session对象不变

那么服务器端关闭再打开,两次获取的session对象是同一个吗?答案是不是,但是如果不是我们的访问信息会不会丢失?

不会丢失,因为服务器提供一种机制:

  • session钝化
  • sesssion活化

其实就是服务器在正常关闭之前,会把session对象的信息写入硬盘(钝化)一个文件,等服务器重新打开,会重新读取session对象,然后删除该文件

在这里插入图片描述

注意IDEA中能支持钝化,但是不支持活化

我们需要在本地tomcat中执行实验

在这里插入图片描述

在这里插入图片描述

1.2.5session特点与Cookie的区别

特点

在这里插入图片描述

在这里插入图片描述

二、JSP

动态资源需要逻辑代码,而这些逻辑代码可以写在JSP页面中

同时JSP也支持html标签的使用

类似上面的显示上次登录时间小案例,我们发现在使用response.getWriter().write()并不是那么方便

因此可以把代码放在jsp页面中完成案例优化

在这里插入图片描述

因此可以(可以先看看后面的jsp知识再来看这个)

(部分代码截图)
在这里插入图片描述

在这里插入图片描述

JSP入门学习(为了完成改造验证码验证小案例)

在这里插入图片描述

2.1概念

在这里插入图片描述

2.2原理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3JSP脚本

Java代码可以直接定义在<% >等类似内部

在这里插入图片描述

HttpJspBase类中有一个Service方法,里面含内置对象的声明,我们定义的Java代码也会被放在方法里面

只是定义的脚本格式不同,放置的位置也不同,作用也不同

在这里插入图片描述

2.4JSP的内置对象

在这里插入图片描述
关于response.getWriter().write()out.write()的区别

其实out就是jsp内置对象,可以直接使用输出信息到页面

在这里插入图片描述

2.5验证码登录小案例

对上次验证码验证案例的升级(上次出了点问题,string一直画不去,不知道问题出现在哪,有时间会找到问题并把代码贴出来)

这次主要是运用了jsp、servlet、session、request、response、css、js等相关知识

主要文件

  • CheckCodeServlet:生成验证码的容器
  • LoginServlet:验证码验证的容器、转发、重定向的容器
  • login.jsp:设置表单,绑定单击事件,设计css样式(验证码或者数据库密码错误,转发到login.jsp)
  • success.jsp:验证码和数据库账号密码都正确的跳转页面(重定向)

小优化

  • 页面提示信息小优化
  • 一次性验证码小优化

CheckCodeServlet:生成验证码的容器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

login.jsp:设置表单,绑定单击事件,设计css样式(验证码或者数据库密码错误,转发到login.jsp)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

LoginServlet:验证码验证的容器、转发、重定向的容器
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


与君共勉!

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐