获取表单数据
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求内容是什么编码格式
request.setCharacterEncoding("utf-8");
// 获取表单中所有提交的数据打印
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
// 获取复选框的值
String[] hobby =request.getParameterValues("hobby");
String city = request.getParameter("city");
System.out.println(username);
System.out.println(password);
System.out.println(gender);
if (hobby != null) {
for (String string : hobby) {
System.out.println(string);
}
}
System.out.println(city);
// 利用getParameterNames()打印表单数据
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String nextElement = parameterNames.nextElement();
String[] parameterValues = request.getParameterValues(nextElement);
for (String string : parameterValues) {
System.out.println(string);
}
}
// 把表单数据封装到对象中
// 参数1 要封装的对象 该对象要符合javabean规范
// 参数2 map集合
User user = new User();
Map<String, String[]> map = request.getParameterMap();
try {
BeanUtils.populate(user, map);
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 也是一个域对象
域对象内部就是维护一个map集合(添加删除获取的方法)
##### request域的作用范围: 一次请求当中 可以获取到域中保存的数据
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("Utf-8");
// 请求转发 获取转发器
// 只是服务器内部的访问
// 路径始终都在项目路径下
RequestDispatcher dispatcher = request.getRequestDispatcher("http://www.baidu.com");
dispatcher.forward(request, response);
// 获取字符流
PrintWriter out = response.getWriter();
// 给request域中 添加值
request.setAttribute("name", "wanglong");
// 请求包含
// 相当于把两个页面的响应合成一个响应 返回给浏览器
// 请求转发 浏览器只能响应一次数据
request.getRequestDispatcher("/demo03").forward(request, response);
// fun1(request, response);
// 请求重定向 查看是否能获取域中的值
// 重定向是两次请求 不能获取到request域中值
// 重定向既可以访问 本地服务器 也可以访问非本地服务器
// response.setHeader("location", "/sh-web-servlet03/demo03");
// response.setStatus(302);
// response.sendRedirect("http://www.baidu.com");
// 响应一句话
out.write("123");
}
public class Demo03 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("456");
String name = (String)request.getAttribute("name");
System.out.println("demo03" + name);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
会话技术
客户端和服务端 进行交互
当浏览器关闭时 这次会话结束
例如打电话
会话中的两个技术
1.cookie (客户端技术)
cookie是保存在浏览器中的缓存数据
当我发起一个请求 请求一个Servlet
进行逻辑处理 (添加一个商品进购物车)
处理完成后 给客户端一个响应
响应中携带者记录了购买什么相片的cookie
让浏览器保存起来 可以使保存在内存当中(结束会话 cookie被清除)
也可以保存在硬盘当中 (结束会话 依然存在)
当浏览器再一次访问购物车的时候
会携带这个之前保存的cookie 去访问
每个网站可以保存20个cookie 整个浏览器可以保存300个
注意: 第一次访问服务器的时候 是不会携带着cookie去访问的
因为cookie还没产生 只有第一次请求后的响应中可以把cookie写回到浏览器中
2.HttpSession (服务端技术)
session保存在服务端
显示上次登录的时间
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) {
if (cookie.getName().equals("lastTime")) {
// 取出cookie的值
String value = cookie.getValue();
// 字符串转long
long time = Long.parseLong(value);
// 转成日期
Date date = new Date(time);
// 创建一个显示的日期格式
// 参数就是你想要显示的日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化时间
String lastTime = dateFormat.format(date);
// 响应回浏览器
response.getWriter().write("上次的访问时间"+lastTime);
}
}
}
// 创建cookie 记录当前时间
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+"");
// 设置cookie的保存路径 工程名+配置网址路径
// 读取cookie是按 请求的地址 寻找cookie的
// 如果你配置请求路径没有一级目录 这样全
// 所有的网址请求 都能 找到这个cookie
// cookie.setPath("/");
cookie.setPath("/sh-web-servlet03/servlet");
// 设置cookie存活时间
// 负值 表示 浏览器 关闭 cookie消失
// 正值 表示 存货的时间
// 0 表示 删除cookie
cookie.setMaxAge(300);
// 把cookie添加进响应当中
response.addCookie(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) {
if (cookie.getName().equals("lastTime")) {
// 取出cookie的值
String value = cookie.getValue();
// 字符串转long
long time = Long.parseLong(value);
// 转成日期
Date date = new Date(time);
// 创建一个显示的日期格式
// 参数就是你想要显示的日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化时间
String lastTime = dateFormat.format(date);
// 响应回浏览器
response.getWriter().write("上次的访问时间"+lastTime);
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
登陆后 记录用户名
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求内容是什么编码格式
request.setCharacterEncoding("utf-8");
String username = "";
// 读取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
username = cookie.getValue();
}
}
}
// 打印一下
System.out.println(username);
response.getWriter().write("<form action='/sh-web-servlet03/servlet/demo07' method='post'>");
response.getWriter().write("用户名:<input type='text' name='username' value=" + username +"><br>");
response.getWriter().write("密码:<input type='text' name='password'><br>");
response.getWriter().write("记住:<input type='checkbox' name='remember'><br>");
response.getWriter().write("<input type='submit' value='登录'>");
response.getWriter().write("</form>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求内容是什么编码格式
request.setCharacterEncoding("utf-8");
// 获取请求的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("remember");
// 创建cookie
Cookie cookie = new Cookie("username", username);
// 设置cookie路径
cookie.setPath("/sh-web-servlet03/servlet");
// 处理业务逻辑
if (username.equals("zhangsan") && password.equals("123")) {
// 判断是否点 记住按钮
if (remember != null) {
// 记住 设置存活时间
cookie.setMaxAge(Integer.MAX_VALUE);
} else {
// 删除原来cookie
cookie.setMaxAge(0);
}
// 添加到响应中
response.addCookie(cookie);
response.getWriter().write("登录成功");
} else {
response.getWriter().write("登录失败");
// 三秒后 回登录页面
response.setHeader("refresh", "3;url=/sh-web-servlet03/servlet/demo06");
}
}