Web应用需要遵循哪些规范
主要包括目录结构,文件存放方式等方面的规范,比如Java Web程序的所有文件需要包含在一个文件夹中,这个文件夹就是我们的应用程序文件夹,在eclipse下就是建立一个工程的那个目录,应用程序文件夹下还需要包括一个WEB-INF文件夹,WEB-INF文件夹还需要包括Classes文件夹和lib文件夹,以及web.xml描述文件
第三方的jar文件需要放在WEB-INF文件夹下的lib文件夹下
web.xml文件里定义了应用程序可以访问的资源和这些资源的行为,包括Servlet、过滤器、监听器等
像JSP、HTML、图片、声音等这些文件需要放在与WEB-INF同级的目录中,因为WEB-INF文件夹对于客户端是不可见的
过滤器的作用
当web容器收到一个对某个资源的请求时,web容器会判断是否有过滤器与该信息资源关联,如果有的话,会把请求一一的交给这些过滤器处理,然后再交给目标资源,同样,响应的时候就会以相反的顺序交给过滤器处理,然后再返回给浏览器
过滤器的工作原理
过滤器也像Servlet一样需要编写和配置
过滤器编写
过滤器需要实现javax.servlet.Filter接口,该接口的doFilter方法就是过滤器的核心代码区,类似于Servlet的service方法,doFilter方法的参数列表中有一个FilterChain接口的实现对象,在doFilter的核心代码区中可以调用FilterChain对象引用chain的doFilter方法,注意这是两个doFilter方法。
在调用chain的doFilter方法之前的代码会在资源到达之前执行,在调用chain的doFilter方法之后的代码会在资源到达之后执行
过滤器配置
同样是<filter>标签和<filter-mapping>标签,<filter>标签中有<filter-name>和<filter-class>,<filter-mapping>中有<filter-name>和<url-pattern>,这样凡是在<url-pattern>中匹配的资源请求都会经过该过滤器
web应用程序各类的范围模型
Request代表HTTP请求,它的生命周期从请求开始到请求结束为止,中间可以穿插多个信息资源,比如过滤器、Servlet、JSP等
Session代表会话,也可以认为代表了一个用户,一次会话过程中可以包含多个请求,而一般一个用户对应一个会话,所以会话中也经常保存用户的数据
Application代表一个web应用,它的生命周期从web容器启动开始,以web容器停止结束,一般用于存放应用标题或者其他外部资源连接器等
web应用程序中的监听器
web应用程序的监听器是针对web生命周期的3种事件进行监听
针对request事件的监听器,需要实现java.servlet.ServletRequestListener接口,它有两个方法requestInitialized和requestDestroyed方法,分别是请求初始化的代码以及请求销毁时的代码
针对session事件的监听器,需要实现java.servlet.http.HttpSessionListener接口,也是有两个方法,sessionCreate以及SessionDestroyed方法
针对Application事件的监听器,需要实现java.servlet.ServletContextListener,也包含两个方法,ContextInitialized和Destroyed方法