java web分享ppt大纲 -- servlet包

 概述

  • servlet相关代码所在包:

javax.servlet 

javax.servlet.http

  • 常用的功能模块

Servlet,filter,listener

  • 常用的相关类:

servletContext 

servletConfig

HttpServletRequest

HttpServletResponse

HttpSession

Cookie

 servlet

  • 定义

Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求与服务器响应的中间层

  • servlet生命周期

初始化阶段 init():

在servlet创建时调用的方法,在整个生命周期仅调用一次,那么servlet什么时候创建那?通常是两种情况:

1 在web.xml里面设置了 <load-on-startup>,则在servlet容器启动时创建,并根据该属性值决定创建的顺序,越小越先创建

2 如果没有设置,则是在用户第一次对该servlet发出请求时调用

在容器启动时创建的功能,通常可以被一些框架所利用,做路由控制和其他的全局操控,例如springmvc及jersey等框架

响应客户请求阶段 service(),

在客户请求时调用,可以通过多线程处理多个客户的并发请求,通常我们直接或者间接通过这个方法进行web业务逻辑的处理和输出

对doGet,doPost的处理其实多数也是内部调用service的结果

终止阶段 destory()

在servlet销毁时调用的方法,例如关闭servlet容器时。在整个生命周期仅调用一次

filter

  • 定义

能够对目标资源的请求和响应进行截取

 

java web分享ppt大纲 -- servlet包

一个web请求通常会经过一系列filter处理最后交由特定的servlet处理,当然filter自身也可以决定他是否向下把请求传递下去,如果不往下传,他也完全可以充当servlet的角色,例如我们常用的框架struts2.0或者是阿里的webx框架均是从filter实现的,并没有走到servlet中去 

  • 生命周期:

初始化阶段 init(FilterConfig)

初始化filter,整个生命周期只初始化一次

过滤客户的请求阶段 dofilter

对客户的请求进行过滤,可以通过多线程处理多个客户的过滤操作,相关的过滤逻辑写在doFilter中

终止阶段 destory

在filter销毁时调用的方法,例如关闭servlet容器时。在整个生命周期仅调用一次

应用模式:(在filter-mapping中配置 dispatcher)

Request,forward, include,error

默认为request,则为用户实际发起的请求

forward,为服务器内部跳转的请求

include为 jsp中include包含的请求

error为客户请求出现异常时的处理

  • 如何在filter中使用spring注入的bean

方法一:org.springframework.web.filter.DelegatingFilterProxy

该方法为bean的一个代理,可以使用实际的bean来充当filter

方法二:使用原生api,获取ApplicationContext

WebApplicationContextUtils.getWebApplicationContext(servletContext);

listener:

  • 定义

 在web项目中,我们有时候会需要监听一些对象的状态,当状态变化时触发相关的操作,这个时候listener就充当了监听器的角色

 

java web分享ppt大纲 -- servlet包

  • 分类:

简单可以分为事件监听器和生命周期监听器

凡是带有AttributeListener的监听器,都会在属性发生改变时触发,例如HttpSessionAttributeListener会在session的属性添加,修改,删除时触发

其他监听器,一般在该对象创建,销毁时触发,例如我们经常会用到的ServletContextListener监听器,他会在ServletContext创建和销毁时触发相应的方法,依托于此,spring这个框架得以在web项目中载入

 

常用的相关类:

  • servletContext ,servletConfig

这两个可以用来存储servlet 的环境变量,区别是一个是整个项目所有servlet公有的环境变量,一个是单个servlet独占的环境变量。

表现在web.xml上,一个可以是web-app 级别设置的变量(通过init-param),一个是servlet级别下面设置的参数

在编程中应用时,要注意虽然对于每个属性的获取和修改(如果有)操作都是线程安全的,但是组合起来使用却不一定时线程安全的。

  • HttpServletRequest 和 HttpServletResponse

这两个是用户请求和答复的封装类,通过这两个对象,描述用户的请求和回复。一些get,post参数的获取,session,cookie对象在用户请求的提取,都是通过这两个进行操控的

  • HttpSession 和 Cookie

这两个分别操控web项目中用户的session 和 cookie,需要注意的是session同样由于可以被并发访问,要注意读取和写入配合时的线程安全问题