- 过滤器Filter
- 过滤器基础
- 编码过滤器
- 模拟权限拦截
- 监听器
- 监听器基础
- 监听在线人数
学习:https://www.jianshu.com/p/33827fba6429
编码过滤器过滤器java
public class CharacterEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
//过滤操作
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("过滤前");
filterChain.doFilter(servletRequest,servletResponse); //可能会有多个过滤器,让程序继续过滤。必须加上这个代码
System.out.println("过滤后");
}
@Override
public void destroy() {
System.out.println("销毁");
}
}
xml配置
模拟权限拦截filter com.yuan.filter.CharacterEncodingFilter filter /servlet/*
简单工具类
public class Name {
public static String USERNAME = "username";
}
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
loginServlet
public class loginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter(Name.USERNAME);
if(username.equals("admin")){
req.getSession().setAttribute(Name.USERNAME, username);
resp.sendRedirect("/sys/success.jsp");
}else{
resp.sendRedirect("/error.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
UserFilter
public class UserFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
Object attribute = req.getSession().getAttribute(Name.USERNAME);
if(attribute==null){
resp.sendRedirect("/error.jsp");
}
filterChain.doFilter(req,resp);
}
@Override
public void destroy() {
}
}
sys.successful
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
登陆成功
logoutServlet
public class logoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().removeAttribute(Name.USERNAME);
resp.sendRedirect("/login.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
权限不够
xml配置
监听器 监听器基础UserFilter com.yuan.filter.UserFilter UserFilter /sys/*
学习:https://www.cnblogs.com/xing901022/p/4378727.html
监听在线人数监听器java
监听在线人数,创建session时人数+1,销毁session时人数-1
public class OnlineCounterListener implements HttpSessionListener {
@Override
//session创建监听
//有session创建时就会触发
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//用ServletContext存放数据
ServletContext context = httpSessionEvent.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if(count==null){
count = new Integer(1);
}else{
int i = count.intValue();
count = new Integer(i+10);
}
context.setAttribute("count",count);
}
@Override
//session销毁监听
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//用ServletContext存放数据
ServletContext context = httpSessionEvent.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if(count==null){
count = new Integer(0);
}else{
int i = count.intValue();
count = new Integer(i-1);
}
context.setAttribute("count",count);
}
}
xml配置
com.yuan.listener.OnlineCounterListener
jsp
显示数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
$Title$
在线观看人数为:<%=this.getServletConfig().getServletContext().getAttribute("count")%>



