Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用于交互式地浏览和生成数据,生成动态Web内容。
进化史
-
实现Servlet接口必须实现所有方法
-
GenericServlet抽象类:只需重写需要的方法
-
HttpServlet继承自GenericServlet类,将ServletRequst和ServletResponse对象分别转换程HttpServletRequest和HttpServletResponse
-
JSP 不需要编译的Servlet
- EL表达式轻松访问应用程序对象
- JSTL标签库在EL的基础上进一步解决了遍历Map,集合,条件测试,XML处理,数据库操作访问等操作的问题
- Filter拦截Request请求
-
Spring MVC
Servlet动态加载可以在不重启web应用前提下添加新的web对象
实现依赖注入方法 Module模型:JavaBeans
View视图:JSP页面
Controller控制器:Servlet
请求响应流程

- Web服务器将Http请求传给Servlet容器
- Servlet容器
- 根据请求链接创建Servlet(init()))
- 创建ServletRequest封装请求,同时创建ServletResponse封装响应
- 调用Web应用定 义的过滤器链(递归调用),链尾会调用Servlet
- 调用Servlet处理请求(service(ServletRequest,ServletResponse))
- Servlet处理请求,结束Web过滤器链的递归调用
- Servlet容器根据ServletResponse中生成HTTP响应,并传给Web服务器
web服务器
即HTTP服务器,仅能响应静态html页面请求,单向连接于Servlet容器以响应动态资源
Apache
- 当今(2019.6.20)世界上最流行的Web服务器,可以处理浏览器的HTTP请求,默认端口为80
- Apache只支持HTML等静态普通网页,可以单向连通Tomcat(Apache可以访问Tomcat的资源,反之不然)
Servlet容器
Servlet容器是Web服务器的一部分
-
为Servlet提供运行环境,通过XML文件配置Servlet,加载、实例化、调用和回收Servlet
-
单个Web项目会被Servlet容器封装成ServletContext
Web应用ServletContext
-
获取
getServletContext -
提供全局域
get/set/removeAttribute 全局属性键值对 -
获取全局配置
getInitParameter 读取全局参数(需在web.xml中配置<context-param>) -
获取工程目录下的资源文件
getRealPath 目录绝对路径
getResourceAsStream 获取资源的输入流 -
监听Web启动和终止
Servlet容器启动或终止Web应用(Context)时,触发事件ServletContextEvent,调用ServletContextListener接口
contextInitialized 此方法在Filter初始化前调用
contextDestoryed 此方法在所有Servlet和Filter销毁后调用- 重写ServletContextListener接口
- 在web.xml配置 <listener><listener-class>重写类/>/>
Servlet过滤器Filter
Web服务器不会直接调用指定web资源(Servlet)的service方法前后,而是通过调用FilterChain的doFilter方法调用对应Servlet的service方法
FilterChain.doFilter(ServletRequest req,ServletResponse resp,FilterChain chain):
- 如果链中有下一个Filter,调用其doFilter(req,resp,chain)方法
- 否则,调用指定Servlet的service(req,resp)方法
自定义Filter.doFilter(ServletRequest req,ServletResponse resp,FilterChain chain):
- 通过调用chain.doFilter(req,resp,chain)实现递归调用整个链中所有Filter的过滤方法并最终调用Servlet的service(req,resp)方法
常用过滤器
详情参考博客园文章《Tomcat常用的过滤器》
作用 | 过滤器 |
---|---|
控制跨域请求的访问权限 | CorsFilter |
防止跨站请求伪造(Cross-site request forgery) | CsrfPreventionFilter |
防止参数丢失 | FailedRequestFilter |
获取客户端IP | RemoteAddrFilter |
获取客户端主机 | RemoteHostFilter |
获取原始客户端IP | RemoteIpFilter |
设置字符编码 | SetCharacterEncodingFilter |
网友评论