Servlet
Posted wmx30
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet相关的知识,希望对你有一定的参考价值。
- 什么是servlet?
- servlet是sun公司制定的一种用来拓张web服务器功能的一个组件规范。
- 组件和容器?
- 组件:
- 为了实现特定的规范并且可以进行单独部署的软件模块,组件一般是用来实现具体的业务逻辑的,而且组件必须依赖容器而运行。
- 容器:
- 为了实现特定的规范的程序,他提供了组件运行的环境,并且可用来管理组件的生命周期,一般常见的web容器都在tomcat、weblogic、was、包含着。
- 组件:
- servlet是怎么运行的?
- 当用户在浏览器上输入:http://ip:port/helloweb/hello?name=zh后
- 连接了服务器,通过ip:port来连接的;
- 浏览器将请求数据按照http协议进行打包(数据包),把数据包发送给服务器,这个数据包中包含了资源路径(工程名之后的所有东西)以及包含了浏览器自动生成的一些信息;
- 服务器生成了两个对象:请求对象(request)和响应对象(response),服务器开始解析请求数据包,将解析的数据包里面的数据存放在请求对象中,方便servlet读取这个请求对象里的数据,注意:请求对象必须是HttpServletRequest接口的一个实现,响应对象必须是HttpServletResponse的一个实现。
- 通过资源路径找到相应的Servelet配置,通过反射来创建一个servlet的实例,然后进行调用servlet实例的service()方法;
- 服务器获取到response对象中的数据之后,按照http的协议打成一个数据包再发送给浏览器。
- 浏览器进行解析这个数据包,取出响应,生成相映的动态页面
- 图例
- Servlet实例的创建方法?
- 继承HttpServlet这个类
- 实现Servlet接口
- 实现Servlet接口,必须实现接口的5个抽象方法。从抽象方法里面看到我们servlet实例的生命周期,我们servlet的生命周期主要是分为4个阶段:实例被构造、实例初始化、实例业务逻辑处理、实例被销毁。需要注意的是:在默认的情况下,实例不会随着tomcat的启动而创建。实例被销毁的方法,也不会随着浏览器的关闭或者service方法的结束而调用,而是在tomcat服务器关闭的时候被调用;
- 在某些时候,我们需要某些Servlet实例随着tomcat的启动而启动,那么此时,需要在web.xml文件中指定的servlet标签里加上一个<load-on-startup>这个标签即可,它代表的是servlet启动的优先级,这个标签内部写正整数,0为优先级最大,注意:如果多个servlet的实例的优先级设置为相同的话,那么由tomcat来决定谁先执行,不建议多个servlet使用同一个优先级
- 实现接口与继承类的区别:
- 除了继承和实现这两者固有的区别(继承的开发效率高)之外,最重要的区别是HttpServlet这个类可以提供对Http协议的支持。
- Servlet的生命周期
- 实例创建,实例的创建分为两种情况:第一种,当请求到达容器的时候,容器会去经查是否存在servlet实例,如果不存在,则会创建;第二种,当容器启动的时候,容器会去检查web.xml中是否存在load-on-startup这个标签,如果存在,则按照优先级来创建servlet实例;
- 初始化阶段,在这个阶段里,servlet对init发方法进行了重载,如果你在使用带参数的init方法的时候,注意不要删除super.init(config);
- 业务逻辑处理阶段(调用/就绪),这个阶段是可以多次执行的,并且我们可以根据表单的提交方式来调用doGet方法还是doPost方法,理论上是不允许doGet/doPost和service方法同时出现的情况;
- 销毁阶段,即销毁的是servlet对象,并且释放所有的资源,注意了init和distory在整个生命周期中,有且只会执行一次,而service方法有可能执行多次
以上是关于Servlet的主要内容,如果未能解决你的问题,请参考以下文章