JSP的四种作用域与九大内置对象

JSP的四种作用域与九大内置对象JSP的四种作用域与九大内置对象

大家好,又见面了,我是你们的朋友全栈君。

四种作用域

JSP的四大作用域:page、request、session、application

  • page(本页面):代表变量只能在当前页面上生效。
  • request(两个页面之间):代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
  • session(服务端和客户端交互期间):代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
  • application(ServletContext:服务器开启与关闭期间):代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。

九大内置对象

在这里插入图片描述JSP的九大内置对象:page、config、application、request、response、session、out、exception、pageContext。
JSP九大内置对象分为四类:

输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象
名称 对象 类型 作用域 解释
page 页面 Objext page 指向了当前jsp程序本身。相当于this。
session 会话 HttpSession Session 用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
config 配置 ServletConfig page 封装了应用程序的配置信息
application 应用程序 ServletContext Application 代表了当前应用程序的上下文。可以在不同的用户之间共享信息
request 请求 httpServletRequest Request 封装了来自客户端、浏览器的各种信息
response 响应 httpServletResponse page 封装了服务器的响应信息
out 输出 JspWriter page 用于向客户端、浏览器输出数据
exception 异常 Throwable page 封装了jsp程序执行过程中发生的异常和错误信息
pageContext 页面上下文 PageContext page 提供了对jsp页面所有对象以及命名空间的访问

简单介绍

  • page 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

  • session 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

  • config 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

  • application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

  • request 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。

  • response 对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。

  • out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

  • exception 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage=”true “%>”的JSP文件中使用。

  • pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。
    常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
    一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

其他介绍

  • HTTP是无状态(stateless)协议
    无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。 个人简单理解,就是服务器记不住你。

  • 如何解决无状态
    Cookie和Session有以下明显的不同点:
    在这里插入图片描述
    1)Cookie将状态保存在客户端,Session将状态保存在服务器端;
    2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;
    3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;
    4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些。因为它不会任意读取客户存储的信息。

  • 转发和重定向
    需要带对象的需求,用转发,如果只需要带简单的字符串,选用重定向。
    重定向是客户端行为,转发是服务端行为。
    重定向是发送两次请求,转发只发送一次请求。
    重定向会更改地址栏路径,转发不会更改地址栏路径。
    代码:

      // 域名重定向
      response.sendRedirect("dvd");
      //请求转发
      request.getRequestDispatcher("add.jsp").forward(request, response);
    

    存值:

         //将值放求session 会话中
          HttpSession session = request.getSession();
          session.setAttribute("obj", JavaObj);
          //将值放入请求中
          request.setAttribute("msg", "添加失败,请重新添加!!!");
    

    取值:

     //取request域中的值
          //jsp取值
          <%
               String msg=request.getParameter("msg");
               out.println("接收到:"+msg);
          %>
          //js取值
          <script>
              //获取后端设置的值  javascript方式获取
               var msg=document.getElementById("msg").value;
              //获取后端设置的值  jquery方式获取
               var msg=$("input[name='msg']").val();
          </script>
           //EL取值
           <div>
              <input type="hidden" name="msg" id="role" value="${msg}">
           </div>
            ${requestScope.msg}
            
     //取session域中的值
           //用struts标签获取:
           <s:property value="#session.sessionid"/>
           //session也是内置对象
           <%=request.getSession.getAttribute("sessionid");> 
           //EL语句
           ${sessionScope.sessionid}
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 维控PLC学习笔记

    维控PLC学习笔记维控PLC学习笔记目录:1.主要编程思想2.梯形图3.视频教程4.网站和论坛依旧采用我多年的凌乱记忆法:感觉PLC就像一个处理函数的集成电路设备,我用的是老师给的维控PLC官网介绍说它很牛逼,可以兼容三菱FX系列而且比三菱快,价格也比三菱便宜。(这波抄袭很稳),因为我老师有一个公司是做工业包装机的,所以我这里有很多传感器可以使用。最近研究了…

    2022年9月25日
    0
  • Over Permission(越权)学习「建议收藏」

    Over Permission(越权)学习「建议收藏」OverPermission(越权)用户A的权限小于用户B的权限,此时用用户A的权限去操作用户B的数据,如果能够操作成功,就称之为越权操作。越权漏洞一般容易出现在权限页面(需要登录的页面)增、删、改、查的地方。越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。当用户对权限页面内的信息进行增、删、改、查的操作时,后台对当前用户的权限进行校验,看是否具备操作的权限,从而给出响应。如果校验规则过于简单,就容易出现越权漏洞。防止越权漏洞1、使用最小权限原则对用户进行赋权;2、使用

    2022年6月22日
    22
  • c# List去重

    c# List去重需求:对List集合中的元素去重。实现:有三种方式可以使用-使用Linq中distinct()方法-借助hashset-使用for循环遍历,这种方法在数据量大时,运行速度比较慢代码示例使用distinct()//使用distinct()List<string>lst1=newList<string>(){“as”,”lio”,”sdrf”,”asd”,”lio”};varr.

    2022年5月9日
    308
  • sql server修改默认端口号(win10系统)

    sql server修改默认端口号(win10系统)引用自:sqlserver、mysql、oracle各自的默认端口号:https://www.cnblogs.com/chenyanlong/p/7753018.htmlsqlserver2012更改默认的端口号为1772:https://blog.csdn.net/sxf359/article/details/75723412文章目录A,修改前测试连接B,开始修改默认端口A,修改前…

    2022年10月21日
    0
  • 前端报502 bad gateway的原因及解决方案

    前端报502 bad gateway的原因及解决方案502BadGateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。解决办法是:再刷新一下网页或清理一下电脑的缓冲文件在打开你想打开的网页就好了.一般情况下,这种办法是行得通的,但也不排除你所访问的网页被屏蔽的可能,如果你所访问的网页被屏蔽的话,就不管你怎么刷新也是没用的了。1.什么是502badgateway报错简单来说502是报错…

    2022年9月13日
    0
  • 短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」

    短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」“比特币又跳水了。”  “那还有回暖的机会吗?”  最近这段时间,相信因为数字货币价格集体跳水而感到恐慌的,不止是炒币的投机客,还有大量“矿工”。  在过去一年多时间里,区块链逐渐变为人人热议的亲民话题,“挖矿”也成为很多人热议的火爆职业。甚至有金融界、互联网公司金领不惜放弃高薪,转型成为比特币“矿工”。  在过去的大半年时间里,比特币等数字货币也经历过几次不同程度的震荡。在遭遇价格上的大起大落之…

    2022年5月6日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号