Filter
Filter:过滤器,用来过滤网站得数据;
- 处理中文乱码
- 登录验证
1.导包
2.编写过滤器
public class showServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("你好呀世界");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
public class CharacterEncodingFilter implements Filter {
//初始化web服务器启动得时候就会初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter is init");
}
//chain : 链得意思
/*
1.过滤红得所有代码,在过滤特定请求都会执行
2.必须药让过滤器继续同行
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("执行前");
chain.doFilter(request,response); //让我们得请求继续走,如果不写程序,到这里就回被拦截
System.out.println("执行后");
}
//销毁
public void destroy() {
System.out.println("CharacterEncodingFiltery已经销毁");
}
}
在Webxml中配置过滤器.
<servlet>
<servlet-name>showServlet</servlet-name>
<servlet-class>org.westos.filter.showServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showServlet</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>showServlet1</servlet-name>
<servlet-class>org.westos.filter.showServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showServlet1</servlet-name>
<url-pattern>/servlet/s1</url-pattern>
</servlet-mapping>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.westos.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
服务器开始得时候,就可以初始化.
服务器关闭得时候,就销毁,过滤器
监听器
public class OnlinecointListener implements HttpSessionListener {
//创建Session监听:看你得举动
public void sessionCreated(HttpSessionEvent se) {
System.out.println(se.getSession().getId());
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count + 1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
//销毁session监听
//一旦销毁Session就会触发一次这个事件
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count-1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
/*
session 销毁
1.手动销毁
2.自动销毁
<session-config>
<session-timeout> 1 </session-timeout>
</session-config>
*/
}
在前端页面只要把 getServletContext().getAttribute(“OnlineCount”)拿出来就行
过滤器\监听器常见实现
网页过滤小实例
用过滤器去做一个登陆返回得测试
//定义一个常量
public class Constant {
public static final String USER_SESSION= "USER_SESSION";
}
//页面监听
public class loginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
if (username.equals("admin")) {
req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
System.out.println(req.getSession().getAttribute(Constant.USER_SESSION));
resp.sendRedirect("/sys/success.jsp");
}else {
resp.sendRedirect("/error.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//过滤器
public class Sysfilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
if (request.getSession().getAttribute("USER_SESSION") == null) {
response.sendRedirect("/login.jsp");
}
chain.doFilter(request,response);
}
public void destroy() {
}
}
xml配置
<filter>
<filter-name>sysfile</filter-name>
<filter-class>org.westos.filter.Sysfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sysfile</filter-name>
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>org.westos.servlet.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
几个测试界面
登陆错误界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>错误页面</h1>
<a href="/login.jsp">返回登陆页面</a>
</body>
</html>
登陆成功界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>主页</h1>
<a href="/loginOut">注销</a>
</body>
</html>
登陆界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username" >
<input type="submit">
</form>
</body>
</html>