`
然并卵-277
  • 浏览: 19481 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

四种会话跟踪技术比较及应用场景 9种JSP的隐式对象

    博客分类:
  • web
阅读更多

1.什么是会话 、会话跟踪 ?为什么需要会话跟踪?

1.1 客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话
1.2 对同一个用户对服务器的连续的请求和接受响应的监视称之为会话跟踪
1.3 浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才应会话跟踪技术来实现这种要求


2.举例阐述四种会话跟踪技术的特点,应用场景

2.1 URL传递参数
          URL重写的技术就是在URL结尾添加一个附加数据以标识该会话,把会话ID通过URL的信息传递过去,以便在服务器端进行识别不同的用户
形式: url?参数名=值&参数名=值

2.2 隐藏表单域
          将会话ID添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示

2.3 使用Cookie
        Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用
      
保存在客户端的
永久性Cookie 设置了有效时间的,就是永久性的
     会以文件的形式保存在浏览器的临时文件夹中

临时性Cookie 当客户端关闭之后,Cookie就没有了
    只是保存在浏览器的缓存中

2.4 使用会话对象session
          每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。
session的默认失效时间是30分钟
在web.xml中可以配置session的失效时间
<session-config>
  <session-timeout>10</session-timeout>
  </session-config>
         创建过程:

         当第一次请求服务器的时候,在服务器中会自动创建Session对象,
服务器在响应时,会将Session对象的ID通过临时Cookie的方式响应给浏览器

浏览器在以后的请求过程中,都会先获取临时Cookie中的SessionID,
在请求过程中,会带上SessionID一起发送给服务器

服务器收到请求后,会先判断SessionID是否存在,
           如果不存在,说明是第一次请求
如果存在,证明这次请求和上次请求是同一个浏览器发送的

如果有多个浏览器同时请求服务器,服务器会根据SessionID找到对应的浏览器
 
        两次请求判断是否来自同一个会话/是同一个sessionid [只要之前的窗口不关闭]
       一个浏览器 两个窗口 一个会话 都是从同一个缓存中取数据  -->一样的
        两个浏览器 两个窗口 两个会话


2.5 四种会话跟踪技术比较及应用场景

通过URL重写地址传递参数 它可以把会话ID编码在URL中,即使浏览器禁用了cookie也可以实现会话跟踪
隐藏表单域 非常适合需要大量数据存储的会话应用
Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值 通过cookie保存在浏览器缓存。通过名值对保存在浏览器中 ,可以设置cookie的过期时间属性来指定cookie的有效期。当下次浏览器发出请求时,会检索其保存的cookie。应用于自动登录、记录浏览过的商品。同时由于只能保存在浏览器的文本中,容易泄露个人信息,有时用户会禁用掉cookie

隐藏域和URL重写有着共同的优点:
它们在Cookie被禁用或者根本不支持的情况下依旧能够工作。
缺点:
所有页面必须是表单提交之后的结果,还有涉及许多冗长的处理工作。


3.Cookie与Session的区别

a、cookie是保存在浏览器缓存当中的,而session是保存在服务器中的。
b、cookie比session不安全,可能会被用户禁用。
c、cookie可以设置有效期,没到有效期之前会一直存在浏览器缓存中.
   临时性Cookie存在浏览器的缓存中,关掉浏览器,会清空.
   永久性Cookie是存在临时文件中,到达有效期前,一直存在
    而session在关闭浏览器之后就会被清空。

  //URL
 <form action="updateInfoChat.jsp?id=1" method="post">
 </form>
 //隐藏表单域
 <form action="updateInfoChat.jsp" method="post">
 <input type="hidden" name="userid" value=1/>
 </form>
 

            //URL 与 隐藏表单域 获取提交数据的方法一样
            String id=request.getParameter("id");   


           //创建Cookie对象
    	   Cookie cookieName=new Cookie("userName",userName);
    	   cookieName.setMaxAge(60*60);
    	   //将Cookie对象响应给客户端
    	   response.addCookie(cookieName);
    	   
    	   //创建Cookie对象
    	   Cookie cookiePwd=new Cookie("password",password);
    	   cookiePwd.setMaxAge(60*60);
    	   //将Cookie对象响应给客户端
    	   response.addCookie(cookiePwd);


      String cuserName="";
      String cuserPwd="";
      //获得Cookie中的数据
      Cookie[] cookies=request.getCookies();
      if(cookies!=null){

       for(int i=0;i<cookies.length;i++){
    	   String name=cookies[i].getName();
    	  if(name.equals("userName")){
    		   cuserName=cookies[i].getValue();
    	   }
    	   if(name.equals("password")){
    		   cuserPwd=cookies[i].getValue();
    	   }
    //  System.out.println(cookies[i].getName()+"< > "+cookies[i].getValue());
       }
   }



          session.setAttribute("user",userName);

 //Object 强制转型为String
 String userName2=(String)session.getAttribute("user");



4.JSP的隐式对象[9个]


4.1  用来数据共享的对象:[存储数据]  [容器对象]
pageContext:   在本页共享数据/数据的可用范围在本页
request:        在同一次请求响应过程中共享数据
session:        在同一个会话中共享数据 [不关闭浏览器]
application:  在应用程序运行期间共享数据[不关闭服务器]

page是代表与一个页面相关的对象和属性。一个页面有一个编译好的Java Servlet类(可以带有任何的include指令,但是没有include动作)表示。这既包括servlet又包括被编译成servlet的JSP页面。

request是代表与Web客户机发出的一个请求相关的对象和属性,一个请求可能跨越多个页面,涉及多个Web组件  request保存在一次服务器请求范围内。request对象从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。用户可以通过html表单post方法、get方法或URL重写方法提交数据,然后通过request方法来获取这些数据。
(由于forward指令和include动作的关系)

session是代表与用于某个web客户机的一个用户体验相关的对象和属性。一个Web回话可以也经常会跨越多个客户机请求。session保存在一次会话范围内。session对象在浏览器第一次发送请求给服务器的时候创建,并且分配一个sessionID给浏览器,处理和保存这一次会话过程中用户的各种信息,直到它的生命周期被超过会被人为释放为止

application是代表与整个web应用程序想关的对象和属性,着实质上是跨越整个web应用程序,包括多个页面、请求和会话的一个全局作用域。


解释 request请求对象的应用范围  涉及include/forward 与重定向 的区别
----------------------------
include/forward 与重定向 的区别
include 转发 包含之前的页面 forward 转发 不包含之前的页面
1.URL改变 
2.重定向 重新发起一次请求  forward/include 同一次请求
-------------------------------
index.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%            
          //存储
          pageContext.setAttribute("pageContext",1);
          request.setAttribute("request",1);
          session.setAttribute("session",1);
          application.setAttribute("application",1);

          //在本页面获取
           Object obj=pageContext.getAttribute("pageContext");
         Object obj1=request.getAttribute("request");
         Object obj2=session.getAttribute("session");
         Object obj3=application.getAttribute("application");
%>

    pageContext:<%=obj %> <br/>
    request:    <%=obj1 %><br/>
    session:    <%=obj2 %><br/>
    application:<%=obj3 %><br/>
<%
    request.getRequestDispatcher("index2.jsp").forward(request,response);
  //response.sendRedirect("index2.jsp");
%>
</body>
</html>




没有转向其他界面



<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%            
         
         //在转发后的页获取
           Object obj=pageContext.getAttribute("pageContext");
         Object obj1=request.getAttribute("request");
         Object obj2=session.getAttribute("session");
         Object obj3=application.getAttribute("application");
%>

         这里是index2.jsp的数据 <br/>
          pageContext:<%=obj %> <br/>
          request:    <%=obj1 %><br/>
          session:    <%=obj2 %><br/>
          application:<%=obj3 %><br/>
<%
  request.getRequestDispatcher("index3.jsp").forward(request, response);
%>
</body>
</html>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%            
         
         //在转发后的页获取
           Object obj=pageContext.getAttribute("pageContext");
         Object obj1=request.getAttribute("request");
         Object obj2=session.getAttribute("session");
         Object obj3=application.getAttribute("application");
%>

      这里是index3.jsp的数据 <br/>
    pageContext:<%=obj %> <br/>
    request:    <%=obj1 %><br/>
    session:    <%=obj2 %><br/>
    application:<%=obj3 %><br/>

</body>
</html>


forward/include  转向其他界面



重定向转发



关闭浏览器 重新发起请求[另一次会话]



重启服务器




4.2  和Servlet有关的对象:
page: 指jsp页面本身    [page]==[this]
config: 用来存储jsp配置信息的对象

JSP与serlet一样都可以配置web.xml
web.xml 可以添加配置参数 [切换数据库时 不更改代码]
/aa  经过web.xml  参数有值 url 不经过web.xml 参数无值


<servlet>
  	<servlet-name>aa</servlet-name>
  	<jsp-file>/index5.jsp</jsp-file>
  	<init-param>
  		<param-name>className</param-name>
  		<param-value>oracle.jdbc.driver.OracleDriver</param-value>
  	</init-param>
  	<init-param>
  		<param-name>url</param-name>
  		<param-value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</param-value>
  	</init-param>
  	<init-param>
  		<param-name>user</param-name>
  		<param-value>scott</param-value>
  	</init-param>
  		<init-param>
  		<param-name>pwd</param-name>
  		<param-value>tiger</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>aa</servlet-name>
  	<url-pattern>/aa</url-pattern>
  </servlet-mapping>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
              这个是index5.jsp!    
<%
	String className = config.getInitParameter("className");
	String url = config.getInitParameter("url");
	String user = config.getInitParameter("user");
	String pwd = config.getInitParameter("pwd");
%>   

<%=className %> <br/>
<%=url %> <br/>
<%=user %> <br/>
<%=pwd %> <br/> 
</body>
</html>








4.3  与输入输出有关的对象:
out 向浏览器输出信息
request:包含请求信息
response:包含的响应信息

4.4 和异常处理有关的对象
exception 用来处理异常的对象
定义错误页面              -->才有exception对象
<%@ page isErrorPage="true" %>

如果页面需要处理异常
<%@ page errorPage="error.jsp"%>







  • 大小: 17.1 KB
  • 大小: 17.8 KB
  • 大小: 19 KB
  • 大小: 18.9 KB
  • 大小: 19.3 KB
  • 大小: 21 KB
  • 大小: 22.4 KB
1
1
分享到:
评论

相关推荐

    JavaWeb程序设计入门课件JSP隐式对象共8页.pdf

    2. JSP隐式对象的应用场景: - request对象:处理用户的表单提交,获取POST或GET方式传递的参数。 - session对象:用于实现用户登录状态的保持,例如记录用户信息,防止非法访问。 - application对象:存储全局...

    jsp学习笔记

    jsp隐式对象是jsp技术的核心之一,jsp隐式对象是指在jsp页面中可以直接使用的java对象,这些对象都是jsp引擎提供的,jsp隐式对象共有九大对象,分别是: 1. request对象 2. response对象 3. pageContext对象 4. ...

    JSP 经典之作 通讯录

    本项目"JSP 经典之作 通讯录"是针对JSP技术的一个实践应用,通过创建一个通讯录系统来学习和展示JSP的核心概念。 **JSP 隐式对象** 是JSP为我们预先定义好的九个内置对象,无需显式声明即可在页面中直接使用。它们...

    jsp认证题库

    - **应用场景:** JSP技术广泛应用于企业级应用的开发,特别是在Java EE平台上。通过结合HTML、CSS、JavaScript以及Java代码片段(Scriptlets),JSP页面能够动态生成HTML内容,并与服务器端的Java代码无缝集成。 ...

    JSP & Servlet 深入剖析

    #### JSP隐式对象 - **隐式对象**:JSP提供了多个预定义的隐式对象,这些对象无需显式声明即可直接使用。常见的隐式对象包括: - `out`:用于向客户端输出数据。 - `request`:封装了HTTP请求的信息。 - `...

    Jsp期末考试卷子

    5. **JSP隐式对象**:“context”并不是JSP的一个隐式对象,JSP的隐式对象包括`page`, `pageContext`, `request`, `response`, `session`, `application`, `out`, `config`, `exception`等,它们由JSP容器自动提供,...

    基于jsp网上书店(源代码+论文)_毕业设计.zip

    2. **Servlet与JSP的交互**:JSP和Servlet的关系,如何通过JSP隐式对象如request、response、session等与Servlet进行通信。 3. **MVC设计模式**:理解模型-视图-控制器模式在Web应用中的应用,JSP作为视图,Servlet...

    Servlet+JSP

    - **使用场景**:EL表达式广泛应用于JSP页面中,用来代替复杂的脚本元素,提高代码的可读性和维护性。 - **运算符**:EL支持多种运算符,如点运算符、方括号运算符等。 - **变量获取**:EL表达式可以轻松地从不同...

    java JSP Servlet试题 带答案

    - **解析**: `page` 是 JSP 中的隐含对象之一,它指向当前页面的 JSP 对象。 #### 18. 如果不希望在 JSP 页面中存取 HTTP 会话,应该如何设定 page 指令?(选择 1 项) - **选项**: A. `”disabled”%&gt;` B.`”...

    J2EE学习笔记

    - **Session配置**:通过`*" %&gt;`开启session支持,如果设置为`session="false"`,则无法使用隐式对象`session`。 - **请求控制器结构(RequestController)**:这是一种设计模式,用于处理HTTP请求并转发给相应的处理...

    基于Java的Web开发技术实验大纲

    本实验大纲旨在让学生掌握基于Java的Web开发技术,包括Java集合框架、JDBC数据库编程、JSP语法、Servlet技术、JavaBean、EL表达式语言、JSTL标签库、MVC设计模式、XML操作、Ajax工作原理、jQuery基本操作以及Web服务...

    JSP+JDBC实现登录注册

    在IT领域,JSP(JavaServer Pages)和JDBC(Java Database Connectivity)是两种非常重要的技术,常用于构建动态Web应用程序,尤其是涉及到用户交互和数据库操作的场景,如登录和注册功能。本教程将深入讲解如何利用...

    jsp的session介绍

    然而,在实际的Web应用开发中,维护用户会话状态是非常重要的,特别是在需要跟踪用户行为、购物车内容或登录状态等场景下。为了解决这一问题,引入了Session的概念。 #### Session与HTTP的无状态性 Session是一种...

    EL表达式子

    3. **隐式对象**:EL定义了一系列隐式对象,可以直接使用,如`pageContext`,它可以访问JSP隐式对象,如请求、响应、会话等。此外,还有`param`和`paramValues`对象,分别用于获取请求参数的单个值和数组。 ### ...

    Session技术

    在Web开发领域,Session技术是用于跟踪用户状态的一种常见方法,尤其是在Java Web应用程序中。当用户在网站上浏览时,服务器需要识别并记住这些用户,以便为他们提供个性化的服务或者保持登录状态。这就是Session...

    EL表达式详解+实例教程

    ### EL表达式详解及实例教程 #### 一、EL表达式概述 EL(Expression Language)表达式是一种简单且功能强大的表达式语言,它被设计用于在JavaServer Pages (JSP)中方便地访问JavaBean属性以及执行基本运算。通过学习...

    EL表达式详解

    除了上述两种常用的隐式对象之外,还有四种范围相关的隐式对象: - **pageScope**:表示页面范围内的变量。 - **requestScope**:表示请求范围内的变量。 - **sessionScope**:表示会话范围内的变量。 - **...

    jsp简单实现页面之间共享信息的方法

    无论是在服务端通过JSP隐式对象进行数据传递,还是利用前端框架和库实现数据的共享,开发者都需要注意数据的安全性和效率问题。通过本文提供的方法和实例,可以帮助开发者更加高效和安全地在JSP页面之间传递和共享...

Global site tag (gtag.js) - Google Analytics