1.Servlet
Servlet是一个在服务器运行的类,它于第一次访问时创建,一直驻扎在服务器的Serlvet容器中,直到应用程序线束或服务器关闭才释放。所以,它是一个单例模式。
配置可以用注解的方式进行配置,
@WebServlet(value= {"/student","/stu"})
public class StudentServlet extends HttpServlet {
可以在web.xml文件中进行配置。
student com.bdqn.servlet.StudentServlet student /student 2.过滤器 概述: 过滤器是在客户端与服务器之间设置一个关卡,它可以对语法进行数据的处理过滤,对响应进行数据的处理过滤。请求会通过过滤器,响应也会通过过滤器。如果请求无法通过过滤器,则服务端接收不到客户端的请求。 过滤器的生命周期 它在程序运行时(部署时)就初始化了。然后就一直驻扎服务器,也要到应用程序结束或服务器关闭时才释放资源。 过滤器创建 过滤器的创建需要实现Filter接口。接口中的方法如下:
实现类
package com.bdqn.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterFilter implements Filter {
//此方法是过滤销毁才调用的方法,在程序关闭或服务器关闭时执行
@Override
public void destroy() {
System.out.println(“过滤器被销毁…”);
}
//此方法是对数据进行处理的地方
//
@Override
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println(“请求通过过滤器…”);
//对请求与响应的数据进行编码设置.
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
//放行,否则请求会永远停留在此。
chain.doFilter(request, response);
}
//在程序部署时就执行
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("过滤器被初始化..");
}
}
过滤器配置
过滤器可以用注解的方式配置,
// /* 表示所有的请求都进行过滤 /.html只过滤请求html页面
// /admin/ 表示请求admin目录下的所有资源都会被过滤
@WebFilter("/*")
public class CharacterFilter implements Filter {
可以像Servlet一样在web.xml文件中进行配置。
3.监听器
概述
它起到监听的作用,针对程序运行过程中的某事物发生做监听,如果事情发生,监听器则做出相关对应的响应。
常用的监听器
监听器配置:
注解配置
@WebListener
public class CountUserListener implements HttpSessionListener
Web.xml中配置:
com.bdqn.Listener.CountUserListener 实现网站在线人数 package com.bdqn.Listener;import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import oracle.jrockit.jfr.tools.ConCatRepository;
/**
-
HttpSessionListener此监听器可以监听到Session的开启与销毁
-
@author Administrator
*/
@WebListener
public class CountUserListener implements HttpSessionListener {
//当Session创建时,自动执行此方法
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println(“创建了一个Session”);
//一旦Session创建,则向application中的记数器加 1
//arg0.getSession()这是Session对象
//arg0.getSession().getServletContext()这是访问到Application对象
//判断是否有这个属性,如果没有,则是第一个人。
if(arg0.getSession().getServletContext().getAttribute(“count”) == null)
arg0.getSession().getServletContext().setAttribute(“count”, 1);
else {
//取出记数器
int count = Integer.parseInt( arg0.getSession().getServletContext().getAttribute(“count”)+"");
count++; //记数器累加
//重新保存在线人数到application对象中
arg0.getSession().getServletContext().setAttribute(“count”, count);
}
}@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println(“Ssession被销毁…”);
//一旦Session销毁,则向application中的记数器减 1
int count = Integer.parseInt( arg0.getSession().getServletContext().getAttribute(“count”)+"");
count–; //记数器减1
arg0.getSession().getServletContext().setAttribute(“count”, count);
}
}
Jsp页面处理
<%
String count=“0”;
if (application.getAttribute(“count”) != null) {
count = application.getAttribute(“count”).toString();
out.print(“在线人数:”+count);
}
%>