Cookie和Session,JSP,JSP和EL表达式

Cookie和Session,JSP,JSP和EL表达式

会话

**会话:**用户打开了一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器的过程

有状态会话:带着用户身份进行会话

网站怎么标识用户的身份?

  1. 服务端给客户端一个cookie,客户端下次访问服务端带上cookie
  2. 服务器登记cookie,下次cookie来匹配用户

保存会话的两种技术

Cookie

  • 客户端技术(响应和请求)

    源码分析

    public class Cookie implements Cloneable, Serializable {  //这个类可以被克隆
        private final String name;
        private String value;			//设置键值对
        private int maxAge = -1;		//cookie保存的时间
        private String domain;			//cookie的作用域
       
    
应用:返回用户上一次访问的时间
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //保存用户上一次访问的时间
        PrintWriter out = resp.getWriter();
        //可能存在多个cookie
        Cookie[] cookies = req.getCookies();
        /*  判断cookie是否存在
            如果cookie存在获取cookie的名字,并与名字比对,返回value
         */
        if (cookies!=null)
            {
                out.write("你上一次访问的时间是:");
                for (int i = 0; i <cookies.length; i++)
                    {
                        Cookie cookie=cookies[i];
                        if ("lastLoginTime".equals(cookie.getName()))
                            {
                            	//时间戳转换
                                long lastLoginTime = Long.parseLong(cookie.getValue());
                                Date date = new Date(lastLoginTime);
                                out.write(String.valueOf(date));
                            }
                    }
            }
        else
            {
                out.write("这是你第一次访问");
            }
         //响应的cookie
        Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
        resp.addCookie(cookie);
    }
cookie.setMaxAge(24*60*60);//cookie有效期为一天
  • 从请求中拿到cookie信息
  • 服务器响应cookie信息

cookie一般会保存在本地用户目录下的Appdata文件夹下

cookie是否存在上限?
  • 一个Cookie只能保存一个信息
  • 一个web站点可以给浏览器访问多个cookie,最多存放20个cookie
  • 浏览器上限大概三百个
  • Cookie大小最大为4kb
删除cookie
  • 不设置有效期,自动失效
  • 设置有效期时间为0,响应后立刻删除
中文数据传递

URLDecode.decode编码

URLEncoder.encode解码

Session

  • 服务器保存用户的会话信息,给每一个用户创建一个Session对象
  • 把用户的信息和数据放在Session中
  • 一个Session独占一个浏览器,浏览器没有关闭,Session就存在

使用场景

  1. 网站登录后,第二次访问不需登录
  2. 用户登录后,整个其他网站都可以访问对应权限
  3. 购物车信息
  4. 在整个网站中经常会使用的数据,放进Session中

Session源码分析

public interface HttpSession {       //接口
    long getCreationTime();			//得到Session创建的时间
    long getLastAccessedTime();
    String getId();					//获得唯一的标识符
    ServletContext getServletContext();	//获得全局Servlet对象
    void setMaxInactiveInterval(int var1);
    int getMaxInactiveInterval();
    void setAttribute(String var1, Object var2);//设置一个键值对
    boolean isNew();		//判断是否最新的session
    void invalidate();		//Session的注销
		//得到SESSION
        HttpSession session = req.getSession();
        session.setAttribute("lyc","6666");
        //获取Session的ID
        String id = session.getId();
        //判断Session是不是新创建的
        if (session.isNew()){
            resp.getWriter().write("Session创建成功");
        }
        //手动注销Session
        session.invalidate();

		//实质上,Session创建的时候做了什么事情:
		Cookie cookie = new Cookie("JSESESSIONID",id);
        resp.addCookie(cookie);
		
<!--web.xml中可以配置Session的过期时间,会话自动过期-->
<session-config>
    <!--以分钟作为单位-->
    <session-timeout>1</session-timeout>
</session-config>

Session和Cookie的区别

  • Session的键值对更加强大,可以存放对象
  • 可以用于共享数据,避免ServletContext爆炸
  • Cookie是把用户的数据写给用户的浏览器,是用户浏览器保存
  • Session把用户的数据写到用户独占Session中,服务端保存,只保存重要的信息
  • Session对象由服务创建,失效一个Session,服务器会自动生成一个新的Session

JSP

是什么

Java Server Pages:java服务器端页面,用于开发动态web

最大特点

写jsp像在写html,jsp可以嵌入java代码,为用户提供动态数据

JSP原理

  • tomcat服务器内部work文件夹中

    idea使用Tomcat会在IDEA的文件夹中产生tomcat目录

  • jsp本质上是一个servlet

  • 继承Http

  • 源码分析

  • 访问jsp页面,web容器将jsp页面转换为java文件,然后编译成class文件返回web容器

    public abstract class HttpJspBase extends HttpServlet implements HttpJspPage //本质是一个sevlet
    public	void	_jspInit()   		//jsp初始化
    public 	void  	_jspDestory()		//jsp销毁
    public	void	_jspService(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,javax.Servlet.ServletException			//jsp服务
        
    

JSP功能

  1. 判断请求

  2. 内置对象(可以在jsp页面直接使用,不需要从servlet中获得)

    pageContext	//页面上下文对象
    Session =null //session对象
    applicaitonContext//应用对象
    config			//配置
    out				//输出对象
    page			//代表当前页
    request			//请求
    response		//响应
    
  3. 在jsp页面中:java代码会原封不动的输出,html代码会被转为out.write输出

JSP基础语法

JSP表达式

<%--
    jsp表达式,输出到客户端
    格式:<%=变量或表达式> 或 ${i}   el表达式
    --%>  
  <%=new java.util.Date()%> = ${new java.util.Date()}
<%--
    jsp脚本片段
    格式:<%%>
    --%>
  <%
    for (int i = 0; i <10 ; i++) {
        i++;
    }
  %>
脚本代码的再实现,嵌入html元素
<%--
    在代码中嵌入HTML元素
    
--%>
  <%
    for (int i = 0; i <10 ; i++) {
        
    %>
	<h1>helloworld</h1>
  <%      
    }
  %>
JSP声明

会被编译到JSP生成的java类中,并不是编译到_jspservice()方法中

<%!
    
%>

JSP的注释不会出现在html源文件中

JSP指令

<%@ page errorPage="error.jsp" %>
<%@page import="Cookiedemo1" %>
<%@page isErrorPage="true" %> <%-- 显式声明为错误页面--%>

<%@include file="error.jsp"%> 引用为公用头部  头部可以是不完整的jsp文件
 <%--jsp 标签--%>
    <jsp:include page="error.jsp"/>

include标签会把内容都取出来,放在要访问的jsp文件中

jsp标签会新建一个页面拼接,以请求的方式放在访问的jsp文件中

JSP内置对象和作用域

pageContext	//页面上下文对象    存东西
Session =null //session对象	存东西
applicaitonContext//应用对象	存东西
config			//配置 =ServletConfig
out				//输出对象
page			//代表当前页
request			//请求		存东西
response		//响应
  • 它们的作用域不一样
    • PageContext 保存的数据只在一个页面中有效
    • request 保存的数据只在一次请求中有效,请求转发会携带这个数据
    • session 保存的数据只在同一个session有校
    • application 保存的数据只在服务器中有效,从打开服务器到关闭服务器
<%
  pageContext.setAttribute();
  request.setAttribute();
  session.setAttribute();
  application.setAttribute();
%>
<%--通过寻找的方式来查找数据--%>
  <%
	//寻找的方式是从底层到高层(作用域)
	//先找page,再找request,再找session,找不到就找application
    String name1 = (String) pageContext.findAttribute("name1");
  %>
源码分析
public abstract class PageContext extends JspContext {
    public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;
public abstract void setAttribute(String var1, Object var2, int var3);
pageContext实现转发
pageContext.forward("/index.jsp");
一般作用

request:客户端向服务器发送请求产生的数据,用户看完就没用的

Session:用户用完一会还有用:比如购物车;

application:用户用完,其他用户还能用

JSP标签,JSTL标签,EL表达式

EL表达式

${}

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

jsp标签

<jsp:include page="error.jsp"/>
<jsp:forward page="error.jsp">
    <jsp:param name="name" value="lyc"/>
</jsp:forward>

JSTL标签

不学了,太多了,生气了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值