SpringMvc 中 FrameworkServlet 覆盖 service 的有点。
2024-09-01 15:01:58
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());
if (httpMethod == HttpMethod.PATCH || httpMethod == null) {
processRequest(request, response);
}
else {
super.service(request, response);
}
}
@Override
protected final void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected final void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
先上代码。
可以看到,最终调用了super.service,然后又覆盖了 doGet、doPost等方法。
1、为什么最后都调用了 processRequest ?
在HttpServlet中,最开始是按类型将请求分开的。但是,SpringMVC又将他们统一用 processRequest 来处理,是因为springmvc是将不同类型请求用不同的Handler来处理。
2、为什么不直接覆盖 HttpServlet,而是调用了super.service ?
现在看来结构是没有问题的。但是,如果后续扩展时想在 doPost请求之前做一些处理。。。这是,方案为覆盖 dispatcherServlet 的doPost方法, 在里边先进行一些处理,然后再调用 super.doPost。但是父类根本没调用 doPost,所以就出现问题了。这问题解决方法也很简单。但是正常逻辑 doPost 应该可以解决才对。
所以springMvc这种做法看似笨拙但是是很有必要的。
最新文章
- Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
- 开放式管理基础结构 OMI
- CSS中的a标签几个访问状态记录
- java调用html模板发送html内容的邮件
- linux设备驱动归纳总结(三):6.poll和sellct【转】
- javascript学习-原生javascript的小特效(多物体运动效果)
- Win7+VS2010环境下CEGUI 0.8.4编译过程详解
- 《深入理解C#》第3版 学习进度备忘
- BLOB或TEXT字段使用散列值和前缀索引优化提高查询速度
- poj 2287 动态规划
- javaPNS进阶-高级推送技巧
- SharePoint 2016 配置应用程序商店
- Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
- 【腾讯海纳】系统未发布时如何获取获取property_id在本地进行测试?
- spring cloud整合 websocket 的那些事
- 基于php5.5使用PHPMailer-5.2发送邮件
- Redis怎么保持缓存与数据库一致性?
- mysql 多表查询先排序,然后再取分组<;mysql 先order by,然后再取group by分组>;
- Flutter 中 ListView 的使用
- 对最近java基础学习的一次小结