首先在WebContent创建一个表单
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/sh-web-03/Demo02" method="get">
账号:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
男:<input type="radio" name="sex" value="男"checked="checked"><br/>
女:<input type="radio" name="sex" value="女"><br/>
唱歌:<input type="checkbox" name="hobby" value="唱歌">
跳舞:<input type="checkbox" name="hobby" value="跳舞">
画画:<input type="checkbox" name="hobby" value="画画">
<br/>
<select name="city">
<option>--请选择--</option>
<option value="sh">上海</option>
<option value="bj">北京</option>
<option value="gz">广州</option>
</select>
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
从表单中获取数据(4种方法)
方法一
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
// 获取多个值
String[] hobby = request.getParameterValues("hobby");
String city = request.getParameter("city");
System.out.println(username);
System.out.println(password);
System.out.println(sex);
for (String string : hobby) {
System.out.println(string);
}
System.out.println(city);
方法二
// 获取参数的所有name
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String nextElement = names.nextElement();
System.out.println(nextElement);
}
方法三
// 获取参数的map集合
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
for (String value : values) {
System.out.println(key + "=" + value);
}
}
方法四(重点)
利用BeanUitls直接将请求的参数封装成一个对象
参数1:创建新对象,传进去哪个就封装进哪个对象
参数2:从请求中获取的参数的map集合
注意:
1.使用的实体类对象 必须符合JavaBean规范
2.实体类的成员变量 要跟 获取的参数一样
3.实体类的成员变量名 和 name标签名要相同
首先导入commons-beanutils-1.9.3.jar和commons-logging-1.2.jar
先创建一个类
package com.lanou3g;
import java.util.Arrays;
/*
* 建议:实体类中的成员变量名
* 和 表单中的name标签
* 和 数据库中表的字段 名字用一样的
*/
public class User {
private String username;
private String password;
private String sex;
private String[] hobby;
private String city;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password, String sex, String[] hobby, String city) {
super();
this.username = username;
this.password = password;
this.sex = sex;
this.hobby = hobby;
this.city = city;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", hobby="
+ Arrays.toString(hobby) + ", city=" + city + "]";
}
}
封装进对象
// 将获取的参数 封装成一个对象
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
// 获取多个值
String[] hobby = request.getParameterValues("hobby");
String city = request.getParameter("city");
// 放入对象中
User user = new User(username,password,sex,hobby,city);
System.out.println(user);
获取数据
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Request域对象
先创建Demo04类
public class Demo04 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 响应回浏览器
response.getWriter().write("456");
// 取出request域中的值
Object attribute = request.getAttribute("wanglong");
System.out.println(attribute);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
测试域对象的使用范围
// 测试域对象的使用范围
// 请求转发(一次请求)
// 注意:最终响应回浏览器的内容是 转发到的页面的响应
// 在request域中保存值
request.setAttribute("wanglong", "nan");
// 使用request对象 进行请求转发
// 获取请求转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/Demo04");
dispatcher.forward(request, response);
测试请求重定向(两次请求 超出request的范围)
response.sendRedirect("/sh-web-03/Demo04");
请求包含(一次请求 并且两个页面的响应都会返回给浏览器)
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 获取字符流
PrintWriter writer = response.getWriter();
request.setAttribute("wanglong", "nan");
// 请求包含(一次请求 并且两个页面的响应都会返回给浏览器)
// 获取转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/Demo04");
// 包含方法
dispatcher.include(request, response);
// 响应回浏览器
writer.write("123");
System.out.println("我是Demo03");
会话技术
定义 : 指的是客户端(用户/浏览器)和服务端(Servlet)进行的交互
基础概念
一次会话 : 当关闭浏览器时,这次会话才会结束
- 客户端技术(浏览器实现)Cookie , cookie的使用流程:
1.当用户第一次访问服务器时,服务器可以创建一个cookie出来并且 添加到响应中 响应回浏览器(用户)
2.当浏览器 接收到 携带了cookie的响应后,会将cookie保存到本地文件
3.当用户 再一次访问服务器时,会携带着cookie一起去访问,这时服务端拿到cookie可以使用
4.默认当浏览器关闭 会话结束 浏览器销毁保存cookie (可以设置cookie存活时间 当时间到了 才会销毁) - Cookie的使用
1.每个网站最多可以保存20个cookie到浏览器中
2.每个cookie最多4kb(只能保存小数据)
3.每个浏览器最多可以保存300个cookie
4.cookie中不能保存中文 - 设置Cookie存活时间 , setMaxAge 以秒为单位
- 正值 : cookie到时间被销毁
- 负值 : 浏览器不会保存cookie 会话结束 直接销毁cookie
- 0值 : 立即删除cookie
cookie的流程图
使用上面所学实现一个需求:显示上一次(最后)的登录时间
public class Demo05 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 从请求中获取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
// 找出刚才保存叫lastTime的cookie
if (cookie.getName().equals("lastTime")) {
// 获取cookie保存的值
String value = cookie.getValue();
// 字符串转long型
long time = Long.parseLong(value);
// 字符串转成时间
Date date = new Date(time);
// 将日期对象格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
// 格式化
String stringTime = sdf.format(date);
// 将时间显示到浏览器
response.getWriter().write(stringTime.toString());
}
}
}
// 创建一个cookie
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
// 设置存活时间
cookie.setMaxAge(60 * 5);
// 设置保存路径
// / 表示工程下所有的servlet类都能拿到这个cookie
// /sh-web-03/servlet 只有访问路径是servlet下的类才能获取到cookie
cookie.setPath("/sh-web-03/servlet");
// 保存到响应中
response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}