文档章节

JSP内置 对象(下)

c
 chuiyuan
发布于 2014/06/08 09:01
字数 1359
阅读 108
收藏 3
点赞 0
评论 2

一。session对象 

     功能 :有页面保持的功能 ,当访问网站 时,服务 器端已经给他分配 了一个session对象 ,对于这个用户,不管在那么页面,只要他访问 session 对象 ,都是同一个。我们也可以用数据库(购物功能),但是对服务器的消耗会很大

1. 如何使用 session 开发购物车 

  将内容放入购物车

void session.setAttribute (String name ,Object obj );

如果 name相同 ,就会覆盖之前的内容。集合,数据结构对象都可以放入session 中。

读取购物车中的内容 

Object session.getAttribute(String name);

如果 session 里面放了很多内容 ,怎么取出呢?我们可以用

Enumeration session.getAttributeNames( );

得到session 中所有 的属性的名称 ,再由名称得到内容 。

例子:

<%
		ArrayList books = new ArrayList();
		books.add("大学物理");
		books.add("语言");
		books.add("数学");

		session.setAttribute("books", books);
	%>

	<a href="MyJsp1.jsp">查看购物车</a>

MyJsp1.jsp中

<%
		ArrayList books = (ArrayList) session.getAttribute("books");

		for (int i = 0; i < books.size(); i++) {
			String book = (String) books.get(i);
			out.println(book + "<br>");
		}
	%>

2.session进阶 

   移除 session 中的内容 

void session.removeAttribute (String name);

移除 session 中的全部内容 

void session.invalidate();

问题,从session中得到一个集合,从集合中删除 一个数据 ,但是这个集合没有放回到session 中,那session 中的内容 会发生变化 吗?

会,因为集合ArrayList 是一个引用对象 ,和books指的是同一个内存。

session 内容初始化的技巧

例如,用一个表单提交书本放入购物车中,

<form action="MyJsp2.jsp" method="post">
		请您输入书本名:<input name="book" type="text">
		 <input type="submit"	value="添加到购物车">
	</form>
	<hr>

	<%
		//向session 中存放 一个集合 
		ArrayList books = new ArrayList();
		session.setAttribute("books", books);
		//获得书名
		String book = request.getParameter("book");
		if (book != null) {
			book = new String(book.getBytes("ISO-8859-1"));
			//将book加入 到集合中
			books.add(book);
		}
	%>

	购物车中的内容是:
	<br>
	<%
		for (int i = 0; i < books.size(); i++) {
			out.println(books.get(i) + "<br>");
		}
	%>

每次我们输入 点击 后,会发现之前 的记录没有了,这是因为,每次页面运行都 会有一个新的实例 化的ArrayList 放在 session 里面。解决办法 

//向session 中存放 一个集合 
		ArrayList books = (ArrayList) session.getAttribute("books");
		if (books == null) {
			books = new ArrayList();
			session.setAttribute("books", books);
		}

sessionId

    当一个客户访问不同的页面时,他都有一样的sessionId ,原理是:

    当第一次访问的时候 ,服务器就给session分配 了一个 sessionId ,并且让客户端用 Cookie 保存了这个 sessionId ,客户端访问下一个页面时,又将

这个 sessionId传送 给服务 器,服务 器由这个 sessionId 找到前一个页面用的  session  的对象 。

我们可以用下面的方法得到现在的 sessionId :

String session.getId();


3. session的其它 应用

利用session保存登录信息

   我们在登录后,会访问很多页面,在访问这些页面的过程 中,别的页面怎么知道我们的帐号呢,我们可以把信息保存在session 中。

<form  action ="MyJsp2.jsp"  method ="post">
   请输入您的帐号:<input name ="account"  type ="text"><br>
   请输入您的密码 : <input name ="password"  type ="password"> <br>
   <input type="submit"   value="登录">
   </form>

	<%
		//获得帐号和密码 
		String account = request.getParameter("account");
		String password = request.getParameter("password");
		if (account != null) {
			if (account.equals(password)) { //如果 帐号与密码 一样,表示成功
				//将account 放入 session 转入另外 一个页面
				session.setAttribute("account", account);
				response.sendRedirect("MyJsp1.jsp");
			}
		}
	%>

jsp1 中的代码 是

<body>
	
 欢迎<%= session.getAttribute("account") %>来到系统
 <hr>
 请进行下面的操作:。。。

但是,如果我们直接 访问第二个页面,就会出现 欢迎null访问的情况 ,不对,我们应该在第二个页面中加入 session 的检查。如果 session 中的account 为 null,

则跳转到第一个界面 。

<%
	if (session.getAttribute("account")==null){
	response.sendRedirect("MyJsp2.jsp");
	}
	 %>

由于 在很多页面中都 要有这个功能 ,我们可以用include 。其实还可以使用  过虑器。

利用session传值

几种传值方法对比 

URL 简单,配合链接使用 内容显示示浏览器地址栏
隐藏表单 简单,配合表单使用 内容显示于客户端源码
Cookie 保存于硬盘 ,信息能够持久化 内容显示于Cookie文件
session 安全 服务 器任务重

将要保存的变量值保存在服务 端的session 内,在客户端访问面面 2 的时候 ,只要从服务 器中读取 session 就可以了。在客户端看不到的传递值 相关的信息。


二。application 对象 

      application 对象 ,对于不同的客户端来说,服务 器端的对象是相同的。

实际中要用到的地方 :

在一个系统中,显示当前在线的用户名单 ,在所有 的客户端上都能显示 ,也可以说,对所有 客户都是共享 的,这个 时候 ,我们可以将当前 在线的名单 存在application 对象 中。

当一个服务 器启动后,就会自动 创建 一个application 对象 ,直到服务 器关闭时为止。

1 。将内容放到 application 中

void application.setAttribute ( String name ,Object obj) ;

2. 读取一个application 中的内容 

Object application.getAttribute (String name );

3. 将内容 从application 中移除 

void application.removeAttribute (String name );

4. application 可以直接获得当前 工程资源 在服务 器硬盘 上的物理路径 

方法为

application,getRealPath("资源在项目中的虚拟路径 ");

下面的例子得到项目根目录 在服务 器硬盘上的物理路径 

<%
String realPath = application.getRealPath("/");
out.println(realPath);
 %>

输出为

D:\Program Files\tomcat\webapps\proj02\

这个 功能 在文件上传 等时候会用到。








© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
加载中

评论(2)

c
chuiyuan
嗯 ,谢谢,我也现在是在着急学习下这个 的
Neoman
Neoman
个人觉得,这两篇文字,不够深刻,仅仅是描述现象,没有说原理,说到对象,那他的模板:类,是哪个呢
servlet/jsp基础复习

servlet就是一个普通的Java类,类对象由服务器(容器)创建,实现请求,响应交互数据。 实现第一个servlet继承HTTPservlet重写doget,dopost方法。其实servlet执行处理请求时候都会调用父类s...

hello_hp
2017/10/20
0
0
JSP 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明
04/18
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
07/16
0
0
浅谈ServletContext 与application的异同

servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承Servlet的关系GenericServlet类...

小欣妹妹
2017/11/01
0
0
Tomcat如何与Servlet对象进行交互

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上...

KeepMoving
2015/03/09
0
0
Java面似宝典--Java Web(JSP、Servlet、各常用框架SSH、MyBatis等)

1、什么MVC模式?说说你对MVC的理解。 2、工作中经常用到的框架有哪些?它们各自的优缺点是什么? 3、说说Struts、Spring中的设计模式。 4、拦截器和过滤器两者的区别是什么? 5、简述一下,...

瓜子葫芦侠
2014/03/26
0
0
Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet 对象。可以配...

ArlenXu
2015/01/24
0
0
Tomcat Error Page配置

如果JSP页面出现异常,就会转到tomcat自动的那个异常页面,页面不怎么友好。jsp标准中提供了error page的配置,可以自己定义当出现错误时跳转到哪个页面。这个配置在web.xml里面进行配置,下...

凯文加内特
2014/08/12
0
0
重温JSP学习笔记--三大指令九大内置对象

最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记:   JSP三...

冬至饮雪
2016/01/26
0
0
JavaEE细节问题04——Servlet细节问题

1.<url-patten>的优先级问题 大家都知道,在web.xml中可以通过配置<servlet>和<servlet-mapping>来让一个servlet真正跑起来,而让服务器通过URL定位到 具体serlvet的标签就是通过<url-patten......

Lunqi
2015/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
刚刚
0
0
python上传文件

//注意 <form action="/login/" method="post" enctype="multipart/form-data"> f=request.FILES.get('fafa') ff=open(f.name,mode='wb') for i in f.chunks(): ff.write(i) ff.close()......

南桥北木
12分钟前
0
0
CISCO VPN Client Reason 442 WIN8/10错误解决方案

http://jdkleo.iteye.com/blog/2163493 引用 http://my.oschina.net/cloudcoder/blog/220391?p={{currentPage 1}} 在使用cisco VPN 客户端登录时,产生Reason 442:Failedto enable Virtual......

chenfj_fer
16分钟前
0
0
信号量有没有容量限制?

之前一直误以为信号量初始化的时候那个初始化的值是信号量的“容量”,昨天同事指出了我的错误,最初我是不相信的,经过以下代码实践,证明了我的错误: Java版: import java.util.concurr...

锟斤拷烫烫烫
19分钟前
0
0
【RocketMQ】Message存储笔记

概述 消息中间件存储分为三种,一是保存在内存中,速度快但会因为系统宕机等因素造成消息丢失;二是保存在内存中,同时定时将消息写入DB中,好处是持久化消息,如何读写DB是MQ的瓶颈;三是内...

SaintTinyBoy
31分钟前
0
0
Android应用Context详解及源码解析

Android应用Context详解及源码解析 本文定位:优质文章收集 本文转载 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android的Context到底是啥的问题,所以就马...

lichuangnk
今天
0
0
PostgreSQL的昨天今天和明天

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。 这个起源于伯克利(...

闻术苑
今天
1
0
Mysql对自增主键ID进行重新排序

1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_nam......

niithub
今天
0
0
福利篇:免费csdn vip账号分享

分享一个发布免费csdn vip账号的网站:啰嗦vip www.lostvip.com , 各种软件开发类的视频教程:慕课网、动脑学院、黑马各大培训机构VIP视频教程,非常不错!

在水一方发盐人
今天
0
0
Nginx+Tomcat搭建高性能负载均衡集群

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目标   实现高性能负载均衡的Tomcat集群:    三、 步骤   1、首先下载Nginx,要下载稳定版:      2、然后解压两个Tom...

码代码的小司机
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部