• java web复习(二)


    三、四种属性范围及应用

    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() 取得所有属性名称
    我这些随笔是自己复习用的,有错轻喷。
  • 相关阅读:
    为什么要用getBaseContext()方法代替this?(转)
    如何让EditText不能自动获取焦点(转)
    context和getApplicationContext()的区别
    Idea 破解
    mysql 免安装
    AngularJS
    GC垃圾回收机制
    JVM类加载机制
    线程池
    面试-数据库
  • 原文地址:https://www.cnblogs.com/zhu-zhucai/p/8407280.html
Copyright © 2020-2023  润新知