一】Request对象常用方法
        1)StringBuffer getRequestURL()
            url表示访问web应用的完整路径    
        2)String getRequestURI()
            uri表示访问web应用的资源路径
        3)String getQueryString()
            queryString表示:?开头的参数;
        4)getPathInfo()
            pathInfo方法:表示路径之外的信息,如果没有返回null
        5)关于IP
            取得客户端IP:String getRemoteAddr();
            取得服务端IP:String getLocalAddr();
        6)关于主机名
            取得客户端主机名:String getRemoteHost();
            取得服务端主机名:String getLocalName();
        7)关于通信端口
            取得客户端使用的通信端口:String getRemotePort();
            取得服务端使用的通信端口:String getLocalPort();
        
        
        
        code:
                //获取请求的全路径
                String url = request.getRequestURL().toString();
                //获取请求的资源路径
                String uri = request.getRequestURI();
                //获取请求的参数
                String query = request.getQueryString();
                //获取其它信息
                String pathInfo = request.getPathInfo();
                
                System.out.println("-----------------------");
                System.out.println("url:" + url);
                System.out.println("uri:" + uri);
                System.out.println("query:" + query);
                System.out.println("pathinfo:" + pathInfo);
                System.out.println("-----------------------");
                
                
                //获取本机信息
                System.out.println("IP"+request.getLocalAddr());
                System.out.println("主机名"+request.getLocalName());
                System.out.println("端口"+request.getLocalPort());
                System.out.println("-----------------------");
                
                //获取客户端信息
                System.out.println("IP"+request.getRemoteAddr());
                System.out.println("主机名"+request.getRemoteHost());
                System.out.println("端口"+request.getRemotePort());
                System.out.println("-----------------------");
                
            }
        
            
            
            /*
            
             输出结果:
             -----------------------
            url:http://localhost:8080/day07/Demo1
            uri:/day07/Demo1
            query:name=jack
            pathinfo:null
            -----------------------
            IP127.0.0.1
            主机名localhost
            端口8080
            -----------------------
            IP127.0.0.1
            主机名127.0.0.1
            端口3037
            -----------------------
    */

8)取得请求头相关的信息
            1》获取单个请求头的唯一值
                    String getHeader("请求头名称");
            2》获取单个请求头的多个值(有些请求头不不止一个值)
                    Enumeration getHeaders("请求头名称");
            3》获取全部请求头的名称
                    Enumeration getHeaderNames();
        9)取得请求体的相关信息
            1》当一个参数仅有一个值的时候
                String getParamter(String param-name);
            2》当一个参数有多个值的时候
                String[] getParamterValues(String param-name);
            注意:如果是GET的请求方式,如果找不到参数对应的值,就返回一个null
        10)取得请求行的类型。
            String getMethod();
    
    
    二】BeanUtils框架 + getParamterNames()的方式
        优点:
                1》无需理会参数的类型,个数,Beanutils框架能自动将String参数设置到JavaBean对象中
                2》String <->  8种基本类型自动转换,非8种基本类型可以注册转换器
                3》String和String[]类型的参数自动感知装配
        code:
            Enumeration<String> paramNames = request.getParameterNames();
            User user = new User();
            BeanUtils beanUtils = new BeanUtils();
            while(paramNames.hasMoreElements()) {
                String key = paramNames.nextElement();
                String[] value = request.getParameterValues(key);
                try {
                    beanUtils.setProperty(user, key, value);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    三】request常见应用 -----防盗链(下载文件,必须从指定网站进入,否则不允许下载文件)
        原理:判断某个请求来自于哪个网页,使用referer请求头
    code:
            //取得浏览器来自于何方
            String referer = request.getHeader("referer");
            
            //判段
            if(referer!=null && referer.equals("http://localhost/day07/index.html")){
                //转发到download.html页面
                this
                    .getServletContext()
                    .getRequestDispatcher("/down.html")
                    .forward(request,response);
            }else{
                //转发到ad.html页面
                this
                .getServletContext()
                .getRequestDispatcher("/ad.html")
                .forward(request,response);
            }
        }
        
        注意:在获取用户名等信息的时候必须要加一句判断
            if(username != null || username.trim().length()>0)
    四】获取表单提取的信息
        重点方法:
            void setCharacterEncoding(String env);//将请求体的编码方式进行更改
        原理:
        利用getparameter()和getparameterNames()方法

五】POST方式请求体中参数的中文乱码
        原因:
            1》POST方式的表单请求参数放在请求体中
            2》浏览器的默认编码方式是utf-8,与tomcat中Request对象的默认的编码方式是ISO8859-1不一样
        解决办法:
            通过void setCharacterEncoding(String env);方法设置response对象在对中文字符进行编码和解码的时候使用指定的编码方式
            注意:该方法只能解决请求体中的乱码问题。其它部分不能解决。
        code:
            
    六】GET方式请求参数的中文乱码问题    
        原因:
            1》POST方式的表单请求参数放在请求行中
            2》浏览器的默认编码方式是utf-8,与tomcat中Request对象的默认的编码方式是ISO8859-1不一样
        解决办法:
            客户端:进行中文编码,防止服务端进行解码的时候产生不可逆的错误
                    1》使用URLEncoder类的encode()方法
                    2》在客户端将中文字符进行编码,再将已经经过编码的数据发送给服务器
                    
                
                思考:
                    先进行编码的原因:
                        1》中文字符通过ISO8859-1直接解码会导致不可逆的解码错误
                        2》而先经过编码后的中文字符变成了ISO8859-1编码和解码支持的字符。
                        3》所以需要先进行一次编码。
                    
        服务器:
            1》当服务器收到数据的时候,先要经过一次解码,此解码方式采用ISO8859-1(相当于再包装)
            2》所以要获取到中文字符,需要先对外面一层通过服务器自动解码产生的数据进行一次编码
            3》最后再对里面的一层进行一次和客户端一样方式的解码
        
        code:
            jsp页面:
                 <a href="/day07/DemoServlet?username=<%=URLEncoder.encode("小强", "utf-8") %>">GET方式传递中文</a>
                
            Servlet:
                String isoUsername = request.getParameter("username");
                byte[] buf = isoUsername.getBytes("ISO8859-1");
                String username = new String(buf, "utf-8");
                
                System.out.println("username = " + username);
                    
补充:
    405状态码:如果客户端本身的请求是Get请求,但是在Servlet类中却为提供对应的doGet()方法时,
                            Post也是出现此种错误。    
                            
                            
总结:
        1》转发是通过RequestDispatcher对象方法forward(request,response)方法完成。
                获取RequestDispatcher的两个方法:
                    this.getServletContext().getRequestDispatcher();
                    request.getRequestDispatcher();
        2》forward()方法 的输出,如果是输出到缓冲区,再转发到其它Servlet,那么原缓冲区的数据忽略不计;
             forward()方法之前的输出,如果真正输出到浏览器,再转发到其它Servlet,则转发到的Servlet的输出便忽略不计了。
             但是,已经写入到了response对象中的响应头还是保留,因为响应头的内容并不属于流的内容,不需要缓冲。

Request对象 --web浏览器向web服务端的请求的更多相关文章

  1. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  2. Spring Boot构建的Web项目如何在服务端校验表单输入

    本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC ...

  3. Web浏览器与Web服务器之间的通信过程

     HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1:建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...

  4. http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤

    http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1)    建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成 ...

  5. Query通过Ajax向PHP服务端发送请求并返回JSON数据

    Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...

  6. 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步,新建一个工程,如图: 选 Java 写一个工程名,选择好工程路径 ...

  7. JSON Web Token (JWT),服务端信息传输安全解决方案。

    JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式.这些信息可以被验证和信任,因为它是数字签名的 ...

  8. 【Web】CXF WebService 服务端和客户端 环境搭建及测试

    cxf服务端 1.去官方下载对应的jar包:http://cxf.apache.org/ 2.maven配置相应jar包 3.修改web.xml,完成spring和cxf配置 <!-- Spri ...

  9. .Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径

    前言: 首先对于图片上传而言,在我们的项目开发中可以说出现的频率是相当的高的.这篇文章中,我将要描述的是在我们.Net中如何使用Jquery Ajax通过FormData对象异步提交图片文件到后台保存 ...

随机推荐

  1. Android视频录制

    public class MainActivity extends Activity { private MediaRecorder videoRecorder=null; private Butto ...

  2. windows wim

    http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8e011506-6307-445b-b950-215def45ddd8

  3. 我的eclipse插件推荐

    1. ER图工具 ERMaster - http://ermaster.sourceforge.net/update-site/   优点:可根据数据库生成ER图.支持生成转换成PNG,JavaDOC ...

  4. Xcode开启gcc/g++

    Apple announced Xcode 4.3 for OSX Lion and 4.4 for OSX Mountain Lion last week. The major difference ...

  5. 程序员实用的 MySQL sql 语句

    这儿只讲究实用,  程序员编程时常用到的 MySQL的 sql语句(不包括基本的 select, update, delete 等语句). 1. 添加一个用户build,并赋予所有权限的命令 gran ...

  6. Linux字符设备中的两个重要结构体(file、inode)

    对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示 上图描述了用户空间应用程序通过系统调用来调用程序的过程.一般而言在驱动程序的设计中,会关系 struct file 和 struc ...

  7. api接口、RPC、WebService REST

    RPC:所谓的远程过程调用 (面向方法) SOA:所谓的面向服务的架构(面向消息) REST:所谓的 Representational state transfer (面向资源) RPC 即远程过程调 ...

  8. Android(java)学习笔记260:JNI之native方法头文件的生成

    1. JDK1.6 ,进入到工程的bin目录下classes目录下: 使用命令: javah  packageName.ClassName 会在当前目录下生成头文件,从头文件找到jni协议方法 下面举 ...

  9. [A Top-Down Approach][第一章 计算机网络和因特网]

    [A Top-Down Approach][第一章 计算机网络和因特网] 标签(空格分隔): 计算机网络 介绍基本术语和概念 查看构成网络的基本硬件和软件组件. 从网络的边缘开始,考察在网络中运行的端 ...

  10. sql server 系统表系统视图 及作用说明

    sql server 系统视图,可分为: 目录视图   兼容性视图    动态管理视图和函数    信息架构视图    复制视图 系统表: sysaltfiles主数据库 保存数据库的文件 sysch ...