001.请求乱码问题解决+流程总结+请求转发+Request 对象作用域+重定向+Cookie 学习

    xiaoxiao2023-09-28  163

    文章目录

    一.请求乱码问题解决

    二.流程总结

    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”);


    二.流程总结

    1.数据流转流程

    浏览器------>服务器------->数据库

    浏览器<------服务器<-------数据库

    2.servlet的使用流程

    * 浏览器发起请求到服务器(请求) * 服务器接受浏览器的请求,进行解析,创建request对象存储请求数据 * 服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法 * servlet的方法执行进行请求处理 * //设置请求编码格式 * //设置响应编码格式 * //获取请求信息 * //处理请求信息 * //创建业务层对象 * //调用业务层对象的方法 * //响应处理结果

    三.请求转发

    问题:服务器在接收到浏览器的请求后,仅仅使用一个 Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码冗余,Servlet 的职责不明确。

    解决:使用请求转发。

    特点:一次请求,地址栏信息不改变。

    *作用: * 实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。 *使用: * req.getRequestDispatcher("要转发的地址").forward(req, resp); * 地址:相对路径,直接书写servlet的别名即可。 *注意: * 请求转发后直接return结束即可。

    四.Request 对象作用域

    问题:使用请求转发后,不同的 Servlet 之间怎么进行数据的共享呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?

    解决:使用 request 对象的作用域。

    使用:request.setAttribute(object name,Object value);request.getAttribute(Object obj);

    作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题。

    作用域:基于请求转发,一次请求中的所有 Servlet 共享。

    注意:使用 Request 对象进行数据流转,数据只在一次请求内有效。

    特点:服务器创建,每次请求都会创建,生命周期一次请求。


    五.重定向

    问题:如果当前的请求,Servlet 无法进行处理怎么办?如果使用请求转发,造成表单数据重复提交怎么办?

    解决:使用重定向。

    使用:response.sendRedirect(“路径”);本地路径为uri,网络路径为定向资源的 URL 信息。

    特点:两次请求,浏览器地址栏信息改变,避免表单重复提交。

    时机:如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。

    六.Cookie 学习

    问题: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信息存储好之后,每次请求都会附带,除非设置有效路径。


     

     

    最新回复(0)