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失效
手动设置失效: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,而且请求内容简单,所以直接用重定向。