Servlet:
是使用java语言编写的服务器端的程序,可以像JSP一样,生成动态的Web页面。
Servlet主要运行在服务器上并且由服务器调用执行,是一种按照Servlet标准开发的类。
Servlet带给开发人员最大的好处是,
它可以处理客户端发送来的HTTP请求,并且可以返回一个HTTP响应。
在Servlet程序中最重要的是Servlet接口,在此接口中定义一个子类:GenericServlet
一般情况下我们不会直接使用此类,而是根据当前所使用的协议,选择此类的子类。
比如我们现在所使用的协议是HTTP协议,所以一般我们使用HttpServlet。
在Servlet中存在两个常用的方法:
- doGet方法:用来处理客户端发送过来的get请求
- doPost方法:用来处理客户端发送过来的post请求
- 在以上两个方法中,
存在HttpServletRequest类型参数以及HttpServletResponse类型的参数。
我们想要创建一个Servlet程序,我们可以自定义一个类继承HttpServlet类,
然后在web.xml文件中,编写对应的代码描述清楚这个Servlet子类的映射关系。
在web.xml中,需要编写:
- < servlet >< /servlet >标签:用来定义Servlet的
在此标签中存在两个子标签:
< servlet-name >< /servlet-name >:
用来给Servlet起一个别名。
< servlet-class >< /servlet-class >:
用来表明Servlet对应的是哪一个具体Servlet类。 - < servlet-mapping >< /servlet-mapping >标签:用来给Servlet设置映射的URL的
我们想要访问一个Servlet程序,需要通过请求URL来进行访问,
此标签就是用来设置Servlet对应的URL的。其中包含两个子标签:
< servlet-name >< /servlet-name >:
选择当我们通过URL进行访问的时候,此URL对应的Servlet的别名。
< url-pattern >< /url-pattern >:给Servlet设置URL的。
Servlet最主要的作用并不是用来显示数据的。我们所有的显示数据的内容应该JSP来完成,Servlet可以用来完成对数据的处理,例如对数据库的CRUD
Servlet的生命周期:
- 加载程序
Web容器负责加载Servlet,当Web容器启动时或者是第一次使用这个Servlet时,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置,成功加载后,web容器会通过反射的方式对Servlet进行实例化。 - 初始化
当一个Servlet被实例化后,容器将调用init方法初始化这个Servlet对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,比如建立数据库的连接等等。如果初始化失败,则此Servlet对象将被直接卸载。 - 服务
当有请求提交的时候,Servlet会调用service方法(常用的是doGet\doPost)进行处理。在service方法中,Servlet可以通过ServletRequest接受客户的请求,可以通过ServletResponse设置响应信息。 - 销毁
当web容器关闭或者检测到一个Servlet要从容器中被删除的时候,会自动调用destory方法,以便让该对象所占用的资源及时的释放。 - 卸载
当一个Servlet调用完destory方法的时候,此实例等待被垃圾回收机制收回,如果需要再次使用此Servlet的时候,会重新调用init方法进行初始化。
Servlet分类:
JSP可以完成的功能Servlet都可以完成,但是Servlet具备很多功能是JSP不能完成的。
从使用上看Servlet分为简单的Servlet、过滤器Servlet、监听器Servlet。
JSP可以完成的只有简单的Servlet的功能。
过滤器Servlet:
过滤器Servlet被称为Filter,Filter是在Servlet2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理某些请求之前提前处理某些资源的时候,我们可以使用过滤器完成操作。
过滤器是以组件的形式绑定到WEB应用程序中的,与其他的WEB应用程序不同的是,过滤器采用链式的方式进行处理。
在Servlet中,如果定义一个过滤器,则直接让一个类实现javax.servlet.Filter:
此接口中定义了三个方法:
1.public void init(FileterConfig filterConfig):过滤器的初始化方法,通过此方法,可以获取初始化的参数。
2.public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):完成具体的过滤操作,通过FilterChain让请求可以继续向下传递。
3.public void destory():过滤器在进行销毁的时候调用。
我们的过滤器在创建完毕之后,必须到Web.xml文件中进行声明才可以使用。
监听器Servlet:
监听器Servlet主要的功能是负责监听Web的各种操作,当相关的事件被触发的时候,或调用相对应的事件处理程序执行操作。
- 对applicaiton监听
javax.servlet.ServletContextListener:对上下文的状态进行监听,可以监听服务器是否启动或者是关闭。
接口中提供的方法:
1.public void contextInitialized(SevletContextEvent sce):监听服务器是否启动,当服务器启动的时候,此方法被调用。
2.public void contextDestory(SevletContextEvent sce):当服务器停止的时候,此方法被调用。
javax.servlet.ServletContextAttributeListener:对上下文中属性进行监听:
接口中提供的方法:
1.pubulic void attributeAdded(ServletContextAttributeEvent scab):当我们向applicaiton范围添加属性的时候被触发
2.pubulic void attributeRemoved(ServletContextAttributeEvent scab):当我们从applicaiton范围删除属性的时候被触发
3.pubulic void attributeReplaced(ServletContextAttributeEvent scab):当我们在applicaiton范围替换属性的时候被触发 - 对session进行监听:
对session的状态进行监听:
javax.servlet.http.HttpSessionListener:
此接口中提供的方法:
1.public void sessionCreated(HttpSessionEvent hse):session被创建的时候自动调用
2.public void sessionDestory(HttpSessionEvent hse):session被销毁的时候自动调用
对session范围的属性进行监听:
javax.servlet.http.HttpSessionAttributeListener
此接口提供的方法:
1.public void attributeAdded(HttpSessionBingdingEvent se):向session范围添加属性的时候调用
2.public void attributeRemoved(HttpSessionBingdingEvent se):向session范围删除属性的时候调用
3.public void attributeReplaced(HttpSessionBingdingEvent se):向session范围替换s属性的时候调用 - 对request进行监听:
对request的状态进行监听:
javax.servlet.ServletRequestListener:
此接口定义的方法:
1.public void requestInitialized(ServletRequestEvent sre):请求开始时调用
2.public void requestDestory(ServletRequestEvent sre):请求结束时调用
对request属性进行监听:
javax.servlet.ServletRequestAttributeListener
此接口提供的方法:
1.public void attributeAdded(ServletRequestAttributeEvent srae):向request添加属性的时候调用
2.public void attributeRemoved(ServletRequestAttributeEvent srae):向request删除属性的时候调用
3.public void attributeReplaced(ServletRequestAttributeEvent srae):向request替换属性的时候调用