Servlet--06--解决乱码问题; 请求转发; 重定向;


乱码问题:

一.  请求-乱码问题:服务器获取的请求数据,在console显示时,出现了乱码。
  (1)post请求方式解决:req.serCharacterEncoding("utf-8");
  (2)get请求方式解决:

    方式一:每个数据都要单独的转换
      String uname = req.getParameter("uname");
      String uname2 = new String(uname.getBytes("iso-8859-1"),"utf-8");
    方式二:req.setCharacterEncoding("utf-8");
      然后在Tomcat的server.xml文件中的Connect标签中增加属性: useBodyEncodingForURI="true"

二.  响应-乱码问题:浏览器显示的服务器响应数据,出现了乱码。
  (1)rep.setHeader("content-type","text/html;charest=utf-8");这句话的意思是:我给你一个HTML页面,你要用utf-8的格式去解析!

三.  我们来总结一下,新建的servlet重写service方法时的基本步骤:
  service()
  {
  //设置请求编码格式
  //设置响应编码格式
  //获取请求数据
  //处理请求数据
  //响应处理结果
  }

 


 

  

Servlet的请求转发:

一.  实现:req.getRequestDispatcher(" ").forward(req, rep);

 

二.  特点:

  (1)一次请求需要多个servlet的联动操作;第一个servlet需要用到其他servlet已经声明的业务逻辑处理代码;
因为request对象--req里面封装了浏览器请求所需要的全部信息; 这个req将会传到下一个servlet中;

  (2)请求转发,是服务器的行为,请求由服务器转发给另外一个页面处理,如何转发,何时转发,转发几次,客户端是不知道的。

  请求转发时,从发送第一次到最后一次请求的过程中,web容器创建一次 request和response对象,新的页面继续处理同一个请求。

  也可以理解为服务器将request 对象在页面之间传递。

  (3)servlet的请求转发,可以降低servlet类的代码冗余;

 

三.    在service中实现: 
  一个servlet有可能是被浏览器直接访问的, 也有可能是被其他servlet请求转发访问的;
  不同的访问方式,要用不同的处理方式:
  (1)浏览器访问: 调用getParemeter(), getParemeterValues() 等等方法;
  (2)请求转发访问: 调用getAtturebute();

  但是一个Servlet在它的生命周期中, 既有可能被浏览器直接访问, 也有可能被其他servlet请求转发访问, 还有可能在他的生命周期中, 背着两种方式都访问过, 所以我们要想一个万全之策!
  引入一个三目运算符:
  //获取req对象中存储的请求转发数据
  String str = ((req.getAttribute("str")==null?"":(string) req.getAttribute("str")

 


 重定向:

一.    解释:
  假设ServletA, servletB, servletC .
  servletA作为登陆页面去访问servletB, servletB处理完req的部分信息后, 后面的信息servletB处理不好, 所以servletB通过请求转发, 访问servletC, 然后servletC处理,处理完后做出响应;
  但是我们知道, 当我们在servletB页面不断刷新时,浏览器地址栏地址是不会变得, 然而,servletB不断的请求访问servletC, 这样不安全!
  所以,我们采取重定向技术, servletB通过请求转发, 访问servletC, servletC处理完后,做出相应, 在响应头上添加servletD, 使得浏览器接受响应后, 需要再发送一次请求到servletD, 然后跳转 

  到servletD的页面, 这样, 我们就保护了servletB和servletC;
二.    实现:
  req.sendRedirect();
三.    特点:
  两次请求,地址栏信息改变;

posted @ 2019-09-04 15:38  Eric-Shen  阅读(374)  评论(0编辑  收藏  举报