您现在的位置是:主页 > news > 郑州汉狮做网站多少钱/优化建站
郑州汉狮做网站多少钱/优化建站
admin2025/5/5 22:22:15【news】
简介郑州汉狮做网站多少钱,优化建站,怎么做响应式网站,信誉好的郑州网站建设javaWeb的三大组件:Servlet、Filter和Listener 过滤器 介绍 过滤器(Filter)也称为拦截器,它是Servlet技术中非常实用的技术,Web开发人员通过Filter技术,可以在用户访问某个Web资源(JSP、Servlet、HTML、图片、CSS等)之前&#x…
郑州汉狮做网站多少钱,优化建站,怎么做响应式网站,信誉好的郑州网站建设javaWeb的三大组件:Servlet、Filter和Listener 过滤器
介绍
过滤器(Filter)也称为拦截器,它是Servlet技术中非常实用的技术,Web开发人员通过Filter技术,可以在用户访问某个Web资源(JSP、Servlet、HTML、图片、CSS等)之前&#x…
javaWeb的三大组件:Servlet、Filter和Listener
过滤器
介绍
- 过滤器(Filter)也称为拦截器,它是Servlet技术中非常实用的技术,
- Web开发人员通过Filter技术,可以在用户访问某个Web资源(JSP、Servlet、HTML、图片、CSS等)之前,对访问的请求和响应进行拦截,从而实现一些特殊功能。
- 例如:验证用户访问权限、记录用户操作、对请求进行重新编码、压缩响应信息等。
运行原理
- 当用户的请求到达指定的网页之前,可以借助过滤器来改变这些请求的内容,此过程也称为“预处理”;
- 当执行结果要响应到用户之前,可经过过滤器修改响应输出的内容,此过程称为“后处理”。
- 运行过程
- Web容器判断接收的请求资源是否有与之匹配的过滤器,如果有,容器将请求交给相应过滤器进行处理;
- 在过滤器预处理过程中,可以改变请求的内容,或者重新设置请求的报头信息,然后将请求发给目标资源;
- 目标资源对请求进行处理后作出响应;
- 容器将响应转发回过滤器;
- 在过滤器后处理过程中,可以根据需求对响应的内容进行修改;
- Web容器将响应发送回客户端。
过滤器链:在一个Web应用中,也可以部署多个过滤器,这些过滤器组成了一个过滤器链。
例题1:创建一个过滤器,实现网站访问计数器的功能,并配置网站访问量的初始值设置为6000。
package cn.sdut.filter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;@WebFilter(urlPatterns= {"/index.jsp"},initParams = {@WebInitParam(name = "count",value="60000")})
public class CounterFilter implements Filter {private int count;public CounterFilter() {// TODO Auto-generated constructor stub}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {count++;//访问数量自增//将ServletRequest转换成HttpServletRequestHttpServletRequest req = (HttpServletRequest) request;//获取ServletContextServletContext context = req.getSession().getServletContext();context.setAttribute("count", count);//将来访数量放到ServletContext中chain.doFilter(request, response);//向下传递过滤器}public void init(FilterConfig fConfig) throws ServletException {String param = fConfig.getInitParameter("count");//获取初始化参数count = Integer.valueOf(param);}}
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"></head>
<title>主界面</title>
</head>
<body><h2>欢迎光临,<br/>您是本站的第【<%=application.getAttribute("count") %>】位访客!</h2>
</body>
</html>
监听器
什么是监听器?
监听器就是一个实现特定接口的普通的java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器的某个方法将立即被执行。
Web容器运行过程中,有哪些关键点事件?
Web应用被启动、用户会话开始、用户会话结束、用户请求到达等。
监听器监听的事件源有几种?
三种。ServletContext、HttpSession和ServletRequest三种域对象。
针对以上三种对象,又把这多种类型的监听器划分为三种类型:
- 监听三个域对象创建和销毁的事件监听器
- 监听域对象中属性的增加和删除的事件监听器
- 监听绑定到HttpSession域中的某个对象的状态的事件监听器。
Listener接口 | Event类 |
---|---|
ServletContextList | ServletContextEvent |
ServletContextAttributeListener | ServletContextAttributeEvent |
HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | |
HttpSessionAttributeListener | HttpSessionBindingEvent |
HttpSessionBindingListener | |
ServletRequestListener | ServletRequestEvent |
ServletRequestAttributeListener | ServletRequestAttributeEvent |
监听器的实现步骤
1、写一个类,实现监听器接口的所有方法
2、使用注解或者web.xml中进行监听器的配置
注解配置 @WebListener
web.xml中配置
<listener>
<listener-class>全限定类名</listener-class>
</listener>
示例:
package cn.sdut.listener;import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;@WebListener
public class OnlineNumberListenerr implements HttpSessionListener {int count=0;public void sessionCreated(HttpSessionEvent arg0) { //session会话创建时,web容器自动调用此方法count++;ServletContext context = arg0.getSession().getServletContext();context.setAttribute("onlineNum", count);}public void sessionDestroyed(HttpSessionEvent arg0) { //session会话销毁时,web容器自动调用此方法count--;ServletContext context = arg0.getSession().getServletContext();context.setAttribute("onlineNum", count);}}
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>主界面</title>
</head>
<body>欢迎你,<%String name = (String)session.getAttribute("name");out.print(name);%><br><p>当前在线人数: ${onlineNum }</p><br><a href="LogoutServlet">退出登录</a>
</body>
</html>