发表于: 2017-01-06 22:45:47

1 2014


今天完成的事情:

继续框架学习

明天计划的事情:

1、继续学习框架

2、继续任务,待定

遇到的问题:

1、遇到一个问题还没来得及解决,浏览器通过表单提交中文时,

后台接收要在控制台输出,

结果控制台中文乱码,明天解决这个问题。

2、进度确实挺慢,一天时间学不了多少东西,还有各种杂事要应付

收获:

web项目如果运行在Tomcat 8下,表单通过隐藏域发送DELETE和PUT请求,到达控制器后,返回时(forward)会报HTTP 405的错误提示。

三种解决方案:

  a、将 Tomcat 8 改为 Tomcat 7,在Tomcat 7 下运行是正常的;

  b、将请求转发(forward)改为请求重定向(redirect);

  c、自己手动写一个Filter来包装HttpRequest中的getMethod()方法

其中第三种做法,大致流程:

  1)客户端发送请求至服务器,这时如果发送的是POST请求且带有以_method为名的参数会被Spring的HiddenHttpMethodFilter给拦截;

  2)HiddenHttpMethodFilter内有一个静态内部类通过继承HttpServletRequestWrapper类并重写getMethod()方法,将该方法返回值设为_method隐藏域的值;

  3)HiddenHttpMethodFilter在包装好Request后,将请求发往服务器的控制器中对应的方法处理器;

  4)服务器处理完请求后,产生了一个forward请求,产生相应的请求处理信息发往客户端,注意这时的request的getMethod()方法仍然是HiddenHttpMethodFilter包装过的;

  5)我们需要在服务器的响应请求到达客户端前进行拦截,这也是最关键的一步,通过自定义过滤器MyHttpMethodFilter进一步包装请求,将getMethod()方法返回值改成POST或GET即可;

  6)在web.xml中配置该filter,注意dispatcher结点值必须为FORWARD。

详细见 @RequestMapping用法详解


返回列表 返回列表
评论

    分享到