以下我是归纳的过滤器监听器知识点图:
图上的知识点都可以在我其他的文章内找到相应内容
如果文章有错的地方欢迎指正, 大家互相交流习惯在微信看技术文章的同学, 可以关注微信公众号: Java3y
监听器常见面试题
监听器有哪些作用和用法?
监听器有哪些作用和用法?
Java web 开发中的监听器 (listener) 就是 applicationsessionrequest 三个对象创建销毁或者往其中添加修改删除属性时自动执行代码的功能组件, 如下所示:
ServletContextListener: 对 Servlet 上下文的创建和销毁进行监听
ServletContextAttributeListener: 监听 Servlet 上下文属性的添加删除和替换
HttpSessionListener: 对 Session 的创建和销毁进行监听
补 充: session 的销毁有两种情况:
session 超时(可以在 web.xml 中通过
<session- config>/<session-timeout>
标签配置超时时间);
通过调用 session 对象的 invalidate()方 法使 session 失效
HttpSessionAttributeListener: 对 Session 对象中属性的添加删除和替换进行监听
ServletRequestListener: 对请求对象的初始化和销毁进行监听
ServletRequestAttributeListener: 对请求对象属性的添加删除和替换进行监听
常见的监听器用途主要包括: 网站在线人数技术监听用户的行为(管理员踢人)
过滤器常见面试题
过滤器有哪些作用和用法?
过滤器有哪些作用和用法?
Java Web 开发中的过滤器 (filter) 是从 Servlet 2.3 规范开始增加的功能, 并在 Servlet 2.4 规范中得到增强对 Web 应用来说, 过滤器是一个驻留在服务器端的 Web 组件, 它可以截取客户端和服务器之间的请求与响应信息, 并对这些信息进行过 滤当 Web 容器接受到一个对资源的请求时, 它将判断是否有过滤器与这个资源相关联如果有, 那么容器将把请求交给过滤器进行处理在过滤器中, 你可以改 变请求的内容, 或者重新设置请求的报头信息, 然后再将请求发送给目标资源当目标资源对请求作出响应时候, 容器同样会将响应先转发给过滤器, 再过滤器中, 你可以对响应的内容进行转换, 然后再将响应发送到客户端
常见的过滤器用途主要包括: 对用户请求进行统一认证对用户的访问请求进行记录和审核对用户发送的数据进行过滤或替换转换图象格式对响应内容进行压缩以减少传输量对请求或响应进行加解密处理触发资源访问事件对 XML 的输出应用 XSLT 等
和过滤器相关的接口主要有: FilterFilterConfigFilterChain
Java Web 常见面试题
web.xml 的作用?
web.xml 的作用?
答: 用于配置 Web 应用的相关信息, 如: 监听器 (listener) 过滤器(filter) Servlet 相关参数会话超时时间安全验证方式错误页面等例如:
配置 Spring 上下文加载监听器加载 Spring 配置文件:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
配置 Spring 的 OpenSessionInView 过滤器来解决延迟加载和 Hibernate 会话关闭的矛盾:
- <filter>
- <filter-name>openSessionInView</filter-name>
- <filter-class>
- org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>openSessionInView</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
配置会话超时时间为 10 分钟:
- <session-config>
- <session-timeout>10</session-timeout>
- </session-config>
配置 404 和 Exception 的错误页面:
[html] view plaincopy 在 CODE 上查看代码片派生到我的代码片
- <error-page>
- <error-code>404</error-code>
- <location>/error.jsp</location>
- </error-page>
- <error-page>
- <exception-type>java.lang.Exception</exception-type>
- <location>/error.jsp</location>
- </error-page>
配置安全认证方式:
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>ProtectedArea</web-resource-name>
- <url-pattern>/admin/*</url-pattern>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- </web-resource-collection>
- <auth-constraint>
- <role-name>admin</role-name>
- </auth-constraint>
- </security-constraint>
- <login-config>
- <auth-method>BASIC</auth-method>
- </login-config>
- <security-role>
- <role-name>admin</role-name>
- </security-role>
补 充 1 从 Servlet 3 开始, 可以不用在 web.xml 中部署 Servlet(小服务)Filter(过滤器)Listener(监听器)等 Web 组件, Servlet 3 提供了基于注解的部署方式, 可以分别使用 @WebServlet@WebFilter@WebListener 三个部署小服务过滤器监听器
补充 2 如果 Web 提供了有价值的商业信息或者是敏感数据, 那么站点的安全性就是必须考虑的问题安全认证是实现安全性的重要手段, 认证就是要解决 Are you who you say you are? 的问题认证的方式非常多, 简单说来可以分为三类:
A.What you know? -- 口令
B.What you have? -- 数字证书(U 盾密保卡)
C.Who you are? -- 指纹识别虹膜识别
在 Tomcat 中可以通过建立安全套接字层 (Secure Socket Layer, SSL) 以及通过基本验证或表单验证来实现对安全性的支持
Servlet 3 中的异步处理指的是什么?
Servlet 3 中的异步处理指的是什么?
答: 在 Servlet 3 中引入了一项新的技术可以让 Servlet 异步处理请求有人可能会质疑, 既然都有多线程了, 还需要异步处理请求吗? 答案是肯定的, 因为如果一个任务处 理时间相当长, 那么 Servlet 或 Filter 会一直占用着请求处理线程直到任务结束, 随着并发用户的增加, 容器将会遭遇线程超出的风险, 这这种情况下 很多的请求将会被堆积起来而后续的请求可能会遭遇拒绝服务, 直到有资源可以处理请求为止异步特性可以帮助应用节省容器中的线程, 特别适合执行时间长而且 用户需要得到结果的任务, 如果用户不需要得到结果则直接将一个 Runnable 对象交给 Executor(如果不清楚请查看前文关于多线程和线程池的部 分)并立即返回即可
开启异步处理代码:
- @WebServlet(urlPatterns = {"/async"}, asyncSupported = true)
- public class AsyncServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- public void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- // 开启 Tomcat 异步 Servlet 支持
- req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
- final AsyncContext ctx = req.startAsync(); // 启动异步处理的上下文
- // ctx.setTimeout(30000);
- ctx.start(new Runnable() {
- @Override
- public void run() {
- // 在此处添加异步处理的代码
- ctx.complete();
- }
- });
- }
- }
来源: https://www.cnblogs.com/Java3y/p/8442515.html