【发布时间】:2017-08-06 07:50:58
【问题描述】:
我有一个奇怪的情况如下:
我正在使用的 Web-Client 应用程序基于 JQuery 和 AngularJS,
我已经部署了一个 TOMCAT 服务器 (8.5) 和一个 servlet(基于 JAVA 在 Eclipse 上开发)。
发送请求的代码如下:
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 语句(这第二种行为是我发现验证与数据库的正确连接的简单方法,它在现实生活中永远不会被激活;此外,我最终可能会从servlet 的代码)。
使用浏览器时(IE、CHROME,结果都一样)并输入地址:
http://localhost:8080/MEKUWQDispatcher/DispatcherClass
我按预期得到了硬编码选择语句的结果。另一方面,如果我在请求中输入一些数据,例如:
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>
【问题讨论】:
-
双引号和大括号字符在 URL 中无效。有关详细信息,请参阅this answer。看起来您在 Javascript 中做的事情是正确的 - encodeURIComponent。在 Java 方面,您也必须对其进行解码。
标签: javascript angularjs tomcat servlets