三、四种属性范围及应用

setAttribute(String name,Object o)设置属性

getAttribute(String name)根据属性名取得属性

removeAttribute(String name)根据属性名删除属性

(一)session

session范围为同一个浏览器有效。每一个浏览器连接到服务器后实际上都表示自己的session属性,所以打开一个新的浏览器无法取得以前打开的浏览器的sessions属性。

session是javax.servlet.http.HttpSession接口的实例化对象,所以session只能用在Http协议中

常用方法

            方法 用途
String getId() 取得session id
long getCreationTime() 取得创建session 时间
long getLastAccessedTime 取得最后一次操作session时间
bollean isNew() 判断是否为新session
void invalidate() 让session失效
Enumeration getAttributeNames() 得到全部属性名

注意:session的生命周期是可以修改的

session应用

1、网页重写

网址重写是一种Session追踪技术,需要将一个或多个token作为一个查询字符串添加到URL中。Token的格式一般是键=值:

url?key1=value1&ke2=value2

缺点:

(1)在有些web浏览器中,URL限制2000个字符。

(2)仅当有链接要插入值时,值才能转换成后面的资源。

(3)某些字符,例如空格、&符号及问号都必须进行转码。

(4)添加到URL中的信息隐蔽性不好。

(5)网址重写必须在服务器端有效。所有的链接都必须带有值,这样可能出现一个问题,即一个页面可能有许多个链接。

2、隐藏域

利用隐藏域来保持状态,与采用网址重写技术类似。将要传递的信息放在HTML表单的隐藏域中。当用户提交表单时,隐藏域中的值也传递到服务器端。只有当页面包含表单,或者可以在页面中添加表单时,才适合隐藏域。

优势:(1)能传递更多的信息。

(2)隐蔽性更好。

(3)传递的信息不需要进行编码。

3、cookie

网页重写和隐藏域都只适合于保持哪些不需要跨越许多页面的信息。如果这些信息需要跨越很多页面,这两种技术就变得很难实现,因为必须管理每一个页面的信息。cookie能解决网页重写和隐藏域都无法解决的问题。

那什么是Cookie呢?

Cookie是浏览器提供的一种技术,它可以热情服务端的程序将一些只须保存在客户端,或者在和客户端处理的数据放在本身使用的计算机中。(安全性很差)Cookie是自动在web服务器和浏览器之间来回传递的一小块信息。Cookie适用于跨越多个页面的信息。传输的过程由HTTP协议处理。每台Web服务器最多可以支持20个cookie。

Cookie的不足之处在于,用户可以通过修改浏览器设置来拒绝接收cookie。

要使用Cookie,必须熟悉javax.servlet.http.cookie类,以及HttpServletRequest和HttpServletResponse接口中的几个方法。

方法 描述
Cookie(String name,String value) 构造Cookie对象,同时设置名称和内容
String getName() 取得Cookie的名称
String getValue() 取得Cookie的内容
void setMaxAge(int expiry) 设置Cookie保存时间,单位s
void addCookie(C哦Okie cookie) 向客户端设置Cookie
Cookie[] getCookie() 取得客户端设置的全部Cookie

一个浏览器最多保存300个Cookie,要设置Cookie的保存时间才能真正在浏览器保存Cookie,系统会在每一个客户端访问服务器时自动设置一个Cookie

(二)page

只在一个页面内有效,跳转之后就无效了

在javax.servlet.jsp.PageContext的setAttribute(String name,Object o,int scope)方法还可以指定保存范围

public static final int PAGE_SCOPE              page属性范围,默认

public static final int REQUEST_SCOPE       request属性范围

public static final int SESSION_SCOPE         session属性范围

public static final int APPLICATION_SCOPE  application属性范围

(三)request

只在一次请求中保存,服务器跳转后有效(客户端跳转无效,如超链接跳转)

request是javax.servlet.http.HttpServletRequest接口的实例化对象,而HttpServletRequest是ServletRequest的子接口,所以查找request对象的方法时可一从这两个接口的方法中找

常用方法:

1 Sting  getParameter(String name) 取得参数内容
2 Sting[]  getParameterValues(String name) 取得一组参数的内容
3 Enumeration getParameterNames() 取得全部参数名称
4 void setCharacterEncoding(String env) 设置请求编码
5 HttpSession getSession() 取得sessin对象
6 StringBuffer getRequestUrl() 返回正在请求的路径
7 boolean isUserInRole(String role) 用户验证
8 Enumeration getHeaderNames() 获取全部头信息
9 String getHeader(String name) 根据名称获取头信息
10 String getMethod() 获取用户提交方式
11 String getServletPath() 获取访问路径
12 String ContextPath() 获取上下文
13 String getRemoteAddr() 获取客户端ip地址
                       方法       作用

一般还需要request.setCharacterEncoding("GBK")设置中文编码防止乱码

说到request那就必须说说response对象了

response

response是javax.servlet.http.HttpServletResponse接口的实例

常用方法:

方法 描述
void addCookie(Cookie cookie) 向客户端增加cookie
void serHeader(String name,String value) 设置回应头信息
void sendRedirct(String location)throws IOException 页面跳转

response.serHeader("refresh",3;URL=");//设置头信息名,3秒后跳转到指定的url(属于客户端跳转)

response.serHeader("refresh",3");//设置3秒刷新一次

response.setHeader("Set-Cookie","MLDN=www.wawawa.com");//设置Cookie

response.sendRedirct和<jsp:forward>的区别

response.sendRedirct属于客户端跳转,跳转后地址栏地址会改变,<jsp:forward>是服务端调转;而且在使用request属性时只有服务端跳转才能将request属性保存到跳转页;服务端跳转会在该跳转语句直接执行,客户端跳转则是在整个页面执行完后才跳转。

(四)application

在服务器上保存,所有用户都可以使用

application对象是javax.servlet.ServletContext接口的实例化对象,可以由getServletContext()方法代替

常用方法

方法 描述
StringgetRealPath(String path) 得到虚拟目录的绝对路径
String getContextPath() 取得当前虚拟目录的名称
Enumeration getAttributeNames() 取得所有属性名称

java web复习(二)的更多相关文章

  1. Java Web入门二

    Web应用服务器 供向外发布web资源的服务器软件. Web资源 存在于Web服务器可供外界访问的资源就是web资源.例如:存在于web服务器内部的Html.CSS.js.图片.视频等. 静态资源 w ...

  2. java web 学习二(Tomcat服务器学习和使用1)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  3. 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出

    如今B/S结构的系统使用Ajax技术是再平常只是的了.今天我们就来探讨下在JSPGenSDF第四版中:怎样使用Ajax技术.怎样输出XML文件及JSON格式数据输出. 怎样搭建一个最基础的JSPGen ...

  4. java IO复习(二)

    package com.zyw.file; import java.io.*; /** * Created by zyw on 2016/3/10. */ public class FileTest2 ...

  5. Java Web(十二) commons-fileupload上传下载

    今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务 ...

  6. Java Web(十二) JavaMail发送邮件

    发送邮件的原理 概叙 邮件服务器: 要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在 Internet 很多 提供邮件服务的厂商:sina.sohu.163 等等他们都 ...

  7. java基础复习二——面向对象一

    面向对象三大特性:封装,继承,多态 类:对象的蓝图,生成对象的模板,是对一类事物的描述,是抽象的概念上的定义 对象:是实际存在的该类事物的每个个体,也称为实例 类之间三种关系:依赖关系(uses-a) ...

  8. 2.14 Java web 复习总结

    1.空指针异常原因(NullPointerExceptio)之一: 在Dao层里边 声明 Connection conn = DBUtil.getConn(); //不能少 Statement sta ...

  9. Java Web高性能开发(二)

    今日要闻: 性价比是个骗局: 对某个产品学上三五天个把月,然后就要花最少的钱买最多最好的东西占最大的便宜. 感谢万能的互联网,他顺利得手,顺便享受了智商上的无上满足以及居高临下的优越感--你们一千块买 ...

随机推荐

  1. XML注入(XXE)

    XML所有元素都必须要有一个结束标志 大小写敏感 所有元素嵌套必须正确 所有的XML文档都必须要有一个根标志 XML包括XML声明,DTD文档类型定义(可选),文档元素 DTD即文档类型定义,用来为X ...

  2. MySQL和MySQL的注释方式

    MySQL的注释方式   mysql 服务器支持如下几种注释方式: (1) # 到该行结束     # 这个注释直到该行结束 mysql> SELECT 1+1; (2)-- 到该行结束     ...

  3. 如何实现从Java入门到服务端项目开发的进阶?

    对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而言,应该对于学习时间.目标和内容规划有一个清晰的定 ...

  4. Ubuntu 16下单机安装配置zookeeper和kafka

    网上其他的没有一个能直接照做完成的,我这个也是看了些帖子,整出来的怕以后忘记 建议连接工具:Bitvise SSH Client 一.安装配置zookeeper 下载zookeeper 3.4.13: ...

  5. 关于js中原生构造函数的继承

    前言 在如今快节奏的工作当中,很多基础的东西会渐渐地被丢掉.就如继承这个话题,写React的同学应该都是class xxx extends React.Component,然而这可以理解为es5的一个 ...

  6. hive 的map数和reduce如何确定(转)

    转自博客:https://blog.csdn.net/u013385925/article/details/78245011(没找到原创者,该博客也是转发)   一.    控制hive任务中的map ...

  7. Camp 前三日简单总结

    1.#include <bits/stdc++.h> 后面别再忘了写 using namespace std; 2.在#include <bits/stdc++.h> 中 可以 ...

  8. 玩了下opencv的aruco(python版)

    简单的玩了下opencv里头的aruco,用的手机相机,手机装了个 ip摄像头,这样视频就可以传到电脑上了. 首先是标定,我没打印chessboard,直接在电脑屏幕上显示,拍了17张,大概如下: 又 ...

  9. Makefile工程管理器及万能模板

    ​ Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的m ...

  10. LeetCode【112. 路径总和】

    思路就是从根节点开始向下选节点,依次与sum比较大小,若小,则向下选左右节点其中一个,若大,则接下来判断是否是叶子节点,若是,则返回false 若不是,则上一步选另一节点,再将上述重新执行. 对于叶子 ...