JSP中page,request,session,application四个域对象区别 以及常用cookie的理解

1、区别:

1.page指当前页面有效。只在当前这个jsp页面里有效
2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。只要不进行下一个请求就都有效
3.Session是用户全局变量,在整个会话期间都有效。只要浏览器不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中
4.application是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用

总结:当数据只需要在下一个forward(下一个跳转页面)有用时,用request就够了; 若数据不只是在下一个forward有用时,就用session。上下文,环境信息之类的,用application。

当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如: p a g e S c o p e . u s e r i n f o 表 示 访 问 p a g e 范 围 中 的 u s e r i n f o 变 量 。 { pageScope. userinfo}表示访问page范围中的userinfo变量。 pageScope.userinfo访pageuserinfo{requestScope.userinfo}表示访问request范围中的userinfo变量

2 举例说明

1 page

page里的变量没法从index.jsp传递到test.jsp,只要页面跳转了,它们就不见了。

参考详解:https://jingyan.baidu.com/article/3aed632ed033d1701080910d.html
总之只在当前的页面有效,别的页面一律无效

2 request

request 指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。

jsp如何将数据放在request作用域中?在jsp中把输入标签放到form标签里,然后体检form表单,自动就到request
后端如何将数据放在request域中呢

 @RequestMapping("/hello1")
protected ModelAndView handleRequestInternal() {
    ModelAndView mv = new ModelAndView();
    mv.addObject("currentUser","admin");
    mv.setViewName("hello");//设置要跳转的视图名也会通过视图解析器解析
    return mv;
}

@RequestMapping("/hello2")
protected String hello2(HttpServletRequest request) {
    request.setAttribute("currentUser","admin");
    return "hello";//通过视图解析器调转到对应的hello.jsp页面
}

 @RequestMapping("/hello3")
    protected String hello3(Map<String,String> map) {
        map.put("currentUser","admin");
        return "hello";
    }

前端页面如何取出放在request中的数据呢

  1,el表达式:<% String test = request.getAttribute("test")%>
  2,jstl:${test }或${requestScope.test}因为直接是默认先取request域中的数据,所以可以省略requestScope.

放在request中的值在后端中如何取出呢?

request.getAttribute("test");

3 session

session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。

可以直接在jsp页面中将我们要保留的值放入session域中

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method=POST action="Session.jsp">
请输入用户名: <input type=text name="name"> <input type=submit
value="提交信息">
</form>
<!-- session设置值 -->
<%
String name = request.getParameter("name");


session.setAttribute("name", name);
String names = (String) session.getAttribute("name");
%>
您的用户名是:<%=names%>
</body>
</html>

这时候这个name的值你就拿到了并放在了session中,便可以操作这个session回话了

后端如何将数据放入session中

public String  login(String name,HttpServletRequest request,HttpServletResponse response,String remember)
{
request.getSession().setAttribute("name", name);
return ''login"
}

放在session中的值在前端中如何取出呢?

 1,el表达式:<%String test = request.getSession().getAttribute("name") %>
 2,jstl:${sessionScope.name } 

放在session中的值在后端中如何取出呢?

request.getSession().getAttribute("name");

4 application

application的范围在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。

cookie

cookie是存在浏览器文件中的数据,与浏览器相关
后端具体使用方法

//cookie的操作:
        String str=genRandomString(4);
        //写cookie(cookie的名称与值)
        Cookie cookie=new Cookie("yanzhengma",str);
 
        //过期时间
        cookie.setMaxAge(10000);
 
        //只允许服务端读取
        cookie.setHttpOnly(true);
 
        //保存cookie到客户端
        response.addCookie(cookie);
 
        // 设置生命周期为0,表示将要删除
        cookie.setMaxAge(0);
        // 执行添加后就从response里删除了
        response.addCookie(cookie);
 
        //读取cookie
        Cookie[] cookies = request.getCookies();
        for(Cookie ck:cookies){
            System.out.println(ck.getName()+"="+ck.getValue());
        }

前端如何取cookie中的数据
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值