本章内容(学习活动)
一.表单、转发和重定向
1.1获取表单提交的数据
u 我们在网页的表单中填入数据,提交表单后,数据被提交到哪里去了?
n JSP
u 请求对象:request
n public String getParameter(String name)
u 示例
n HTML代码:
l <input type="text" name="userName">
n JSP代码:
l String userName=request.getParameter("userName");
u 演示示例 :获取表单提交的数据
1.2get与post区别
比较项 | Get | Post |
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
1.3 获取同名的多个参数
u <input type="checkbox" name="mailId" value="10001" />
u <input type="checkbox" name="mailId" value="10002" />
u <input type="checkbox" name="mailId" value="10003" />
u <input type="checkbox" name="mailId" value="10004" />
u <input type="checkbox" name="mailId" value="10005" />
u String[] mailIds=request.getParameterValues("mailId");
if(mailIds!=null&&mailIds.length!=0){
//循环mailIds访问提交的数据
}else{
//未提交与参数mailId相关的数据
}
1.4 request对象常用方法
方法名称 | 说明 |
StringgetParameter(Stringname) | 根据表单组件名称获取提交 数据 |
String[]getParameterValues(Stringname) | 获取表单组件对应多个值时 的请求数据 |
voidsetCharacterEncoding(Stringcharset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(Stringpath) | 返回一个RequestDispatcher对 象,该对象的forward()方法 用于转发请求 |
1.5内置对象
u 内置对象
n JSP已经准备好的,可以直接使用的对象
l 请求对象:request
l 输出对象:out
l 响应对象:response
l 应用程序对象:application
l 会话对象:session
l 页面上下文对象:pageContext
l 页面对象:page
l 配置对象:config
l 异常对象:exception
1.6 中文乱码
Q:
u 你提交的是中文用户名吗?
u JSP中默认使用的字符编码方式:iso-8859-1(不支持中文)
u 常见的支持中文的编码方式
编码方式 | 收录的字符 |
gb2312 | 常用简体汉字 |
gbk | 简体和繁体汉字 |
utf-8 | 所有国家需要的字符 |
1.7 解决中文乱码
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文件
Ø <Connector connectionTimeout="20000"port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
u 演示示例 :解决中文乱码与页面跳转
1.8 在请求中存取属性-1
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类型,需要做数据类型的转换
1.9 在请求中存取属性-2
Q:你会这样写吗?
u 错误写法:String mess=request.getAttribute("mess");
mess. length();
u 正确写法:String mess=(String)request.getAttribute("mess");
if(mess!=null){
//在请求中取到"mess"属性对应的属性值,正常
使用mess数据
}else{
//在请求中没有取到"mess"属性对应的属性值,
使用备选方案
}
1.10转发与重定向
u 转发
n RequestDispatcher对象
n forward()方法
l 语法:
Ø request.getRequestDispatcher("url").forward(request, response)
Ø <jsp:forward page=“url" />
u 重定向
n 将用户请求重新定位到一个新的URL
l 语法
Ø response.sendRedirect("url")
u 演示示例 :request作用域
1.11 转发与重定向的区别-1
u 转发的工作方式
1.12 转发与重定向的区别-2
u 重定向的工作方式
1.13转发与重定向的区别-3
u 转发与重定向的区别-3
比较项 | 转发 | 重定向 |
URL变化 | 否 | 是 |
重新发出请求 | 不会 | 会 |
是否携带请求 | 是 | 否 |
目标URL要求 | 仅本Web应用 | 任意URL |
v 注意:重定向是客户端行为,转发是服务器行为
1.14 课堂练习
u 需求说明
n 继续完善上次上机练习,在JSP中防止中文乱码
n 假定用户名:系统管理员和密码:123可以登录成功,其他用户拒绝登录,正确实现页面的跳转和提示
u 分析
n 在JSP中设置编码方式
n 判断用户是否可以登录并实现跳转
u 完成时间:10分钟
u 教学方法:共性问题集中讲解
二.重点内容:session、cookie和application的使用
2.1 使用session保存用户名-1
Q:
u 注册成功后自动登录,登录后记住用户状态,并在多个页面显示用户名如何实现?
n 使用会话对象session实现
l 一个会话就是浏览器与服务器之间的一次通话
n 会话可以在多次请求中保存和使用数据
2.2 使用session保存用户名-2
u session
n 语法
l publicvoid setAttribute(Stringname, Object value);
Ø 用法:session.setAttribute("userName", "张三丰");
l publicObject getAttribute(Stringname);
Ø 用法:
String userName=(String)session.getAttribute("userName");
u 演示示例 :使用session保存用户名
2.3session的工作方式
u 每个session都有一个唯一的sessionid
n session.getId();
n public String getId();
2.4 会话的清除和过期-1
Q:
u session的数据是在服务器端的,服务器保存的会话数据量会越来越大,从而导致性能问题
n 若没有清理机制,会导致性能问题或服务器崩溃
l 程序主动清除session数据
l 服务器主动清除长时间没有再次发出请求的session
2.5 会话的清除和过期-2
u 程序主动清除session数据
n 设置会话失效:session.invalidate();
n 移除会话的一个属性
u 语法
n publicvoid removeAttribute(Stringname);
n 用法:session.removeAttribute("userName");
2.6 会话的清除和过期-3
u 服务器主动清除长时间没有再次发出请求的session
n 设置会话过期时间
l publicvoid setMaxInactiveInterval(int interval);//单位:秒
l <session-config>
<session-timeout>30</session-timeout>
</session-config>//单位:分钟
u 演示示例 :session清除与过期
2.7 小结
u 用浏览器访问服务器——产生会话
u 通过浏览器在网站登录——在会话中保存数据
u 登录成功后用个人身份进行访问——会话有效期内
u 关闭了浏览器——结束会话
u 服务器主动结束会话——会话到期
u 使会话失效、删除属性——及时释放会话资源
u 程序主动结束会话、会话到期——会话中的数据丢失
2.8 使用cookie自动填写用户名
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自动填写用户名
2.9 课堂练习
u 需求说明
n 继续完善上次上机练习,在cookie中保存用户名,关闭浏览器再次打开index.jsp页面时,自动填写用户名
u 分析
n 登录成功时,在cookie中保存用户名
n 在登录页获取cookie中保存的用户名完成自动填写用户名功能
u 完成时间:5分钟
u 教学方法:共性问题集中讲解
2.10 application实现计数器
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实现计数器
2.11 三个对象对比-1
u request、session、application
n 相同点
l 都可以存储属性
n 不同点
l request中存储的数据仅在一个请求中可用
l session中存储的数据在一个会话的有效期内可用
l application中存储的数据在整个Web项目中可用
2.15三个对象对比-2
u request中存储的数据仅在一个请求中可用
2.16三个对象对比-3
u session中存储的数据在一个会话有效期内可用
2.17三个对象对比-4
u application中存储的数据在整个Web项目中可用
本章总结
u 实现新闻系统的用户注册
u 解决中文乱码
u 转发和重定向
u 使用session在多页面显示用户名
u 使用cookie实现自动填写用户名
u 使用application统计页面访问次数