web学习03

获取表单提供的数据

html form表单

<form action="/sh-web-03/demo01" method="post">
	<p>用户名:<input type="text" name="username">
	<p>密码:<input type="text" name="password"> 
	<p>男<input type="radio" name="sex" value="男">
	<p>女<input type="radio" name="sex" value="女">
	<p>篮球<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="tj">--天津--</option>
		 
	</select>
	<br/>
	<input type="submit" value="提交">
	</form>
                response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("username");
		String password = request.getParameter("password");
		String sex = request.getParameter("sex");
		String[] hobbys = request.getParameterValues("hobby");
		String city = request.getParameter("city");
		System.out.println(name);
		System.out.println(password);
		System.out.println(sex);
		for (String string : hobbys) {
			System.out.println(string);
		}
		
		System.out.println(city);

把请求中的参数放到map中

            Map<String, String[]> map = request.getParameterMap();
		for (String string  : map.keySet()) {
			System.out.println(string);
			for (String string2 :map.get(string)) {
				System.out.println(string2);
			}
		}
             Enumeration<String> names = request.getParameterNames();
		while (names.hasMoreElements()) {
			System.out.println(names.nextElement());
		}

将表单提交的数据封装到user对象中

                String name = request.getParameter("username");
		String password = request.getParameter("password");
		String sex = request.getParameter("sex");
		String[] hobbys = request.getParameterValues("hobby");
		String city = request.getParameter("city");
		User user=new User(name,password,sex,hobbys,city);

 请求转发

一次请求 并且响应到网页的是转发后的响应结果

 请求重定向

两次请求 超出了request域的作用范围  不能使用request传值

 请求包含

几次请求? 一次请求(说明可以用request域传值)

 最终响应到网页的内容是什么? 

  两个servlet的响应结果会一起返回给浏览器


Request域对象

内部维护了一个map集合 添加获取删除值

作用范围:只对一次请求有效

请求转发 通过请求对象获取请求转发器

                RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
		dispatcher.forward(request, response);

请求重定向 参数是重定向的地址

response.sendRedirect("/sh-web-03/demo03");

请求包含  获取请求转发器

                RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
		dispatcher.include(request, response);

会话技术 客户端与服务端之间的交互

 什么是会话?相当于打电话

 访问网页时只要浏览器不关闭 点击多次连接也叫一次会话

 关闭浏览器 结束会话

 1.客户端技术 Cookie 保存客户端(浏览器中) 是一个文件

 每个站点(网站)可以保存20个cookie

 每个浏览器可以保存300个cookie

 每个cookie可以保存4kb的数据

 cookie默认的存活时间 :一次会话

 关闭浏览器 cookie被清除 默认保存在浏览器的内存中

 可以设置cookie的存活时间 1年 

 浏览器会将cookie保存到硬盘中(保存到文件中)

 注意:cookie不能保存中文

  

 设置cookie存活时间

 setMaxAge(时间 以秒为单位)

 正值 值是多少 浏览器保存多少秒

 负值 浏览器不会存储cookie到硬盘当中

     当浏览器关闭 会话结束 cookie被删除

 0时 cookie被删除

 

2.服务端技术 HttpSession

 session保存在服务端

需求: 显示上一次(最后一次)的登录时间

 关闭浏览器之后再访问还能显示 

 1.第一下访问servlet时 将时间保存到cookie中

 在响应会浏览器 让浏览器存储起来

 下一次访问时通过request请求获取之前保存的cookie 

 显示之前储存的额时间

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");
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("lastTime")) {
					String value = cookie.getValue();
					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);
					System.out.println("上次的登录时间"+lastTime);
					response.getWriter().write("上次的登录时间"+lastTime);
				}
			}
		}
		
		Cookie cookie=new Cookie("lastTime", System.currentTimeMillis()+"");
		cookie.setPath("/");
		cookie.setMaxAge(60*5);
		response.addCookie(cookie);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
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[] cookies = request.getCookies();
				if (cookies!=null) {
					for (Cookie cookie : cookies) {
						if (cookie.getName().equals("lastTime")) {
							String value = cookie.getValue();
							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);
							System.out.println("上次的登录时间"+lastTime);
							response.getWriter().write("上次的登录时间"+lastTime);
						}
					}
				}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

登录后下次打开浏览器  还能记录用户名

public class Demo06 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		String username="";
		String remember="";
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			System.out.println("123");
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("username")) {
				username=cookie.getValue();
				remember="checked='checked'";
				}
			}
		}
		System.out.println(username);
		
		response.getWriter().write("<form action='/sh-web-03/servlet/demo07' method='post'></br>");
		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='remeber' value='"+remember+"'>");
		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 class Demo07 extends HttpServlet {

	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=new Cookie("username", username);
		cookie.setPath("/sh-web-03/servlet");
		if (username.equals("wanglong")&&password.equals("123")) {
			if (remember!=null) {
				cookie.setMaxAge(Integer.MAX_VALUE);
				
			}else {
				cookie.setMaxAge(0);
			}
			response.getWriter().write("登录成功");
			response.addCookie(cookie);
		}else {
		response.getWriter().write("登录失败");
		response.setHeader("refresh", "3;url=/sh-web-03/servlet/demo06");
		    
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值