org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupportedWARNING: Request met

环境:tomcat8
在刚开始做spring mvc的期末项目时, 出现以下错误

org.springframework.web.servlet.PageNotFound
handleHttpRequestMethodNotSupportedWARNING: Request method ‘POST’ not supported

在前台, 我使用form的post方式, 发送form的data去后台的controller, 经过service处理后, 想要进行正确和错误分别转发到不同的URL的做法.

后台:

@RequestMapping(value = "/login", method = RequestMethod.POST)
    @Override
    public String receiveRequest(HttpServletRequest request) {
    ....
    return "URL";
    }

URL的不同对应着不同的结果:

  • page.jsp 成功 地址栏变化
  • page.html 失败
  • forward:page.html 失败
  • redirect:page.html 成功 地址栏变化
  • page.html 用get的方式 成功 地址栏不变化

    从上面的四个结果, 我猜测:

  • tomcat不支持html格式, 而且forward和redirect是tomcat内部的指令名字

  • 多视图解析的配置配错了

http://stackoverflow.com/questions/4584410/redirect-in-spring-mvc

Also note that redirect: and forward: prefixes are handled by UrlBasedViewResolver, so you need to have at least one subclass of UrlBasedViewResolver among your view resolvers, such as InternalResourceViewResolver.

大概意思是说:
InternalResourceViewResolver继承了UrlBasedViewResolver

  • UrlBasedViewResolver有处理redirect: and forward:两个功能
  • supports InternalResourceView (i.e. Servlets and JSPs) and subclasses such as JstlView.

    然而我从其他资料里查到 InternalResourceViewResolver支持HTML格式


redirect和forward区别
redirect , 重定向, 地址栏变化, html文件可以正确地获取其文件
forward 转发,不能正确获得文件

直接url和forward:的结果很相似, 然而对于/page/index.html这个地址的处理, forward是这样的”forward:/page/index.html” ,使用渲染器的是”index.html”, 猜测: 其实直接写URL的方式是通过forward的方式,转发到渲染器,渲染器再进行处理, 然后出来.

报错报的是405 error

猜测是文件不可以访问
后来我再使用get模式来测试, 发现, 是可以get是可以访问, 也就是问题处于:我用post提交password和username, forward的时候也是同样是post方式, 然而post方式在tomcat似乎不可以access 静态文件.
考虑到post被认定是修改网页的功能, 可以因此被禁止使用…

这可能是tomcat不support吧..
也可能是spring mvc设置的< resource >的配置

如果有人知道真相~ 请务必告诉我!!


番外:
https://spring.io/guides/gs/serving-web-content/官网的文档上没xml配置文件, 似乎是直接用spring boot自动操作的…T_T

你可能感兴趣的:(JAVA)