jsp实现数据传递和保存
get与post区别
比较项 | Get | post |
---|---|---|
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
request对象
作用
处理客户端请求
方法
方法名称 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
示例
代码语言:javascript复制<%
//读取用户名和密码
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
……//HTML页面
//读取复选框选择项
String[] channels = request.getParameterValues("channel");
if (channels != null) {
for (String channel : channels) {
out.println(channel);
}
}
%>
内置对象
请求对象:request 输出对象:out 响应对象:response 应用程序对象:application 会话对象:session 页面上下文对象:pageContext 页面对象:page 配置对象:config 异常对象:exception
解决字符集编码问题
post方式
代码语言:javascript复制<% // 以POST方式提交数据时
// 设置读取请求信息的字符编码为UTF-8
request.setCharacterEncoding("UTF-8");
// 读取用户名和密码
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
%>
get方式1
代码语言:javascript复制<% // 以GET方式提交数据时
// 读取用户名和密码
String name = request.getParameter("name");
// 对请求数据进行字符编码
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
%>
get方式2
代码语言:javascript复制在Tomcat目录结构confserver.xml中设置字符集
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
/>
response对象
作用
响应客户请求并向客户端输出信息
方法
void sendRedirect(String location)//重定向,客户端将重新发送请求到指定的URL
重定向与转发
转发
作用
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递
特点
客户端浏览器的地址栏不会显示转向后的地址
举例
代码语言:javascript复制request.getRequestDispatcher("welcome.jsp").forward(request, response);
重定向
作用
重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向
特点
在地址栏中可以显示转向后的地址
举例
代码语言:javascript复制response.sendRedirect("welcome.jsp");
session对象
定义
一个会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程
常用方法
方法名称 | 说明 |
---|---|
String getId() | 获取sessionid |
void setMaxInactiveInterval(int interval) | 设定session的非活动时间 |
int getMaxInactiveInterval() | 获取session的有效非活动时间(以秒为单位) |
void invalidate() | 设置session对象失效 |
void setAttribute(String key, Object value) | 以key/value的形式保存对象值 |
Object getAttribute(String key) | 通过key获取对象值 |
void removeAttribute(String key) | 从session中删除指定名称(key)所对应的对象 |
注意点
1.每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象(不同版本浏览器可能有所差别) 2.通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
举例
代码语言:javascript复制<%
if ("admin".equals(name) && "admin".equals(pwd)) { // 如果是已注册用户
session.setAttribute("login", name);
// 设置session过期时间
session.setMaxInactiveInterval(10*60);
request.getRequestDispatcher("admin.jsp").forward(request, response);
} else {
response.sendRedirect("index.jsp");
}
%>
<%
String login = (String) session.getAttribute("login");
if (login == null) {
response.sendRedirect("index.jsp");
return;
} %>
关于失效
手动设置失效:
session.invalidate()
超时失效
1.通过setMaxInactiveInterval( )方法,单位是秒
session.setMaxInactiveInterval(600);
代码语言:javascript复制<%
session.setAttribute("login","admin");
session.setMaxInactiveInterval(600);
response.sendRedirect("admin.jsp");
%>
2.通过设置项目的web.xml或Tomcat目录下的/conf/web.xml文件,单位是分钟
代码语言:javascript复制<session-config>
<session-timeout>10</session-timeout>
</session-config>
cookie
简介
是Web服务器保存在客户端的一系列文本信息
作用
对特定对象的追踪 实现各种个性化服务 简化登录
安全性
容易泄露信息
创建对象
代码语言:javascript复制Cookie newCookie = new Cookie(String key, String value);
写入
代码语言:javascript复制response.addCookie(newCookie);
读取
代码语言:javascript复制Cookie[] cookies = request.getCookies();
常用方法
方法名称 | 说 明 |
---|---|
void setMaxAge(int expiry) | 设置cookie的有效期,以秒为单位 |
void setValue(String value) | 在cookie创建后,对cookie进行赋值 |
String getName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
int getMaxAge() | 获取cookie的有效时间,以秒为单位 |
cookie与session的对比
session | cookie |
---|---|
在服务器端保存用户信息 | 在客户端保存用户信息 |
session中保存的是Object类型 | cookie保存的是 String类型 |
随会话的结束而将其存储的数据销毁 | cookie可以长期保存在客户端 |
保存重要的信息 | 保存不重要的用户信息 |
application对象
作用
实现用户之间的数据共享
常用方法
方法名称 | 说 明 |
---|---|
void setAttribute(String key, Object value) | 以key/value的形式保存对象值 |
Object getAttribute(String key) | 通过key获取对象值 |
String getRealPath(String path) | 返回相对路径的真实路径 |
示例
代码语言:javascript复制 <%
Integer count = (Integer) application.getAttribute("count");
if (count != null) {
count = 1 count;
} else {
count = 1;
}
application.setAttribute("count", count);
%>
作用域分类
page作用域
对应的作用域访问对象为pageContext
范围
指本JSP页面的范围
request作用域
对应的作用域访问对象为request
范围
一次请求
session作用域
对应的作用域访问对象为session
范围
一次会话
application作用域
对应的作用域访问对象为application
范围
整个应用的上下文
jsp内置对象回顾
内置对象名称 | 说明 |
---|---|
out | 用于向客户端输出数据 |
request | 主要用于处理客户端请求的数据信息 |
response | 用于响应客户端请求并向客户端输出信息 |
session | 用于记录会话状态的相关信息 |
application | 类似于系统的全局变量,用于实现Web应用中的资源共享 |