u 我们在网页的表单中填入数据,提交表单后,数据被提交到哪里去了?
n JSP
u 请求对象:request
n public String getParameter(String name)
u 示例
n HTML代码:
l
n JSP代码:
l String userName=request.getParameter("userName");
u 演示示例 :获取表单提交的数据
比较项 |
Get |
Post |
参数出现在URL中 |
是 |
否 |
长度限制 |
有 |
无 |
安全性 |
低 |
高 |
URL可传播 |
是 |
否 |
u
u
u
u
u
u String[] mailIds=request.getParameterValues("mailId");
if(mailIds!=null&&mailIds.length!=0){
//循环mailIds访问提交的数据
}else{
//未提交与参数mailId相关的数据
}
方法名称 |
说明 |
StringgetParameter(Stringname) |
根据表单组件名称获取提交 数据 |
String[]getParameterValues(Stringname) |
获取表单组件对应多个值时 的请求数据 |
voidsetCharacterEncoding(Stringcharset) |
指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(Stringpath) |
返回一个RequestDispatcher对 象,该对象的forward()方法 用于转发请求 |
u 内置对象
n JSP已经准备好的,可以直接使用的对象
l 请求对象:request
l 输出对象:out
l 响应对象:response
l 应用程序对象:application
l 会话对象:session
l 页面上下文对象:pageContext
l 页面对象:page
l 配置对象:config
l 异常对象:exception
Q:
u 你提交的是中文用户名吗?
u JSP中默认使用的字符编码方式:iso-8859-1(不支持中文)
u 常见的支持中文的编码方式
编码方式 |
收录的字符 |
gb2312 |
常用简体汉字 |
gbk |
简体和繁体汉字 |
utf-8 |
所有国家需要的字符 |
u 设置请求和响应的编码方式
n request.setCharacterEncoding("utf-8");
n response.setCharacterEncoding("utf-8");
n <%@ page language="java" contentType="text/html; charset=utf-8"%>
u get请求出现乱码
n 治标的方法:
l new String(s.getBytes("iso-8859-1"),"utf-8");
n 治本的方法:
l 配置tomcat\conf\server.xml文件
Ø
u 演示示例 :解决中文乱码与页面跳转
u 在请求中保存属性
n public void setAttribute(String name,Object o)
n request.setAttribute("mess","注册失败");
l String name:属性名
l Object o:属性值,引用类型
u 在请求中获取属性
n public Object getAttribute(String name)
l Object:属性值
l String name:属性名
v 注意
1. 在使用属性值的时候要做非空判断,否则会出现空指针异常
2. 它的返回值类型是Object类型,需要做数据类型的转换
Q:你会这样写吗?
u 错误写法:String mess=request.getAttribute("mess");
mess. length();
u 正确写法:String mess=(String)request.getAttribute("mess");
if(mess!=null){
//在请求中取到"mess"属性对应的属性值,正常
使用mess数据
}else{
//在请求中没有取到"mess"属性对应的属性值,
使用备选方案
}
u 转发
n RequestDispatcher对象
n forward()方法
l 语法:
Ø request.getRequestDispatcher("url").forward(request, response)
Ø
u 重定向
n 将用户请求重新定位到一个新的URL
l 语法
Ø response.sendRedirect("url")
u 演示示例 :request作用域
u 转发的工作方式
u 重定向的工作方式
u 转发与重定向的区别-3
比较项 |
转发 |
重定向 |
URL变化 |
否 |
是 |
重新发出请求 |
不会 |
会 |
是否携带请求 |
是 |
否 |
目标URL要求 |
仅本Web应用 |
任意URL |
v 注意:重定向是客户端行为,转发是服务器行为
u 需求说明
n 继续完善上次上机练习,在JSP中防止中文乱码
n 假定用户名:系统管理员和密码:123可以登录成功,其他用户拒绝登录,正确实现页面的跳转和提示
u 分析
n 在JSP中设置编码方式
n 判断用户是否可以登录并实现跳转
u 完成时间:10分钟
u 教学方法:共性问题集中讲解
Q:
u 注册成功后自动登录,登录后记住用户状态,并在多个页面显示用户名如何实现?
n 使用会话对象session实现
l 一个会话就是浏览器与服务器之间的一次通话
n 会话可以在多次请求中保存和使用数据
u session
n 语法
l publicvoid setAttribute(Stringname, Object value);
Ø 用法:session.setAttribute("userName", "张三丰");
l publicObject getAttribute(Stringname);
Ø 用法:
String userName=(String)session.getAttribute("userName");
u 演示示例 :使用session保存用户名
u 每个session都有一个唯一的sessionid
n session.getId();
n public String getId();
Q:
u session的数据是在服务器端的,服务器保存的会话数据量会越来越大,从而导致性能问题
n 若没有清理机制,会导致性能问题或服务器崩溃
l 程序主动清除session数据
l 服务器主动清除长时间没有再次发出请求的session
u 程序主动清除session数据
n 设置会话失效:session.invalidate();
n 移除会话的一个属性
u 语法
n publicvoid removeAttribute(Stringname);
n 用法:session.removeAttribute("userName");
u 服务器主动清除长时间没有再次发出请求的session
n 设置会话过期时间
l publicvoid setMaxInactiveInterval(int interval);//单位:秒
l
//单位:分钟
u 演示示例 :session清除与过期
u 用浏览器访问服务器——产生会话
u 通过浏览器在网站登录——在会话中保存数据
u 登录成功后用个人身份进行访问——会话有效期内
u 关闭了浏览器——结束会话
u 服务器主动结束会话——会话到期
u 使会话失效、删除属性——及时释放会话资源
u 程序主动结束会话、会话到期——会话中的数据丢失
Q:
u 浏览器关闭,会话结束,但为什么有些论坛在用户再次进入的时候却可以识别用户身份,并且用户状态为:已登录?
u 用户每次访问邮箱的时候,页面上会自动显示该用户名?
n cookie以文件方式保存数据
l 添加数据
Ø public void addCookie(Cookie cookie)
l 获取数据
Ø public Cookie[] getCookies()
l 设置有效期
Ø public void setMaxAge(int expiry)
l 用户可以禁用cookie
u 演示示例 :使用cookie自动填写用户名
u 需求说明
n 继续完善上次上机练习,在cookie中保存用户名,关闭浏览器再次打开index.jsp页面时,自动填写用户名
u 分析
n 登录成功时,在cookie中保存用户名
n 在登录页获取cookie中保存的用户名完成自动填写用户名功能
u 完成时间:5分钟
u 教学方法:共性问题集中讲解
Q:
u 统计页面的访问次数?
n 分析
l 每个用户都需要使用访问次数
l application可在整个项目中共享使用数据
l 使用application实现计数器
l 每次访问该页面,计数器加1
n 解决方法
l public void setAttribute(String name, Object object)
l public Object getAttribute(String name)
u 演示示例 :使用application实现计数器
u request、session、application
n 相同点
l 都可以存储属性
n 不同点
l request中存储的数据仅在一个请求中可用
l session中存储的数据在一个会话的有效期内可用
l application中存储的数据在整个Web项目中可用
u request中存储的数据仅在一个请求中可用
u session中存储的数据在一个会话有效期内可用
u application中存储的数据在整个Web项目中可用
u 实现新闻系统的用户注册
u 解决中文乱码
u 转发和重定向
u 使用session在多页面显示用户名
u 使用cookie实现自动填写用户名
u 使用application统计页面访问次数