热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

08CookieSessionJsp

Cookie1.Cookie介绍Cookie是由服务端创建,由若干个键值对组成的数据,并且随着响应以文件的形式将Cookie数据保存在客户端本地。当
COOKIE

1.COOKIE介绍


  • COOKIE是由服务端创建,由若干个键值对组成的数据,并且随着响应以文件的形式将COOKIE数据保存在客户端本地。当浏览器再次访问服务器时会携带COOKIE数据,从而实现多次请求的数据共享。
  • 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以提高效率

在这里插入图片描述

2.COOKIE常见属性


属性名作用是否重要
nameCOOKIE名称必须属性
valueCOOKIE的值(不支持中文)必须属性
pathCooike的路径重要
domainCOOKIE的域名重要
maxAgeCooike的存活时间重要
versionCOOKIE的版本号不重要
commentCOOKIE的描述不重要

3.COOKIE的方法

COOKIE(String name,String value)构造方法创建对象
属性对应的set和get方法 (name属性只有一个get方法,name属性是被final修饰的)获取和赋值

  • 添加:HttpServletResponse

public void addCOOKIE(COOKIE COOKIE)向客户端添加COOKIE

  • 获取:HttpServletRequest

public void getCOOKIE()获取所有的COOKIE

4.COOKIE的使用


  • 数量限制:每个网站最多只能有20个COOKIE,且大小不超过4KB,所有网站的COOKIE总数不能超过300个
  • 名称限制:COOKIE的名称只能包含ASCII码表的字母,字符字符,不能包含逗号,分号,空格,不能以$开头,COOKIE的值不支持中文
  • 存活时间的限制setMaxAge()方法接受数字
    • 负整数:当前会话有效,浏览器关闭则清除
    • 0:立即清除
    • 正整数:以秒为单位设置存活时间
  • 访问路径限制
    • 默认路径:取自第一次访问的资源路径前缀,只要以这个路径开头就可以访问到
    • 设置路径:setPath()方法设置指定路径。

@WebServlet("/COOKIE")
public class COOKIEServletDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");resp.getWriter().write("欢迎访问本网站,你的最后访问时间为:
"
);//创建对象,记录最后访问时间COOKIE COOKIE = new COOKIE("time", System.currentTimeMillis() + "");//设置最大存活时间COOKIE.setMaxAge(3600);//把COOKIE对象加入客户端resp.addCOOKIE(COOKIE);//获取COOKIECOOKIE[] COOKIEs = req.getCOOKIEs();for (COOKIE c : COOKIEs) {if ("time".equals(c.getName())){String value = c.getValue();//转换格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(Long.parseLong(value));String format = sdf.format(date);resp.getWriter().write(format);}}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

5.COOKIE使用细节

1. 一次可不可以发送多个COOKIE? 答:可以,使用response调用多次addCOOKIE方法发送即可。2. COOKIE在浏览器中保存多长时间?答:默认情况下,当浏览器关闭后,COOKIE数据被销毁。如果需要持久化存储:setMaxAge(int seconds)正数:指定COOKIE存活时间,时间到后,COOKIE文件自动失效负数:默认值零:删除COOKIE信息3. COOKIE能不能存储中文?答:可以存中文,但是需要采用URL编码进行存储//"中文" URL编码---> %E4%B8%AD%E6%96%87String encode = URLEncoder.encode("中文","utf-8");//"%E4%B8%AD%E6%96%87" URL编码---> "中文"String decode = URLDecoder.decode(encode, "utf-8");4. COOKIE共享问题1. 同一个Tomcat容器中部署多个Web项目,COOKIE能在多个Web项目中共享吗?答: 默认情况下COOKIE不能共享。但是可以通过setPath(String path) 设置COOKIE的访问范围,默认情况下,设置当前的虚拟目录。* 如果需要共享,可以将path设置为"/" 2. 不同的tomcat服务器间COOKIE能共享吗?答:也是可以的,但是需要设置访问域名。setDomain(String path)如果设置一级域名相同,那么多个服务器之间COOKIE可以共享setDomain(".baidu.com")那么tieba.baidu.com和news.baidu.com中COOKIE可以共享COOKIE的路径限制取自第一次访问的资源路径前缀只要以这个前缀开头(包括子级路径)可以获取到,反之获取不到

Session

1.HttpSession介绍

HttpSession:服务器端会话技术

  • 本质也是采用客户端会话管理技术。客户端保存的是一个特殊的标识,而共享的数据保存到服务器端的内存对象中。每次请求时,会将特殊标识带到服务器端,根据这个特殊标识来找到对应的内存空间,从而实现数据共享
  • 是Servlet规范中的四大域对象之一的会话域对象
  • 作用:实现数据的共享

第一次请求的时候,服务器会创建一个带有id的Session的对象,然后服务器会把session的id以COOKIE的形式发送给客户端,第二次请求的时候根据id判断是否是同一个session对象,从而实现数据共享。

2.HttpSession常用方法

public void setAttribute(String name,Object value)设置共享数据
public Object getAttribute(String name)获取共享数据
public void removeAttribute(String name)移除共享数据
public String getId()获取唯一标识名称
public void Invalidate()让session立即失效

3.HttpSession的获取

HttpSession实现类对象是通过HttpServletRequest对象来获取。

public HttpSession getSession()获取HttpSession对象
public HttpSession getSession(boolean create)获取HttpSession对象,未获取到是否自动创建

4.HttpSession的使用


  • SessionServletDemo01

@WebServlet("/sessionServletDemo01")
public class SessionServletDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取请求对象的用户名String username = req.getParameter("username");//2.获取HttpSession对象HttpSession session = req.getSession();//3.添加到共享数据session.setAttribute("username",username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

  • SessionServletDemo02

@WebServlet("/sessionServletDemo02")
public class SessionServletDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取HttpSession对象HttpSession session = req.getSession();//2.获取共享域的数据Object username = session.getAttribute("username");//3.响应给浏览器resp.getWriter().write(username+"");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

  • HttpSession的使用细节

-唯一标识的查看
-浏览器禁用Cooike方式一:通过提示信息告知用户,大部分网站采用的解决方式(推荐)方式二:访问时拼接jsessionid标识,通过encodeURL()方法重写此地址(了解)-钝化和活化钝化:序列化活化:反序列化

JSP

1.JSP介绍


  • JSP:是一个动态网页技术标准
  • JSP部署在服务器上,可以出来客户端发送的请求,并根据请求内容动态的生成HTML、XML或者其他格式文档的web网页,然后响应给客户端
  • JSP是基于java语言的,它本质介绍Servlet

2.JSP的执行过程

1. 当客户端发送请求访问服务端的`index.jsp`页面
2. 服务器内部会把`.jsp`文件翻译成`.java`文件
3. 再编译`.java`文件生成`.class`文件,
4. 由字节码完成请求与响应的操作(其实这个字节码就是Servlet)

在这里插入图片描述

3.JSP语法


  • JSP注解

<%--注释内容--%>

  • java代码块

<% java代码 %><%System.out.println("hello jsp"); //输出到控制台out.println("hello jsp"); //输出到页面
%>

  • JSP表达式

<%&#61;表达式%><%&#61;"hello"%>

  • JSP声明

如果加&#xff01; 代表的是声明的是成员变量

如果不加&#xff01; 代表的是声明的是局部变量

<%!声明变量或者方法%><%! String s &#61; "abc";%>
<%&#61;s%> //输出结果

4.JSP指令

JSP指令是用来设置与整个JSP页面相关的属性。主要关注3个指令page、include、tablib

page指令&#xff1a;用来设置jsp页面的字符集、MIME响应类型、导入Java包等
include指令&#xff1a;用于在当前jsp页面中引入静态或动态资源
tablib指令&#xff1a;引入第三方标签库&#xff0c;也可以是自定义标签(先了解&#xff0c;后面讲)

  • page指令

<%&#64; page 属性名&#61;属性值 属性名&#61;属性值...%>

<%--设置响应MIME类型,以及编码--%>
<%&#64; page contentType&#61;"text/html;charset&#61;utf-8" language&#61;"java" %>
<%--导入Java包--%>
<%&#64; page import&#61;"java.util.ArrayList" %>
<%--设置jsp页面编码--%>
<%&#64; page pageEncoding&#61;"utf-8"%>
<%--当页面发生错误时跳转到指定的error.jsp错误页面--%>
<%&#64; page errorPage&#61;"error.jsp"%>

下面我们创建一个JSPDemo2.jsp页面&#xff0c;但是因为该页面有异常&#xff0c;需要跳转到一个错误页面error.jsp

定义JSPDemo2.jsp页面&#xff0c;使用ArrayList集合获取元素时产生一个异常

<%&#64; page contentType&#61;"text/html;charset&#61;utf-8" language&#61;"java" %>
<%&#64; page import&#61;"java.util.ArrayList" %>
<%&#64; page pageEncoding&#61;"utf-8"%>
<%&#64; page errorPage&#61;"error.jsp"%>
<html>
<head><title>JSP脚本</title>
</head>
<body><%ArrayList list&#61;new ArrayList();list.get(0);%>
</body>
</html>

定义error.jsp页面

<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" %>
<%--表示该页面为异常页面&#xff0c;并且在页面中可以使用exception对象--%>
<%&#64; page isErrorPage&#61;"true" %>
<html>
<head><title>异常页面</title>
</head>
<body><h1>页面走丢了...关爱留守儿童</h1><img src&#61;"img/error.jpg" width&#61;"800" height&#61;"500">
</body>
</html>

  • include指令

    <%&#64;include file &#61; 包含的页面%>

    include 指令用于引入其他文件中的内容&#xff0c;使其合并到当前 JSP 页面&#xff0c;这些引入的文件可以是 JSP 页面、HTML 页面、文本文件或是一段 Java 代码。

    下面我们把date.jsp页面引入到include.jsp页面中

    定义定义date.jsp页面

    <%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" %>
    <html>
    <head><title>Title</title>
    </head>
    <body><%SimpleDateFormat simpleDateFormat &#61; new SimpleDateFormat("yyyy年MM月dd日--HH时mm分ss秒");Date date &#61; new Date();out.println(simpleDateFormat.format(date));%>
    </body>
    </html>

    定义include.jsp页面

    <%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" %>
    <html>
    <head><title>JSP指令</title></head><body><h1>include指令引入 动态date.jsp资源</h1>当前时间为&#xff1a;<%&#64;include file&#61;"date.jsp"%>
    </body>
    </html>

  • taglib指令

    可以引入外部标签库

<%&#64;taglib url&#61;标签库地址 prefix&#61;前缀名称%>

5.九大隐藏式对象

在jsp页面中有9个内置对象&#xff0c;这些对象不需要创建可以直接使用&#xff0c;与Servlet中使用到的相关对象对象。

变量名真实类型作用
pageContextPageContext当前页面共享数据,获取其他8个内置对象
requestHttpServletRequest一次请求访问的多个资源共享数据(请求转发)
reponseHttpServletReponse响应对象
sessionHttpSession一次会话的多个请求间共享数据
applicationServletContext所有用户间共享数据
pageObject当前Servlet对象&#xff08;this&#xff09;
outJspWriter输出对象把数据输出到页面上
configServletConfigServlet的配置对象
exceptionThrowable异常对象

重点掌握个对象request&#xff1a; 请求对象response&#xff1a; 响应对象out&#xff1a;字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似response.getWriter()和out.write()的区别&#xff1a;* 在tomcat服务器真正给客户端做出响应之前&#xff0c;会先找response缓冲区数据&#xff0c;再找out缓冲区数据。* response.getWriter()数据输出永远在out.write()之前

6.四大域对象


域对象名称范围级别备注
PageContext页面范围最小&#xff0c;只能在当前页面用因范围太小&#xff0c;开发中用的很少
ServletRequest请求范围一次请求或者当前请求转发用请求转发之后&#xff0c;再次转发时请求域丢失
HttpSession会话范围多次请求数据共享时使用多次请求共享数据&#xff0c;但不同的客户端不能共享
Servletcontext应用范围最大&#xff0c;整个应用都可以使用尽力少用&#xff0c;如果对数据有修改需要做同步处理

PageContext对象

  • 是jsp独有的&#xff0c;Servlet没有
  • 是四大域对象之一的页面域对象&#xff0c;可以操作其他三个域对象中的属性
  • 可以获取其他八个隐式对象
  • 生命周期随着jsp的创建而存在&#xff0c;随着jsp的结束而消失&#xff0c;每个jsp页面都有一个PageContext对象

MVC模型

1.JSP的演变


  • 在早期JavaEE开发是没有JSP技术的&#xff0c;只有使用Servlet往浏览器输出HTML标签和内容数据。在Java代码中拼接HTML代码非常痛苦。
  • 后来有了JSP技术&#xff0c;简化了Servlet的开发。可是又延伸出另一个问题&#xff0c;在HTML页面中嵌套了过多的Java代码&#xff0c;不利于阅读和维护。
  • 为了解决Java代码和HTML代码耦合性强的问题&#xff0c;JavaWeb项目开发引入了MVC开发模式&#xff0c;从而把页面展示和业务逻辑分离。采用MVC模式让程序设计更加合理。

2.MVC介绍

MVC它只是一种开发设计原则&#xff0c;并不是新的技术。MVC只是用来指导我们改善应用程序的结构&#xff0c;从而得到更好的开发和维护效率。

MVC是Module、View、Controller三个单词的缩写&#xff0c;也叫MVC三层模型&#xff0c;每一层负责完成不同的工作。

Module(模型层): 模型层用于封装数据&#xff08;JavaBean对象&#xff09;&#xff0c;和一些业务逻辑处理。
Controller(控制层): 它控制着数据的流向1.先接受用户的请求数据2.将数据交给模型层处理3.将处理后的数据交给视图层
View(视图层):视图层用于展示数据

在这里插入图片描述


推荐阅读
  • ByteCTF 2019 WriteUp Kn0ck
    ByteCTF 2019 WriteUp Kn0ck ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • 目前正在做毕业设计,一个关于校园服务的app,我会抽取已完成的相关代码写到文章里。一是为了造福这个曾经帮助过我的社区,二是写文章的同时更能巩固相关知识的记忆。一、前言在爬取教务系统 ... [详细]
  • \\w+([-+.&amp;#39;]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*if(string.IsNullOrEmpty(Tex ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • springboot基于redis配置session共享项目环境配置pom.xml引入依赖application.properties配置Cookie序列化(高版本不需要)测试启 ... [详细]
author-avatar
mobiledu2502869373
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有