在控制器方法中直接使用Servlet API虽然也很简单,但这种方式会造成控制器类与Servlet API耦合,既造成了代码污染,也增加了测试难度,如果不是非这样不可,一般不推荐在控制器类中使用Servlet API。
除通过使用注解修饰方法的形参来获取request、session属性之外,Spring MVC还提供了WebRequest来访问request、session属性——使用该API的优势在于:程序既可相对自由地访问request、session属性,又无须与Servlet API耦合。
Spring MVC提供了WebRequest接口来访问request和session属性,并且相比于直接使用Servlet API,使用WebRequest有以下优势:
- 程序解耦:使用WebRequest可以将程序与Servlet API解耦,避免依赖具体的Servlet容器。这样在需要替换或升级Servlet容器时,对应用程序的影响更小。
- 方便测试:使用WebRequest接口可以更方便地进行单元测试。你可以在测试代码中模拟请求和会话属性,而无需启动完整的Servlet容器。
- 灵活性:通过WebRequest,你可以更灵活地访问和操作request和session属性。除了标准的Servlet API方法之外,还提供了一些额外的方法,如getAttributeNames()、removeAttribute()等。
- 与Spring集成:使用WebRequest,你可以更好地集成Spring框架的其他功能。例如,可以使用Spring AOP来拦截和处理请求,或者使用Spring Security来进行身份验证和授权。
总之,使用WebRequest可以让程序在访问request和session属性时更加灵活和解耦,提高程序的可测试性和可维护性。
你如果问我具体遇到过什么情况现在才如此反对使用原生的Servlet API?那我只碰过一个情况,改用tomcat 10的时候,你就知道了,要重新改代码,之后重新build项目
在 Tomcat 10.0.x 版本中,由于 Java EE 的迁移,javax 被替换成了 jakarta。因此,Tomcat 10.0.x 版本中的 jakarta 包含了一系列的 Jakarta Servlet、Jakarta WebSocket 和 Jakarta EL 扩展包,例如 jakarta.servlet、jakarta.websocket 和 jakarta.el 等等,版本号为 5.0。