zoukankan      html  css  js  c++  java
  • Jsp数据交互1

    一、JSP内置对象
        jsp内置对象,是指可以不加声明和创建就可以在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量。
    分别为:request、response、session、application、out、pagecontext、config、page、exception
    二、request
        用来与客户端交互用,在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
        或者说客户端的请求内容存放在request里。
     (1)常用方法:
    1.String getParameter(String name);根据表单名称获取数据
     request.getParameter(“password”) 获取名字为“password”的标签的值,只能获取单个值。
     
    2.String[ ] getParameterValues(String name) 用法同上,但是会获取所有符合条件的值,可能会获取多个 

    3.void setCharacterEncoding(String charset),制定请求的编码例如:
       request.setCharacterEncoding("utf-8");
    此方法为 “POST” 方式提交时使用
    使用“GET”提交时编码方式为
    // 读取用户名和密码String name = request.getParameter("name");
    // 对请求数据进行字符编码
    name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
    或者直接在sever.xml 设置端口处添加 URIEncoding="UTF-8" 

    4.RequestDispatcher getRequestDispatcher(String path),返回一个RequestDispatcher对象,执行转发时使用
    例如: 
    RequestDispatcherrd=request.getRequestDispatcher("Sys/aa.jsp");
    rd.foward(request,response);

    5.void setAttribute(key,val) / Object  getAttribute(key)
    set方法为设置键值对为参数,get方法为根据键获取值。

    (2)request 转发
    RequestDispatcherrd=request.getRequestDispatcher("Sys/aa.jsp");
    rd.foward(request,response);
    注意:转发是服务器行为。
              转发时,浏览器url地址栏不变
              转发前后的request是共享的,是同一个request。
              转发只能转发web项目内的地址,web项目外的不可转发。 

    三、response 重定向
    response.sendRedirect("http://baidu.com");
    注意:重定向时客户端行为。
              重定向后,浏览器url地址发生改变
              重定向后的数据不共享,但是可以用拼接url("aa.jsp?a=10")的方式来传递参数。
              重定向可以看做是两次request,因此速度较慢,request为第一选择。

    四、Session会话(基于Cookie实现)
        一个会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程。
        session将用户的信息写入用户独占的session中,在同一个浏览器中,每个网站用户都有一个独立的session.并且一个浏览器独占一个session, 举例:
        (1)登录京东账号后,关闭京东页面,再次打开京东页面仍然是登录状态,但是点击淘宝页面,及时账号密码相同但仍然不会登录。表明session每个web项目用户都会有一个独有的session.
        (2)用360登录京东后,再用谷歌打开京东你发现仍然需要登录,表明每个浏览器独占一个session,即使是相同的网站仍然会是不同的session.
    session在实际使用过程中的流程。
         session创建时间:session在用户连接上网站时就会创建。
         session销毁时间:session销毁时间有两种,第一种使用代码主动销毁,第二种session的生命周期到了会自动销毁,因此仅仅关闭浏览器并不会销毁之前的session,再次打开浏览器需要重新登录仅仅是因为session是重新生成的罢了,一个新的session,里面没有存储相关信息所以需要重新登录。 
        综上所述:session在用户连接web应用时由服务器端创建,之后会session的id号,以cookie的形式回写给客户端(浏览器),服务器发现当客户端带着session id 过来就会根据id查找内存中对应的session为之服务。 
        session的数据保存在内存中(当然也可以通过代码使其持久化) 

     
    Session常用方法

    每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象(不同版本浏览器可能有所差别)

    通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

     
     关于session失效
    手动设置失效:invalidate()

    超时失效

    通过setMaxInactiveInterval( )方法,单位是秒
    <%session.setAttribute("login","admin");
    session.setMaxInactiveInterval(600);
    response.sendRedirect("admin.jsp");%>

    通过设置项目的web.xml或Tomcat目录下的/conf/web.xml文件,单位是分钟<session-timeout>10<session-timeout>

    五、include指令
    将session的验证指令单独写入一个jsp,文件然后可以重复引用
    <%String login = (String) session.getAttribute("login");
    if (login == null) {
    response.sendRedirect("index.jsp");
    return;
    } %>
        在后台首页面中使用include指令引用登录验证文件
    <%@ include file="loginControl.jsp" %>   

    六、补充
        一般来说,除了跳转登录及跳转Web项目之外的页面需要重定向,其余情况用转发为首选。
        1.转发速度快,url地址栏不变,可以遮掩项目文件路径,所以转发首选,但不能转发到Web项目之外的地址
        2.跳转登录时需要清空request,而且请求内容简单,所以直接用重定向。 

  • 相关阅读:
    重建二叉树
    替换空格
    四种类型转换符
    KVC和KVO简单介绍
    多线程之GCD的理解
    iOS常用代码
    iOS开发一些经常用到的第三方框架
    AS3 about Array.splice()
    sharedobject
    FlashBuilder的快捷键
  • 原文地址:https://www.cnblogs.com/chuliuxiang/p/11124347.html
Copyright © 2011-2022 走看看