Servlet:session和Cookie、MVC设计模式、三大域对象

30 篇文章 0 订阅
6 篇文章 0 订阅

Servlet:session和Cookie、MVC设计模式

1.@WebServlet注解的作用

相当于在web.xml中配置了servlet的元素中的的配置,而且

它继承了HttpServlet类之上,属于类级别的注解

2.Cookie对象

2.1 Cookie解决了什么问题。

① 服务端决定哪些数据是其他请求要是用的公共的请求数据

② 服务端以响应的方式通知浏览器将公共的请求数据存储起来,存在浏览器

③ 浏览器再次发送请求时需要携带公共的请求数据

2.2总结:

① 服务端决定哪些数据是其他请求要使用的公共的请求数据

② 服务端以响应的方法通知浏览器将公共的请求数据存储起来,存在浏览器端

③ 浏览器再次发送的新的请求中需要携带公共请求即可。

2.3特点:

①Cookie是浏览器端的数据存储技术。

②浏览器会以请求数据的方式将Cookie存储的数据发送给服务器端使用。

③Cookie不适合大量数据的缓存。

④不安全,不适合存储重要的数据到浏览器端。

2.4 Cookie的创建和设置以及响应

//创建Cookie对象存储要让浏览器缓存的数据,一个Cookie对表明一组键值对 Cookie cookie=new Cookie(“uname”,uname); 默认将Cookie数据存储到浏览器的内存中,浏览器关闭Cookie数据即销毁 除非设置了Cookie的有效期 注意: 设置了有效期后,Cookie信息被浏览器存储在客户端的硬盘中。 cookie.setMaxAge(2436003);//设置Cookie的有效期,秒为单位被浏览器存储缓存的Cookie信息默认在访问同一个项目的时候就会被浏览器以请求数据的方式携带。除非设置了Cookie的有效路径。 cookie.setPath("/01_cookie_war_exploded/aa");//设置Cookie的有效路径//响应Cookie到浏览器 resp.addCookie(cookie);

2.5 Cookie数据的获取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekRzn09U-1599046228039)(E:\有道云图片\qq433A8C57C88B51E6DF4A4B18D16012EA\7b0b8722145649a4a7465da9f6e37dcc\clipboard.png)]

Cookie[] cookies = req.getCookies();

​ if(cookies!=null){

​ for(Cookie cookie:cookies){

​ String name = cookie.getName();

​ String value = cookie.getValue();

​ System.out.println(“Cookie数据为:”+name+"="+value);

​ }

​ }

3.HttpSession对象

创建

HttpSession session = req.getSession();

存储数据

session.setAttribute(“user”,user);

使用:

session.setAttribute(String name,Object value);session对象可以缓存任意类型的 数据。此语句可以重复使用,一次存储一组键值对数据。

获取数据

session.getAttribute(“user”);

使用:

session.getAttribute(“存储的数据的键名”);返回值类型为Object,需要手动强制 转换。如果获取的数据不存在,返回null.

特点:

①如果请求中携带session的ID,并且后台session没有被销毁,则会将session对 应的session对象返回。

②如果请求中没有携带session的ID,则重新重建一个新的session对象返回。

③如果请求中带有session的id,但是session对象被销毁了,则重新创建新的session 对象返回。

session的销毁方式有哪些

① 通过web.xml文件指定超时时间

② 通过HttpServlet对象中的invalidate()方法销毁当前HttpServlet对象

③ 还有就是用户关闭浏览器

4.session和Cookie的比较

① cookie不安全,而session安全

② cookie数据存在在客户端,session在服务器端,所以也会占用服务器资源

③ 单个cookie保存的数据不能超过4k,很多浏览器都限制一个域名保存cookie的数量,session没有数量的限制

④ Cookie的数据都以字符串的形式保存,session中可以保存对象信息

⑤ Session会在一定时间内保存在服务器上,当访问增多会占用服务器的性能

5.MVC设计模式

作用:

① 降低代码的冗余,提升代码的重用性。

② 提升代码的阅读性。

使用:

C:控制层(程序的入口层): com.bjsxt.controller

M:逻辑层(业务层):com.bjsxt.service

M:数据库层(持久层):com.bjsxt.mapper

M:实体类层:com.bjsxt.pojo

V:视图层:一般由Jsp的页面组成

6.ServletContext

ServletContext对象,又名:application对象

特点:

① ServletContext对象由TOMCAT服务器在启动加载项目的时候即完成创建。

② ServletContext对象一个项目只有一个,任意方式的获取获取到的都是同一个。

③ ServletContext对象中缓存的数据是多用户共享的。

① 获取ServletContext对象

//方式一: ServletContext servletContext = this.getServletContext(); //方式二: ServletContext servletContext1 = req.getSession().getServletContext(); //方式三: ServletContext servletContext2 = req.getServletContext();

② 使用ServletContext对象缓存数据

//将数据缓存早ServletContext对象中

servletContext.setAttribute(“str”,“哈哈,ServletContext对象好棒哦~!”);

//获取ServletContext对象的缓存数据

String str = (String) servletContext.getAttribute(“str”);

③ ServletContext对象获取编译目录下的资源绝对路径(web目录下)

String realPath = servletContext.getRealPath("/image/a.png");

④ ServletContext对象获取编译目录下的资源的流对象(web目录下)

servletContext.getResourceAsStream("/1.txt");//编译根目录下

	  servletContext.getResourceAsStream("/files/1.txt");//子目录下

InputStream is = servletContext.getResourceAsStream("/1.txt");

BufferedReader bufferedReader=new BufferedReader(

new InputStreamReader(is,“utf-8”));

String s = bufferedReader.readLine();

⑤ 使用类加载器获取编译目录下的classes目录下的资源的流对象(classes目录下)

InputStream is2 =

​ ServletContextServlet.class.getClassLoader().getResourceAsStream("/2.txt");

BufferedReader bufferedReader2=new BufferedReader(

new InputStreamReader(is2,“utf-8”));

⑥ 使用ServletContext对象获取web.xml文件的全局配置参数

​ 一个context-param可以配置一组键值对数据,可以配置多组。

​ filename

​ 1.txt

​ filename2

​ 1.txt

7.ServletContext对象生命周期

当容器启动时会创建ServletContext对象并一直缓存该对象,直到容器关闭后该对象生命周

期结束。ServletContext对象的生命周期非常长,所以在使用全局容器时不建议存放业务数

据。

8.三大域对象

Request域 对应 HttpServlettRequest对象 也叫请求域

Session域 对应 HttpSession对象 也叫会话域

Application域 对应 ServletContext对象 也叫应用域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值