Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TOMCAT在向请求添加参数时返回400(错误请求)_Javascript_Angularjs_Tomcat_Servlets - Fatal编程技术网

Javascript TOMCAT在向请求添加参数时返回400(错误请求)

Javascript TOMCAT在向请求添加参数时返回400(错误请求),javascript,angularjs,tomcat,servlets,Javascript,Angularjs,Tomcat,Servlets,我有一个奇怪的情况如下: <servlet> <servlet-name>MEKUWQDispatcher</servlet-name> <servlet-class>MEKUWQDispatcher.DispatcherClass</servlet-class> </servlet> <servlet-mapping> <servlet-name>MEKUWQDispat

我有一个奇怪的情况如下:

<servlet>
    <servlet-name>MEKUWQDispatcher</servlet-name>
    <servlet-class>MEKUWQDispatcher.DispatcherClass</servlet-class>
</servlet>


<servlet-mapping>
    <servlet-name>MEKUWQDispatcher</servlet-name>
    <url-pattern>/MEKUWQDispatcher</url-pattern>
</servlet-mapping>
  • 我正在开发的Web客户端应用程序基于JQuery和AngularJS

  • 我部署了一个TOMCAT服务器(8.5)和一个servlet(基于Eclipse开发的JAVA)

  • 从以下位置发送请求的代码:

    var MyApp = angular.module('MyApp'); 
    MyApp.factory('DB_Services', ['$http' , '$q' , function($http , $q) {
        var l_Result ;
        var DB_Services = function(p_URL_Root , p_Query) {
            var l_deferred = $q.defer();
            var l_params   = JSON.stringify(p_Query) ;
            var l_url      = "http://localhost:8080/MEKUWQDispatcher/DispatcherClass";
            var l_params   = 'request=' + encodeURIComponent(JSON.stringify(p_Query)) ;        
            var req = { url    : l_url, 
                        method :"GET", 
                        timeout:10000 , 
                        headers: { 
                            'Content-Type': 'application/json ; charset=UTF-8'
                        }, 
                        data:l_params
                      } ;
            $http(req ).
                        success(function(data, status, headers, config) {
                             l_deferred.resolve(data);
                        }).
                        error(function(data, status, headers, config) {
                             l_deferred.resolve(status);
                        });
                        return l_deferred.promise;
            return l_deferred.promise;
        } ;
    
        return DB_Services;
    
    }]);
    
    现在,Servlet包括GET和POST方法。GET方法有两种工作方式:如果请求包含数据,它将使用接收到的数据调用DB存储过程。如果请求中没有数据,它将调用硬编码的select语句(第二种行为是我发现的验证与DB正确连接的简单方法,在现实生活中它永远不会被激活;此外,我可能最终从servlet的代码中删除该部分)

    使用浏览器(即CHROME,所有结果相同)并输入地址时:

    http://localhost:8080/MEKUWQDispatcher/DispatcherClass
    
    我得到了硬编码select语句的预期结果。另一方面,如果我在请求中输入了一些数据,例如:

    http://localhost:8080/MEKUWQDispatcher/DispatcherClass?data="request={blabla}"
    
    我得到错误400(错误请求)

    现在,切换到javascript,不管我做什么(有没有数据),我总是得到硬编码select语句的结果

    我还在
    web.xml
    文件中添加了servlet声明,如下所示:

    <servlet>
        <servlet-name>MEKUWQDispatcher</servlet-name>
        <servlet-class>MEKUWQDispatcher.DispatcherClass</servlet-class>
    </servlet>
    
    
    <servlet-mapping>
        <servlet-name>MEKUWQDispatcher</servlet-name>
        <url-pattern>/MEKUWQDispatcher</url-pattern>
    </servlet-mapping>
    
    
    MEKUWQDispatcher
    MEKUWQDispatcher.DispatcherClass
    MEKUWQDispatcher
    /MEKUWQDispatcher
    
    自从最初发布后,我对服务代码做了几处更改,如下是新代码的一个副本,工作起来很有魅力(请注意,我从
    GET
    切换到
    post
    方法):


    双引号和大括号字符在URL中无效。有关更多详细信息,请参阅。看起来您在Javascript-Encodeuri组件中做的事情是正确的。在Java方面,您也必须对其进行解码。