Servlet中重要的接口和常用实现类
ServletConfig接口:
ServletConfig中封装的servlet的配置信息
PS:每一个Servlet都有唯一对应的ServletConfig对象,代表当前servlet的配置信息。
这个servlet对象又容器创建,并传入init方法中
ServletConfig对象的主要功能:
-
获取Servlet名称:getServletName()
-
获取全局上下文ServletContext对象:getServletContext()
-
获取Servlet初始化参数:getInitParameter(String) / getInitParameterNames()。
ServletContext接口:
-
Web容器在启动时,它会为每个Web应用程序都创建一个唯一对应的ServletContext对象,意思是Servlet上下文,代表当前Web应用。
-
由于一个Web应用程序中的所有Servlet都共享同一个ServletContext对象,所以ServletContext对象也被称为 application 对象(Web应用程序对象)。
-
对象由Servlet容器在项目启动时创建,通过ServletConfig对象的getServletContext()方法获取。在项目卸载时销毁。
常用功能:
获取虚拟路径所映射的本地真实路径:getRealPath(String path)
-
虚拟路径:浏览器访问Web应用中资源时所使用的路径。
-
本地路径:资源在文件系统中的实际保存路径。
-
作用:将用户上传的文件通过流写入到服务器硬盘中。
获取初始化参数:跟上面一样。
Servlet常用实现类:
GenericServlet 抽象类
GenericServlet 实现了Servlet接口
-
GenericServlet对Servlet功能进行了封装和完善,重写了init(ServletConfig config)方法,用来获取ServletConfig对象。此时如果GenericServlet的子类(通常是自定义Servlet)又重写了init(ServletConfig config)方法有可能导致ServletConfig对象获取不到,所以子类不应该重写带参数的这个init()方法。
-
如果想要进行初始化操作,可以重写GenericServlet提供的无参的init()方法,这样就不会影响ServletConfig对象的获取。
-
将service(ServletRequest req,ServletResponse res)保留为抽象方法,让使用者仅关心业务实现即可。
HttpServlet抽象类
HttpServlet继承了GenericServlet PS:最终自定义的servlet实现类是继承了HttpServlet抽象类,除特定的情况,其他都是这么用。
-
专门用来处理Http请求的Servlet。
-
对GenericServlet进行进一步的封装和扩展,在service(ServletRequest req, ServletResponse res)方法中,将ServletRequest和ServletResponse转换为HttpServletRequest和HttpServletResponse,根据不同HTTP请求类型调用专门的方法进行处理。