一:Servlet细节
01.Servlet的映射细节

1):一个Servlet程序(WEB组件),可以配置多个<utl-patternt>,表示一个Servlet有多个资源名称2):一个Servlet程序,可以配置多个<servlet-mapping>.3):<rul-patternt>必须保证唯一性,而且必须使用/打头.4):Servlet的映射支持通配符映射( * :表示任意字符);第一种:  /*,任意的资源都可以访问该Servlet. /system/*:请求的资源必须以/system/打头才可以访问,Servlet中,权限控制:第二种:  *.拓展名.比如: *.do,请求的资源必须以.do作为结尾才可以访问该Servlet.5):在映射Servlet的时候,<servlet-name>元素的文本内容不能是default.因为的tomcat中存在一个叫做default的Servlet,专门用于处理请求静态资源(html,css,js,图片等).在Tomcat根/conf/web.xml文件:6):localhost会默认访问URL为localhost/index.html的静态页面,所以只需要设置web.xml文件中的文件即可:<welcome-file-list><welcome-file>hello.html</welcome-file></welcome-file-list>*/

02.Servlet3.0新特性–注解配置

问题:如果Servlet有N个,就得配置10*N行代码,web.xml文件,臃肿,不利于维护,开发效率低,从Tomcat7开始,可以使用注解(WebServlet)来取代XML配置.使用注意:在Web.xml文件的根元素中,存在属性,表示是否忽略扫描WEB组件注解:metadata-complete="true" :  要忽略metadata-complete="false"   不忽略不要改属性:   缺省情况等价于metadata-complete="false" Servlet代码:@WebServlet(value="/m1",loadOnStartup=1,initParams={@WebInitParam(name="encoding",value="UTF-8"),@WebInitParam(name="name",value="miao")}
)使用配置,可以使用XML文件也可以使用注解:问题XML和注解各自的优缺点是什么,怎么选择?XML:优点:XML配置很清晰,很直观,因为和JAVA代码相分离,维护性较高.缺点:XML配置导致配置文件臃肿,开发效率较低.注解:优点:开发效率高,配置文件不臃肿,也方便快速定位.缺点:和java代码耦在一起,维护性较低.抉择:一般的在企业中,现在注解使用的非常之多,而我们做开发,XML文件用于做通用配置.个别配置使用注解来.学习阶段:先学XML配置,再讲注解配置.

03.服务器启动就初始化Servlet

回顾Servlet生命周期方法的执行流程:在启动Tomcat服务器的时候,没有Servlet创建和初始化操作.在第一次服务端请求的时候:1):创建Servelt对象.2):调用init方法做初始化.3):调用servlet方法,处理请求.如果某一天,某一个Servlet(核心Servlet:初始化全局信息)需要在启动服务器的时候就创建出来,怎么办web.xml中的<servlet></servlet>的配置信息添加://在启动服务器的时候就加载,值越小越优先加载//<load-on-startup>1</load-on-startup>此时该Servlet,会在服务器启动的时候,创建好对象,并做好初始化操作.使用注解:上面的注解有说到.比如:在Strutst中的核心Action其本质就是Servlet,既然核心的Action是用来处理所有请求的,就应该在服务器启动的时候,就初始化,而不是第一个请求过来,才初始化

04.Servlet线程不安全问题

    造成的根本原因是:Servlet是单例的,Servlet中的非static的成员变量只有一份,多个客户端好比是多个线程,都访问的是同一个空间.解决方案:   1:让当前的Servlet实现javax.servlet.SingleThreadMode接口.包装只有一个线程放Servelt,如果有多个线程就排队,如此的话,性能超低(已过时).2:在Servlet中不要使用成员变量,使用局部变量.每一个用户,每一个请求都会调用service方法.而局部变量在service方法中,每一次都是新的空间.Struts1,Spring MVC都是线程不安全的,都是单例的和Servelt类似.Struts2是线程安全的,每一个线程(请求),都是一个新的Action对象.

二:Http协议无状态带来的问题

05.HTTP协议的无状态连接

一次会话:可以简单的理解:打开浏览器,访问某一个站点,在该网址内部查看信息,点击超链接等相关的操作,最后关闭浏览器的整个过程,称为一次会话.HTTP协议:        有一个特点:无状态连接,服务端不知道上一次是哪一个客户端请求了自己.无状态连接带来的问题:            再一次会话中,我们可以查看多个资源,每一个资源都会先发送请求,再响应,每次的请求都是客户端            发出的,但是,HTTP是无状态的,它不知道上次是谁请求了自己            也就是说,再一次会话中,多个请求之间无共享数据.![邮箱的会话跟踪图示](https://img-blog.csdn.net/20180217153707769?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwMTYxNzA4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

06.使用参数传递机制解决用户会话跟踪

解决方案:1)使用参数传递机制,在每一个请求之间使用参数来传递需要共享的数据.http://localhost/param/list?username=lucy可以解决问题,但是请求需要共享的数据全部都暴露在浏览器的地址栏中,不安全.如何解决共享数据不暴露在浏览器的地址栏:为什么会在浏览器的地址栏显示.因为:请求的请求行数据:GET/param/list?username=lucy Http/1.1如何解决:共享的数据不会在请求头中出现.把共享数据存放到请求头中,此时就不会在浏览器地址栏出现了.--->(Cookie)2):CookieCookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的资源去,这样,web资源处理的就是用户各自的数据了.3):Session

三:Cookie

07.Cookie的简单运用

Cookie的操作:1:创建Cookie对象.Cookie cookie = new Cookie(String name,String value);参数:name: 该当前Cookie取一个唯一的名字.value:存储在Cookie的共享数据,只能是String类型.Cookie cookie = new Cookie("currentName","will");2:把Cookie放入响应中,响应给浏览器,把共享的数据存储到浏览器中.resp.addCookie(cookie);3:获取Cookie以及获取Cookie中的数据.因为Cookie存在请求头中,所以应该通过request去获取.Cookie[] cs = req.getCookies();4:Cookie的中文问题.在Cookie中属性名和属性值都不能使用中文.//编码String name = URLEncoder.encode(msg,"UTF-8");System.out.println(name);//解码String str = URLDecoder.decode(name,"UTF-8");System.err.println(str);5:修改Cookie中指定属性名的属性值.需求:修改Cookie cookie = new Cookie("currentName","will");          方式1:创建一个同名的新的Cookie.Cookie c = new Cookie("currentName","lucy");方式2:获取该Cookie对象,通过setValue方法,重新设置新的value值.Cookie对象.setValue("新的值");注意:别忘了,重新把该Cookie放入响应中:resp.addCookie(c);6:Cookie的分类(会话Cookie和持久化Cookie):会 话Cookie:关闭浏览器之后,Cookie就销毁了.  缺省情况.持久化Cookie:Cookie可以保存指定的时间段(3天,一周,一个月).设置Cookie的最大存活时间:cookie对象.setMaxAge(int seconds);seconds == 0;   删除Cookie.seconds <  0;   会话Cookie.seconds >  0;   存储指定的秒数7:删除Cookie:  cookie对象.setMaxAge(0);

8.Cookie的路径和Cookie的缺陷

    Cookie的domain:1):设置Cookie的path为"/". 列如:cookie.setPath("/");2):设置Cookie的domain. 列如:cookie.setDomain(".baidu.com").其中domain中没有指定域名前缀!Cookie的缺陷:1):多个人使用同一台电脑的时候,可以查看浏览器的Cookie,不安全.2):Cookie存储中文比较麻烦(得编码再解码).3):Cookie的value是String类型,一个Cookie就只能存储一个数据,如果需要存储多个数据,就得使用N个Cookie4):一个站点对Cookie有限制:Cookie大小限制在4KB之内:一台服务器在一个客户端最多保存20个Cookie;一个浏览器最多可以保存300个Cookie;5):在设计上就有问题,考虑生活中问题.Cookie是浏览器和服务器之间数据交互的凭证.在生活中,我们是把识别数据存储到服务端.

四:Session

9.Session的原理

    Session其本质就是一个会话Cookie(浏览器关闭之后,Session就失效了).![Session的原理图](http://img.blog.csdn.net/2018021720193186?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwMTYxNzA4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

10.Session的简单运用

1:创建和获取Session对象.HttpSession session = req.getSession(true);如果当前请求中存在一个Session对象,就直接返回,如果不存在Session对象,就先创建一个再返回.HttpSession session = req.getSession(false);如果当前请求中存在一个Session对象,就直接返回,如果不存在Session对象,就返回null.HttpSession session = req.getSession();  等价于:  HttpSession session = req.getSession(true);2:往Session中存储数据Session对象.setAttribute(String name,Object value);3:从Session中取出数据.Object value = session对象.getAttribute(String key);4:删除Session.(用户注销登录)1):删除Session中指定属性名的值.session对象.removeAttrbute("currentName");2):销毁Session对象(Session中所有的属性都不存在).session对象.invalidate();5:Session的超时管理在超时时间之内,如果客户端和服务端没有交互(用户的两次操作不能超过该时间),则自动销毁Session.session对象.setMaxInactiveInterval(60*10);//超过10分钟,则销毁SessionTomcat服务器的默认时间为:30分钟  可以修web.xml文件中的代码<service-config><session-timeout>15</session-timeout></session-config>6:URL重写.Session是一种特殊的Cookie,而浏览器可以禁用Cookie.此时,需要在每一个资源之后,手动的携带session的ID./session/list;jsessionid=3FB3D48B84806A040F03B070F7DAE56AString url = response.encodeURL("/session/list");自动在资源之后拼接;jsessionid=3FB3D48B84806A040F03B070F7DAE56A注意:开发中都不会取消接受Cookie的.

11.Session的规范和细节

Session的细节:1:一般的,我们存储到Session中的属性名称,要唯一,我们习惯XXX_IN_SESSION;session对象.setAttribute("user_in_session","will");2:若需要把多个数据存放到Session中,就得调用setAttribute方法N次,可以的.一般的我们把需要存储的数据,封装成一个对象,然后存储到Session中.3:如果多台服务器之间需要共享Session,此时Session中的对象必须实现java.io.Serializable(才能在网络上传输).序 列 化: 把对象信息存储为二进制.反序列化:把二进制信息恢复成对象.

Cookie,Session解决用户的会话跟踪问题相关推荐

  1. JavaWeb-WEB核心7 会话技术 理解什么是会话跟踪技术掌握Cookie的使用掌握Session的使用(钝化、活化)完善用户登录注册案例的功能

    会话技术 今日目标 理解什么是会话跟踪技术 掌握Cookie的使用 掌握Session的使用 完善用户登录注册案例的功能 1,会话跟踪技术的概述 对于会话跟踪这四个词,我们需要拆开来进行解释,首先要理 ...

  2. 会话跟踪技术,Session和Cookie详解

    知识的广度来自知识的深度,学习如果不成体系那是多可怕的一件事儿,希望我们在未来的学习道路上坚守初心,不要给自己留下遗憾,以自己喜欢的方式生活,做自己喜欢做的事,宠爱自己,做一个独一无二的自己! 对于文 ...

  3. 【Servlet】Session会话跟踪技术

    Session Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案. HttpSession对象是javax.servlet.http.Http ...

  4. Servlet - 会话跟踪

    Servlet 标签 : Java与Web 会话跟踪 HTTP本身是"无状态"协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连 ...

  5. java跟踪会话_JavaWeb会话跟踪

    cookie和session是常用的会话跟踪技术 cookie机制 1.web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议,一旦数据交换完毕就会关闭链接.Cookie可以弥补HTT ...

  6. [Java Web]会话跟踪技术

    ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:@逐梦苍穹 ⭐所属专栏:Java Web 目录 1.会话跟踪技术概述 2.数据共享 3.Cookie 4.Sess ...

  7. JWT(解决前后端分离和微服务的用户会话跟踪问题)

    这里写目录标题 JWT:解决前后端分离和微服务的用户会话跟踪问题 与传统sessio验证的区别: 基于 token 的鉴权机制 JWT的主要引用场景及优点 JWT的构成: JWT搭建 案例: JWT: ...

  8. (JavaWeb)会话跟踪技术Cookie和Session(重点)

    文章目录 Cookie和Session 会话 保存会话的两种技术 Cookie 实现显示上次访问时间 Session Session的使用 session实现购物车功能 Cookie和Session ...

  9. java 会话跟踪技术_JavaEE基础(04):会话跟踪技术,Session和Cookie详解

    一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操作结果才能和登录用户做关联. 2.概念简介 可以把会话理解 ...

最新文章

  1. 只需一行代码,你的纯文本秒变Markdown
  2. python库datetime的使用
  3. 【Vue】Vue1.0+Webpack1+Gulp项目升级构建方案的踩坑路
  4. sublime text 3设置快捷键让html文件在浏览器打开
  5. Spring集成MyBatis框架
  6. 机器学习 KNN算法_0 丐版(matlab实现)
  7. P2278 [HNOI2003]操作系统
  8. 生成颜色代码的 Java程序
  9. 关于解决工作中的自动化环境搭建的解决方案(序)
  10. I.MX6 Linux Serial Baud Rate hacking
  11. 华为面试题算什么,这个背会了外企随便进
  12. qt 获取用户缩放_Qt-如何创建随窗口缩放并保持纵横比的图像?
  13. 关于文件中的0D、0A
  14. python动态创建字典_如何在Python中创建动态命名字典?
  15. bin/arm-linux-androideabi-nm: libtinfo.so.5: cannot open shared object file: No such file or directo
  16. nmake comment
  17. 重庆市打造集感知、分析、指挥“五位一体”的智慧城管系统
  18. Autodesk Eagle入门之-线宽操作
  19. 文字记录而已!!人民币直充/兑换PayPal美金
  20. 纵向联邦线性模型在线推理过程中成员推断攻击的隐私保护研究

热门文章

  1. Java并发编程:从源码分析几道必问线程池的面试题?
  2. 错误记录(二)java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误时的原因及解决办法
  3. Java多线程学习十四:Lock 有哪几个常用方法?分别有什么用?
  4. yum安装elasticsearch慢_Elasticsearch客户端工具之ESHead
  5. JVM学习-垃圾回收器
  6. Spring Bean的实例化时机与ApplicationContext中单例bean的延迟初始化
  7. Phonetics: Lecture Three 语音 第三课 Teacher:Patrick
  8. Python菜鸟快乐游戏编程_pygame(4)
  9. 求1-50的偶数和,和奇数和
  10. spring boot中的注解