为了创建和更新这些记录,我实现了一个包含记录和表单的网格。当编辑一条记录并在之后保存时,客户端会经过以下几行:
var form = this.getView().getForm();
var record = form.getRecord();
record.beginEdit();
var updatedRecord = form.getValues();
record.set(updatedRecord);
record.endEdit();
通过这样做,客户端将向 Tomcat 服务器发送一个 PUT 请求,请求体中包含更新后的参数。
tomcat 服务器允许在 web.xml
中设置的所有 HTTP 消息:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当我使用浏览器插件发送 HTTP 请求时,一切正常,正如我们在此响应中所见:
Status Code: 200 OK
Allow: PUT
Content-Language: en
Content-Length: 190
Content-Type: application/json
Date: Mon, 22 May 2017 12:21:40 GMT
Server: Apache-Coyote/1.1
但是当 ExtJS 发送 PUT 请求时,我得到以下响应:
HTTP/1.1 405 Method Not Allowed
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://localhost:1337
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials
Allow: DELETE,GET,OPTIONS
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 1056
Date: Mon, 22 May 2017 11:55:37 GMT
为什么tomcat不允许PUT、GET和POST,如果ExtJS发送PUT请求。 当 ExtJS 发送 POST 请求时,一切正常,我得到以下响应:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:1337
Access-Control-Expose-Headers:Access-Control-Allow-Origin,Access-Control-Allow-Credentials
Content-Length:225
Content-Type:application/json
Date:Mon, 22 May 2017 12:59:07 GMT
Server:Apache-Coyote/1.1
我必须做什么才能让 Tomcat 允许 PUT 消息?
最佳答案
您必须在 EXTJS 存储的 proxy
配置中指定 headers
。
proxy: {
headers: {'Content-Type': "application/json" }
...
}
我认为通过指定 header 您的问题应该可以解决。
我认为 actionMethod
也会产生问题。
默认extjs的store
发送GET
请求但是如果你想让它发送PUT
请求那么你可以在actionMethods<中指定
配置
proxy: {
actionMethods: {
read : 'PUT',
create : 'POST',
update : 'PUT',
destroy : 'DELETE'
}
...
}
请引用link .
关于rest - 不允许对 Tomcat 服务器的 ExtJS PUT 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113593/