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 的顺序, 在前面的先执行, 后面的后执行
来源: http://www.bubuko.com/infodetail-2997342.html