一.过滤器(filter)
1.作用
主要用于在Servlet之外对request或response进行修改。可以对用户的请求进行预处理,也可以对HttpServletResponse进行后处理
2.处理流程
单个过滤器流程:
客户端→服务器→过滤器chain.doFilter(request, response)请求到达资源之前的代码→要访问的资源→过滤器chain.doFilter(request, response)响应到达客户端之后的代码→客户端
多个过滤器流程
3.处理字符乱码
GET:
1.请求
Tomcat8及以上,不需要处理
Tomcat7及以下,需要处理乱码
new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
2.响应
response.setContentType("text/html;charset=UTF-8");
POST
1.请求
//Tomcat8及以上,需要处理乱码, request.setCharacterEncoding("UTF-8"); //Tomcat7及以下,需要处理乱码, request.setCharacterEncoding("UTF-8");
2.响应
response.setContentType("text/html;charset=UTF-8");
二.监听器
1.作用
监听器是Servlet中的一种特殊的类,主要用来监听web中的特定事件。
2.八种监听器
(1).监听生命周期(三个域对象的创建和销毁)
实现接口ServletRequestListener、HttpSessionLintener、ServletContextListener
(2).监听值的变化(属性的添加、移除和修改)
实现接口 ServletRequestAttributeListener、 HttpSessionAttributeListener、ServletContextAttributeListener
(3).针对 session 中的对象
:监听 session 中的 java 对象(javaBean),javaBean 直接实现监听器的 接口 HttpSessionBindingListener、HttpSessionActivationListener。
3.创建监听器实现在线人数的监控
1.创建listener监听
public class Listener01 implements HttpSessionListener {
int onlinePeople = 0;
/**
* 监听SESSION创建
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
onlinePeople ++;
// 不同用户不同session,除非重新创建一个session才是最新的人数
//se.getSession().setAttribute("onlinePeople", onlinePeople);
se.getSession().getServletContext().setAttribute("onlinePeople", onlinePeople);
System.out.println("session创建了。。。");
}
/**
* 监听SESSION销毁
* 正常关闭服务器不会销毁,因为会自动序列化到本地
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
onlinePeople --;
//se.getSession().setAttribute("onlinePeople", onlinePeople);
se.getSession().getServletContext().setAttribute("onlinePeople", onlinePeople);
System.out.println("session销毁了。。。");
}
}
2.测试
public class OnlineServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 得到session对象
HttpSession session = request.getSession();
// 得到session作用域中的值
int onlineNumber = (int) session.getAttribute("onlineNumber");
// 显示在页面上
response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("<h1>当前在线 " + onlineNumber + " 人</h1>");
}
}
3.设置XML
<listener>
<listener-class>com.mage.listener.OnlineListener</listener-class>
</listener>
三.Servlet3.0注解
@WebServlet
@WebServlet("/s01")
@WebServlet(name = "servlet01",value = "/s01")
@WebServlet(name = "servlet01",urlPatterns = {"/s01","/s001"})
@WebServlet(loadOnStartup=1,urlPatterns={"/s001","/s003"})
@WebFilter
@WebFilter(filterName = "filter01",urlPatterns = "/*")
@WebListener
Servlet3.0 提供 @WebListener 注解将一个实现了特定监听器接口的类定义为监听器。比如将实现
了 ServletSessionListener 接口的类标注为监听器。
@WebListener
@MultipartConfig
@WebServlet("/upload")
@MultipartConfig
定监听器接口的类定义为监听器。比如将实现
了 ServletSessionListener 接口的类标注为监听器。
@WebListener
@MultipartConfig
@WebServlet("/upload")
@MultipartConfig