Servlet和JSP(问题总结一)

请求中文乱码

  1. 使用String进行数据重新编码

         value = new String(value.getBytes("iso8859-1"),"UTF-8");
         该方法其value解码后的字通过iso-8859-1反解码成二进制数组,再将该字节数组用UTF-8解码,最终被new String成字符串。
         缺点:需要一一对可能输入中文的地方进行操作,当有大量变量存在问题时,工作量比较大。
  2. 使用公共配置

         get方式:
                步骤1:resp.setContentType("text/html;charset=utf-8");//需要在使用变量之前
                步骤2:在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中添加属性useBodyEncodingForURI="true"
         post方式: resp.setContentType("text/html;charset=utf-8");//需要在使用变量之前

    PS:在验证第一种方式的时候Eage和Firefox浏览器上都无效,Chrome上能够成功,暂时还不知道原因,如果知道的话我第一时间补上,也希望小伙伴能够多多指教~

Servlet流程总结

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

请求转发

目的:servlet职责明确,代码冗余少
作用:实现多个servlet联动操作处理请求
使用:    
    req.getRequestDispatcher("要转发的地址").forward(req,resp)(地址是相对路径直接写servlet的别名即可)
特点:一次请求,浏览器地址栏信息不改变(服务器内可能经过几个servlet)
注意:请求转发后直接return

使用请求转发后不同的Servlet之间共享数据的方式(对于一个请求来说,不管经历多少个Servlet,其本质均为一个req,但是可以增加属性)

解决:使用request对象的作用域
使用:   req.setAttribute(object name,object value);
        req.getAttribute(object obj)    
作用:request对象解决了一次请求内的不同Servlet的数据共享问题
作用域:基于请求转发,一次请求中的所有Servlet共享
注意:使用Request对象进行数据流传,数据只在一次请求内有效。
request对象特点:服务器创建、每次请求都会创建、生命周期一次请求
问题:请求转发由于地址栏信息不改变,如果刷新会造成表单数据重复提交,可以使用重定向解决

重定向

解决了表单重复提交的问题,以及当前servlet无法处理的请求问题。
使用:resp.sendRedirect(URI/URL)
特点:两次请求、两个request对象(第一次请求的request内的内容第二个request不具备,需要解决不同请求对象之间的数据共享问题:使用session)、浏览器地址栏信息改变
时机:如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向
      如果请求被servlet接收后,无法进行处理,建立使用重定向定位到可以处理的资源。
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务