转发和重定向_Cookie
1.转发
问题:服务器在接收到浏览器的请求后,仅仅使用一个Servlet进行请求处理,会造成不同的Servlet逻辑代码冗余,Servlet的职责不明确。
解决:使用请求转发。
特点:一次请求;地址栏信息不变。
- request.getRequestDispatcher(“ServletPath”).forward(request,response);//相对路径,Servlet别名。请求转发后直接return结束即可。
2.Request对象作用域
问题:使用请求转发后,不同的Servlet之间怎么进行数据共享?
解决:使用Request对象的作用域。
request.setAttribute(Object,Object);
request.getAttribute(Object);作用:解决了一次请求内的不同Servlet的数据共享问题。
作用域:基于请求转发,一次请求中的所有Servlet共享。
3.重定向
问题:如果当前的请求,Servlet无法进行处理。(表单重复提交)
解决:使用重定向
特点:两次请求;浏览器地址栏信息改变。
response.sendRedirect(“uri”);//本地路径uri,网络路径url- PS:web工程,WEB-INF目录下的文件都是受保护的。例如html/jsp文件,是不能通过客户端直接访问的,只能从服务端访问。可以使用转发请求WEB-INF下的资源,但是不能用重定向,因为重定向是两次请求。如果要客户端直接访问,将页面放在webcontent下就行。
4.Cookie
作用:解决了发送不同请求的数据共享问题
4.1 Cookie存储
使用:1)创建Cookie对象;2)响应Cookie信息给客户端。(一个Cookie对象只能创建一条数据,多条数据,需要使用多个Cookie对象)
//创建Cookie对象 Cookie c = new Cookie(String key,String value); //响应Cookie信息 response.addCookie(c);
特点:浏览器端的数据存储技术;存储的数据声明在服务器;
临时存储:存储在浏览器的运行内存中,浏览器关闭即失效。
定时存储:设置了Cookie的有效期,存储在客户端的硬盘中。在有效期内,符合路径的请求都会附带该信息。
Cookie c = new Cookie(String key,String value); c.setMaxAge(Integer millisecond);//设置有效期
默认Cookie信息存储好之后,每次请求都会附带,除非设置有效路径。
c.setPath(String ServletPath);//设置有效路径
4.2 获取Cookie
Cookie[] cks = request.getCookies();//获取所有的Cookie if(cks !=null){ for(Cookie c : cks){ String name = c.getName(); String value = c.getValue(); } }