zoukankan      html  css  js  c++  java
  • Servlet深入之请求HttpServletRequest

    HttpServletRquest
    1.获取客户机信息
    URI与URL的区别,URI是包含URL的,URL一定是一个完整的路径,URI可以是一个相对路径也可以写成完整路径
    getRequestURL();
    getRequestURI();
    getQueryString();获得get方式提交的查询串,即提交路径?后的参数。
    getRemoteAddr();获取客户端IP地址
    getContextPath();获取访问web工程的虚拟目录名称
    getMethod();获取请求方式
    getReuqestURI.subString(request.getContextPath().length());获取访问资源路径

    2.获取客户机头信息
    getHeader(name);根据名称获取请求的头信息内容
    getHeaders(name);对于一个头信息有多个值就通过这个方法返回一个Enumeration集合
    getHeaderNames();获取所有头信息的Enumeration集合

    3.获取请求参数
    请求参数即用户提交服务器的一些数据如链接?后的参数,表单提交的参数。
    getParameter(name);获取参数值
    getParameterValues(name);通过name获得多只checkbox值数组
    getParameterNames();获取所有name的Enumeration集合
    getParameterMap()获取请求参数的map集合
    在获取请求参数后进行处理时都需要经过判断进行非空校验
    如if(username!=null&&username.trim.length()>0)

    处理请求中文乱码,
    数据的传输都是以字节的方式实现的,需要在两端保持编码与解码的一致性。
    request.setCharaterEncoding("");//对于post请求。
    而get请求方式可以修改tomcat解码字符集 conf/server.xml中配置,也可以手动进行编码解码
    username=URLEncoding.encode(username,"");对数据进行指定编码
    username=URLDecoder.decode(username,"");对数据进行指定解码
    也可以写成username=new String(username.getBytes(),"","");

    特殊字符转义
    +表示空格
    %w2B表示+号
    %2F表示正斜杠/
    %3F表示问号?
    %25表示百分号%
    %23表示#号
    %26表示&分割参数符号

    利用请求域转发传递对象
    HttpServletRequest和ServletContext一样都是一个数据域对象,可以用来存储数据。
    两者的区别是在存活时间不一样,请求存活的时间是由响应的结束控制的,而ServletContext的村说时间是由服务器的启动与停止控制的。可以通过请求域转发传递对象,是因为请求可以在多个Servlet之间进行传递,而响应就代表一次请求的处理结束。
    在AServlet中
    request.setArrtibute(name,value)
    RequestDispatcher dispatcher=request.getRequestDispatcher(ServletUrl);//相对路径
    dispatcher.forward(request,reponse);//如果在此方法之前发生响应将数据返回给客户端此方法会报出异常。且此方法不能多次出现。
    在B中
    request.getArrtibute(name);
    应用主要是在servlet中处理数据之后传递给JSP进行展示。要注意只有最终的Servlet程序决定响应的内容,之前的对响应内容的操作在每一次转发都会被清空。
    转发与重定向的区别
    1,转发一次请求一次响应,重定向两次请求两次响应
    2,转发只能跳转站内程序,重定向定向任何站点
    3,转发URL地址不变,重定向URL地址改变
    4,转发对客户端不可见,重定向对客户端可见

    RequestDispatcher
    include方法
    用于将Dispatcher封装的资源内容作为当前响应内容的一部分包含进来,即被含的Servlet程序的响应资源被保留,由多个Servlet程序一同生成最终响应,这一点不同于forward方法。常用来页面布局,将公共部分抽取出来,通过ResquestDispatcher的include引入更加方便维护。
    request.getRequestDispatcher(.html).include(request,response);

  • 相关阅读:
    C# listView载入图片以大图标方式显示
    判断序列是否对称
    非走不可的弯路
    张国荣的《我》
    函数:找出一句话中的第二个单词
    压缩与解压缩示例:游标编码(runlength encoding)
    前行
    书单
    一个数组中的元素头尾两端依次对调
    第一遍读书笔记
  • 原文地址:https://www.cnblogs.com/ss561/p/4618911.html
Copyright © 2011-2022 走看看