week 4 Introduce of servlet and filter

avaWeb三大组件指的是:Servlet、Filter、Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet、Filter,比如我),很难接触到第三个组件,因此对原始JavaWeb开发还不够熟悉,在这种情况下进行框架学习,这种做法是并不可取,框架是大牛们对原始JavaWeb进行封装的结果,没有原始JavaWeb开发基础是很难真正学会框架的。这篇博客就是通过简单的介绍JavaWeb的三大组件来熟悉原始JavaWeb开发。
  本博客内容参考以下博客:
  http://blog.csdn.net/z498596750/article/details/52555027
  http://blog.csdn.net/xxssyyyyssxx/article/details/50007833
  http://blog.csdn.net/zhaoliyou/article/details/52453050

1、Servlet
Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理。
Servlet的任务有:

接收请求数据:我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头、参数等各种信息。
处理请求:通常我们会在service、doPost或者doGet方法进行接收参数,并且调用业务层(service)的方法来处理请求。
完成响应:处理完请求后,我们一般会转发(forward)或者重定向(redirect)到某个页面,转发是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,两者是有很大区别的。

Servlet的创建:Servlet可以在第一次接收请求时被创建,也可以在在服务器启动时就被创建,这需要在web.xml的< servlet>中添加一条配置信息    < load-on-startup>5< /load-on-startup>,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则指示容器在该servlet被请求时才加载。
Servlet的生命周期方法:
> void init(ServletConfig)
1
servlet的初始化方法,只在创建servlet实例时候调用一次,Servlet是单例的,整个服务器就只创建一个同类型Servlet
> void service(ServletRequest,ServletResponse)
1
servlet的处理请求方法,在servle被请求时,会被马上调用,每处理一次请求,就会被调用一次。ServletRequest类为请求类,ServletResponse类为响应类
> void destory()
1
servlet销毁之前执行的方法,只执行一次,用于释放servlet占有的资源,通常Servlet是没什么可要释放的,所以该方法一般都是空的
Servlet的其他重要方法:
> ServletConfig getServletConfig()
1
获取servlet的配置信息的方法,所谓的配置信息就是WEB-INF目录下的web.xml中的servlet标签里面的信息
> String getServletInfo()
1
获取servlet的信息方法
Servlet的配置:
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.briup.estore.web.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>12345678
2、Filter
filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都又三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、 但是servlet主要负责处理请求,而filter主要负责拦截请求,和放行。
filter四种拦截方式

REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、< jsp:forward>标签都是转发访问;
INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、< jsp:include>标签都是包含访问;
ERROR:当目标资源在web.xml中配置为< error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

url-mapping的写法
匹配规则有三种:

精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
< url-pattern>的其他写法,如/foo/ ,/.htm ,/foo 都是不对的。

执行filter的顺序
如果有多个过滤器都匹配该请求,顺序决定于web.xml filter-mapping的顺序,在前面的先执行,后面的后执行

猜你喜欢

转载自www.cnblogs.com/EST-woah/p/10564047.html