作为 HttpServletRequest和HttpServletResponse 是接口,我们知道在Java中我们不能实例化接口。 那么我们如何在 doGet()或 doPost()??
中拥有这两个对象//这里的东西 ....... doPost(HttpServletRequest请求,HttpServletResponse响应) { //这里的东西 }
答案 0 :(得分:6)
这些是由运行servlet的Servlet容器提供的。这是Java世界如何通过提供这些接口的具体实现来使用接口来指定其他人遵循的合同的一个很好的示例。
Servlet Specification指定用于构建servlet执行环境的API,即 servlet容器。与任何标准设置文档一样,servlet规范不提供实际的软件实现,只提供行为的定义,即实现软件必须遵循的合同。接口用于定义此行为。
这些接口在javax.servlet.*
包空间中提供,这是Java EE的一部分 - 我认为。无论如何,它是Java的一部分。希望提供Servlet容器实现的人必须提供实现这些接口的类;特定实现的内部细节 - tomcat,jetty等 - 只要符合接口合同,就会有很大差异。
许多接口都是由servlet容器本身实现的,但有些接口是由应用程序开发人员实现的。例如,如果您正在编写Web应用程序,则可能会提供自己的应用程序特定的javax.servlet.Servlet
接口实现。
在运行时,当servlet容器收到映射到Servlet接口实现的请求时,容器将创建它自己的javax.servlet.http.HttpServletRequest
实现,它代表传入的请求,并且这将被传递到你的Servlet,它可以工作任何它想要做的请求。通过请求对象提供的数据包括请求URI,请求参数等。
答案 1 :(得分:2)
这些接口的实现类将由Web服务器(或)应用程序服务器提供。他们会注意为这些接口创建对象。
答案 2 :(得分:1)
使用Servlet运行Java Web应用程序时,您的代码将部署到Web容器(例如Tomcat)或Application Server(例如JBoss)上。这些服务器提供它们自己的接口实现(即实现这些接口的具体类),并将它们的实例传递给servlet的方法。
答案 3 :(得分:0)
“servlet容器”*提供了这些对象的实现。编写单元测试时,可以使用模拟框架(如Mockito)来实例化这些接口的模拟实现。
* E.g。 Google App Engine,Glassfish,Tomcat,JBoss等