更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”
Posted
技术标签:
【中文标题】更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 \'GET\'”【英文标题】:Changing servlet mapping throws "HTTP Status 405 - Request method 'GET' not supported"更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'” 【发布时间】:2015-11-11 01:22:20 【问题描述】:我有一个问题:最初我有这个 servlet 映射:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
所有映射到example.html、example2.html url的控制器都很好。但在某些情况下,我想使用 *.json 映射,在这种情况下,我通过这种方式更改了 servlet 映射:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
在这个改变之后我得到了
HTTP 状态 405 - 不支持请求方法“GET”
引发错误的控制器示例:
@RequestMapping(value="example.html",method = RequestMethod.GET)
public String example(
@RequestParam(value = "q", defaultValue = "") String query,
@RequestParam(value = "page", required = false, defaultValue = "1") int page,
HttpServletRequest request, Model model)
String template = "printout-blog";
model.addAttribute("q", query);
return template;
【问题讨论】:
为什么不向现有映射添加另一个 URL 模式*.json
?在 servlet 上使用 /*
是一种巨大的气味。另见 a.o. ***.com/a/4140659
【参考方案1】:
您将url-pattern
定义为/*
,这意味着调度程序将处理所有传入请求。将您的请求映射更改为下一行中的代码 sn-p !
(网址应该以斜杠/
开头),一切都会正常
@RequestMapping(value="/example.html",method = RequestMethod.GET)
public String example(
@RequestParam(value = "q", defaultValue = "") String query,
@RequestParam(value = "page", required = false, defaultValue = "1") int page,
HttpServletRequest request, Model model)
【讨论】:
以上是关于更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”的主要内容,如果未能解决你的问题,请参考以下文章
Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
Java Servlet,http状态404,请求的资源不可用[重复]
即使存在单个 servlet,也会出现“java.lang.IllegalStateException:多个 servlet 映射到路径 /*”错误