一.请求乱码问题解决
二.流程总结
1.数据流转流程
2.servlet的使用流程
三.请求转发
四.Request 对象作用域
五.重定向
六.Cookie 学习
使用 String 进行重新编码:uname=new String(uname.getBytes("iso8859-1"),"utf-8");
Get 方式请求:service 方法中使用: req.setCharacterEncoding(“utf-8”);tomcat 服务器目录下的 conf 文件下找到 server.xml 文件,打开进行如下配置。
Post 方式请求:service 方法中使用: req.setCharacterEncoding(“utf-8”);
浏览器------>服务器------->数据库
浏览器<------服务器<-------数据库
问题:服务器在接收到浏览器的请求后,仅仅使用一个 Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码冗余,Servlet 的职责不明确。
解决:使用请求转发。
特点:一次请求,地址栏信息不改变。
*作用: * 实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。 *使用: * req.getRequestDispatcher("要转发的地址").forward(req, resp); * 地址:相对路径,直接书写servlet的别名即可。 *注意: * 请求转发后直接return结束即可。问题:使用请求转发后,不同的 Servlet 之间怎么进行数据的共享呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?
解决:使用 request 对象的作用域。
使用:request.setAttribute(object name,Object value);request.getAttribute(Object obj);
作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题。
作用域:基于请求转发,一次请求中的所有 Servlet 共享。
注意:使用 Request 对象进行数据流转,数据只在一次请求内有效。
特点:服务器创建,每次请求都会创建,生命周期一次请求。
问题:如果当前的请求,Servlet 无法进行处理怎么办?如果使用请求转发,造成表单数据重复提交怎么办?
解决:使用重定向。
使用:response.sendRedirect(“路径”);本地路径为uri,网络路径为定向资源的 URL 信息。
特点:两次请求,浏览器地址栏信息改变,避免表单重复提交。
时机:如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。
问题:HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?
解决:使用 Cookie 技术。
作用:解决了发送的不同请求的数据共享问题。
解释:Cookie 技术其实是浏览器端的数据存储技术,解决了不同请求需要使用相同的请求数据的问题。我们把请求需要共享的请求数据,存储在浏览器端,避免用户进行重复的书写请求数据。但是哪些数据需要使用 Cookie 技术存储起来是一个主观问题,需要在后台进行响应的时候来告诉浏览器,有些数据其他请求还会使用,需要存储起来。
特点:浏览器端的数据存储技术,存储的数据声明在服务器端。适合少量数据,键值对不安全。
使用:
*Cookie的创建和存储 * //创建Cookie对象 * Cookie c=new Cookie(String name, String value); * //设置cookie(可选) * //设置有效期 * c.setMaxAge(int seconds); * //设置有效路径 * c.setPath(String uri) * //响应Cookie信息给客户端 * resp.addCookie(c); *Cookie的获取 * //获取Cookie信息数组 * Cookie[] cks=req.getCookies(); * //遍历数组获取Cookie信息 * 使用for循环遍历即可,示例: if(cks!=null){ for(Cookie c:cks){ String name=c.getName(); String value=c.getValue(); System.out.println(name+":"+value); } } *注意: * 一个Cookie对象存储一条数据。多条数据,可以多创建几个Cookie对象进行存储。Cookie 数据存储
临时存储:不设置 cookie 信息的存储时间,周期为一次会话,存储在浏览器运行内存中,浏览器关闭即失效。
定时存储:设置了Cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息。默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径。