tomcat设置put delete提交

本文介绍了如何在Tomcat中启用对HTTP DELETE和PUT请求的支持。默认情况下,Tomcat不支持这些方法,可以通过修改web.xml文件中DefaultServlet的readonly参数设置为false来允许这些操作,以实现REST服务的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat默认就是不允许PUT和DELETE的


如何配置Tomcat支持HTTP Delete和Put 方法
在tomcat web.xml文件中配置org.apache.catalina.servlets.DefaultServlet的
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param> readonly参数默认是true,即不允许delete和put操作,所以通过XMLHttpRequest对象的put或者delete方法访问就会报告http 403错误。为REST服务起见,应该设置该属性为false。
### TomcatPUT 请求返回 204 状态码的原因 当在 Tomcat 中执行 PUT 请求并收到 `204 No Content` 的响应状态码时,这通常表明服务器已经成功处理了该请求,但不会返回任何实体内容作为响应[^1]。具体原因可能涉及以下几个方面: #### 默认行为 Tomcat 对于某些 HTTP 方法(如 PUT DELETE),如果没有显式配置或覆盖默认的行为,则会按照标准协议规定返回 `204 No Content` 状态码。这是因为根据 RFC 7231 协议定义,对于这些方法,默认情况下不需要提供额外的内容。 #### 配置问题 如果应用程序期望通过 PUT 请求更新资源后能够获得具体的反馈数据或者确认消息,而实际却只得到了 `204` 响应,可能是由于 Servlet 或者控制器逻辑中缺少必要的设置来指定其他类型的响应状态以及相应的内容体。例如,在 Spring MVC 应用程序里,若 Controller 方法未标注合适的 @ResponseBody 注解或将模型属性添加至视图解析器路径之外的位置,则可能导致此现象发生[^3]。 #### 解决方案建议 为了改变这种默认行为,可以通过修改应用层代码实现自定义化的响应机制: 1. **调整业务逻辑**: 在接收 PUT 请求的服务端函数内部加入适当的 Response 构建过程,比如利用 HttpServletResponse 类型的对象手动设定 Status Code 及 Body 数据。 ```java protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException { // 处理PUT操作的具体事务... resp.setStatus(HttpServletResponse.SC_OK); // 设置为200 OK或其他适合的状态码 PrintWriter writer = resp.getWriter(); writer.write("{\"message\": \"Resource updated successfully.\"}"); writer.flush(); } ``` 2. **框架支持下的优化**: 如果项目基于流行的 Java Web 框架构建(像Spring Boot),那么应该考虑采用更简洁的方式表达意图。例如借助 ResponseEntity<T> 返回结构化结果。 ```java @RestController public class MyController { @RequestMapping(value="/resource", method=RequestMethod.PUT) public ResponseEntity<String> handlePutRequest(@RequestBody SomeDto dto){ service.update(dto); return new ResponseEntity<>("Update succeeded.", HttpStatus.OK); } } ``` 上述两种方式都可以有效避免单纯依赖容器内置规则带来的局限性,从而满足更多样化的交互需求[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值