①Servlet接口html
②GenericServlet抽象类前端
- 对Servlet功能进行了封装和完善,将service(ServletRequest req, ServletResponse res)保留为抽象方法,让使用者仅关心业务实现便可。
③HttpServlet抽象类java
- 对GenericServlet进行了进一步的封装和扩展,更贴近HTTP协议下的应用程序编写,在service(ServletRequest req, ServletResponse res)方法中,根据不一样HTTP请求类型调用专门的方法进行处理。
- 从此在实际使用中继承HttpServlet抽象类建立本身的Servlet实现类便可。重写doGet(HttpServletRequest req, HttpServletResponse resp)和doPost(HttpServletRequest req, HttpServletResponse resp)方法实现请求处理,再也不须要重写service(ServletRequest req, ServletResponse res)方法了。
- ServletConfig接口:封装了Servlet配置信息
- ServletContext接口:封装了当前Web应用上下文信息
- HttpServletRequest接口:封装了HTTP请求信息,ServletRequest的子接口
- HttpServletResponse接口:封装了HTTP响应信息,ServletResponse的子接口
- Servlet生命周期
- 应用程序中的对象不只在空间上有层次结构的关系,在时间上也会由于处于程序运行过程当中的不一样阶段而表现出不一样状态和不一样行为——这就是对象的生命周期。
- Servlet对象是Servlet容器建立的,生命周期方法都是由容器调用的。这一点和咱们以前所编写的代码有很大不一样。在从此的学习中咱们会看到,愈来愈多的对象交给容器或框架来建立,愈来愈多的方法由容器或框架来调用,开发人员要尽量多的将精力放在业务逻辑的实现上。
- Servlet生命周期的主要过程
①Servlet对象的建立web
默认状况下,Servlet容器第一次收到HTTP请求时建立对应Servlet对象。容器之因此能作到这一点是因为咱们在注册Servlet时提供了全类名,容器使用反射技术建立了Servlet的对象。浏览器
②Servlet对象初始化缓存
- Servlet容器建立Servlet对象以后,会调用init(ServletConfig config)方法,对其进行初始化。在javax.servlet.Servlet接口中,public void init(ServletConfig config)方法要求容器将ServletConfig的实例对象传入,这也是咱们获取ServletConfig的实例对象的根本方法。
[参考阅读]服务器 ●这是依赖注入思想的一种实现,所谓依赖注入指的是程序中须要的对象不是由开发人员本身建立或获取,而是由“环境”——也就是容器主动“注入”到咱们的程序中。这样作的好处是屏蔽复杂对象的建立细节或简化开发过程。这一思想在不少框架中都获得了体现,特别是Spring的IOC容器就是依赖注入思想的典型实现。app |
- 为了简化开发,GenericServlet抽象类中实现了init(ServletConfig config)方法,将init(ServletConfig config)方法获取到的ServletConfig对象赋值给了成员变量ServletConfig config,目的是使其它方法能够共享这个对象。这时有一个问题:若是子类重写了这个init(ServletConfig config)方法,有可能会致使成员变量config对象赋值失败。因此GenericServlet抽象类另外提供了一个无参的public void init()方法,并在init(ServletConfig config)方法中调用,做为子类进行初始化操做时重写使用。而这个无参的init()方法之因此没有设计成抽象方法,是为了不子类继承时强制实现这个方法带来的麻烦,使用者能够根据须要选择是否要覆盖这个方法。
③处理请求框架
- 在javax.servlet.Servlet接口中,定义了service(ServletRequest req, ServletResponse res)方法处理HTTP请求,同时要求容器将ServletRequest对象和ServletResponse对象传入。
- 在HttpServlet抽象类中,service(ServletRequest req, ServletResponse res)方法将ServletRequest对象和ServletResponse对象强转为了HttpServletRequest、HttpServletResponse子类对象,这样更适合于HTTP请求的处理,因此在doGet()和doPost()方法中使用的就是HttpServletRequest、HttpServletResponse的实现类对象了。
④Servlet对象销毁eclipse
- Web应用卸载或服务器中止执行时会销毁Servlet对象,而销毁以前为了执行一些诸如释放缓存、关闭链接、保存数据等操做,因此设计了public void destroy()方法。
- ServletConfig接口封装了Servlet配置信息,这一点从接口的名称上就可以看出来。但同时,表明当前Web应用的ServletContext对象也封装到了ServletConfig对象中,使ServletConfig对象成为了获取ServletContext对象的一座桥梁。
- ServletConfig对象的主要功能
①获取Servlet友好名称
②获取Servlet初始化参数
③获取ServletContext对象
- Web容器在启动时,它会为每一个Web应用程序都建立一个对应的ServletContext对象,它表明当前Web应用——做用很像餐厅的经理。
- 因为一个Web应用程序中的全部Servlet都共享同一个ServletContext对象,因此ServletContext对象也被称为 application 对象(Web应用程序对象)。
- 在应用程序中可以获取运行环境或容器信息的对象一般称之为“上下文对象”。
- ServletContext对象的主要功能
①获取WEB应用程序的初始化参数
- 设置Web应用初始化参数的方式是在web.xml的根标签下加入以下代码
<!– Web应用初始化参数 –> <context-param> <param-name>ParamName</param-name> <param-value>ParamValue</param-value> </context-param> |
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取ServletContext对象 ServletContext context = this.getServletContext(); //2.获取Web应用初始化参数 String paramValue = context.getInitParameter(“ParamName”); System.out.println(“paramValue=”+paramValue); } |
②获取虚拟路径所映射的本地路径
- 虚拟路径:浏览器访问Web应用中资源时所使用的路径。
- 本地路径:资源在文件系统中的实际保存路径。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取ServletContext对象 ServletContext context = this.getServletContext(); //2.获取index.html的本地路径 //index.html的虚拟路径是“/index.html”,其中“/”表示当前Web应用的根目录, //即WebContent目录 String realPath = context.getRealPath(“/index.html”); //realPath=D:\DevWorkSpace\MyWorkSpace\.metadata\.plugins\ //org.eclipse.wst.server.core\tmp0\wtpwebapps\MyServlet\index.html System.out.println(“realPath=”+realPath); } |
③application域范围的属性
- ServletContext对象与当前Web应用一致,即Web应用加载时建立,Web应用卸载时销毁。
关注我,了解更多前端培训开发技术知识分享!
文章转载连接:http://www.atguigu.com/jsfx/1489.html