java之请求转发,重定向,包含,会话技术

 使用BeanUtils来将参数封装到对象中

 注意:使用这个方法

 1.所使用对象 必须是javabean对象

 2.表单name属性 必须和对象的成员变量对应

public class Demo01 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		request.setCharacterEncoding("UTF-8");
			
		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();
		}
	}
}

 请求转发

 浏览器接收到客户请求后,通知服务器调用另外一个web资源进行处理.称之为请求转发

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

private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//请求转发
		//通过请求对象获取请求转发器
		RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
		//转发
		dispatcher.forward(request, response);
	}

 请求重定向

 浏览器接收到客户请求后 返回在返回响应中会携带一个重定向响应头(头中有重定向访问网址)

 浏览器接收到这个响应后 发现重定向头 再一次发起请求 去访问重定向头中的地址

 两次请求 超出了Request域的作用范围不能使用request域进行传值 参数是重定向的地址

private void fun2(HttpServletResponse response) throws IOException {
		//请求重定向
		//两次请求 超出了Request域的作用范围不能使用request域进行传值
		//参数是重定向的地址
		response.sendRedirect("/sh-web-03/demo03");
	}

 请求包含

  1.几次请求

  一次请求(可以用request域传值)

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

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

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

 Request 域对象

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

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

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		request.setCharacterEncoding("UTF-8");	
		//获取响应中的字符流
		PrintWriter writer = response.getWriter();
		//向request域中保存个值
		request.setAttribute("name", "zhangsan");
    }
public class Demo03 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域取值
		String name = (String)request.getAttribute("name");
		System.out.println(name);
		
		System.out.println("我是demo03");
		
	}

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

}

 会话技术

  客户端与服务端之间的交互就是会话

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

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

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

  每个站点(网站)可以保存20个cookie 每个浏览器可以保存300个cookie 每个cookie可以保存4kb的数据

  cookie 默认的存活时间 一次会话(关闭浏览器 cookie被清除) 

  默认是保存在浏览器的内存当中

  可以设置cookie的存活时间

  浏览器就会将cookie保存到硬盘当中(保存到文件中)  注意:cookie不能保存中文


 设置cookie的存活时间

  setMaxAge(时间 以秒为单位)

  正值 值是多少 浏览器就保存多少秒  负值 浏览器不会存储cookie到硬盘当中

  当浏览器关闭 会话结束 这个cookie被删除  0时 cookie被删除

 

  2.服务端技术 HttpSession

  Session是保存在服务端的

  第一次访问界面的时候 是没有cookie的

 

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

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

  第一次访问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
		//获取请求的cookie
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			//遍历cookie的数组
			for (Cookie cookie : cookies) {
				//找出之前保存的cookie按名字
				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");
					//格式化date对象
					String lastTime = dateFormat.format(date);
					//写到网页上
					response.getWriter().write("上次的登录时间:"+lastTime);
				}
			}
		}
		
		//创建一个cookie对象
		Cookie cookie=new Cookie("lastTime", System.currentTimeMillis()+"");
		//设置cookie的保存路径
		// "/"表示该工程下的所有都能访问
		//保存时 相当于按工程名来存
		// "/sh-web-03/servlet"
		//相当于之后 servlet目录下的网页能访问
		cookie.setPath("/sh-web-03/servlet");
		//设置cookie的存活时间
		cookie.setMaxAge(60*5);
		//添加cookie到响应中
		response.addCookie(cookie);
	}

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

}

 Demo05中获取Demo04中设置的时间时 该时间不会改变 因为demo05中只有时间的获取 没有时间的设置

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
				Cookie[] cookies = request.getCookies();
				if (cookies!=null) {
			        //遍历cookie的数组
			        for (Cookie cookie : cookies) {
				//找出之前保存的cookie按名字
				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");
			        	//格式化date对象
					String lastTime = dateFormat.format(date);
					//写到网页上
					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
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			//遍历
			for (Cookie cookie : cookies) {
				//找出username的cookie
				if (cookie.getName().equals("username")) {
					//System.out.println(cookie.getValue());
					username=cookie.getValue();
					remember="checked='checked'";
				}
			}
		}
		
		response.getWriter().write("<form action='/sh-web-03/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' "+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 cookie=new Cookie("username", username);
		//设置一下cookie路径
		cookie.setPath("/sh-web-03/servlet");
		
		//判断账户wanglong 密码123 就算登录成功
		if (username.equals("wanglong")&&password.equals("123")) {
			//登录成功
			//点记住 保存cookie 设置存活时间
			//没点记住 把cookie删了 存活时间为0
			//单选框 选中状态 返回的是on 不选中 返回null
			if (remember!=null) {
				//设置存活时间
				cookie.setMaxAge(Integer.MAX_VALUE);
			}else {
				//存活时间为0
				cookie.setMaxAge(0);
			}
			//显示登录成功
			response.getWriter().write("登录成功");
			//响应中添加cookie
			response.addCookie(cookie);
			
		}else {
			//登录失败 3秒返回登录页面
			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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值