javaweb开发(基础一:数据传递与对象)

本章内容(学习活动)

一.表单、转发和重定向


1.1获取表单提交的数据


u 我们在网页的表单中填入数据,提交表单后,数据被提交到哪里去了?

n JSP

u 请求对象:request

n public  String  getParameter(String  name)

u 示例

n HTML代码:

n JSP代码:

l String userName=request.getParameter("userName");

u 演示示例 :获取表单提交的数据

1.2get与post区别

比较项

Get

Post

参数出现在URL中

长度限制

安全性

URL可传播

 

1.3 获取同名的多个参数

                

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文件

Ø 

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)

Ø 

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);//单位:秒

       30

    //单位:分钟

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统计页面访问次数

 

你可能感兴趣的:(Javaweb)