Filter:过滤器 ,用来过滤网站数据。 常用于处理中文乱码
import javax.servlet.*; 在这个包中,别导错了
写一段文字,在浏览器
public class souchar extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("这是一串中文,看看乱不乱码");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
设置过滤器,设置编码格式
public class CharacterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//过滤器初始化,web服务器启动时初始化
}
@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");
filterChain.doFilter(servletRequest,servletResponse);
//FilterChain必须转交req、resp
}
@Override
public void destroy() {
//过滤器销毁
}
}
配置需要过滤的
2、Listenerservlet_char com.jia.servlet.souchar servlet_char /show charFilter com.jia.CharacterFilter charFilter /*
在线人数监听
实现监听器接口
public class countonlinePeople implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineNumber = (Integer) servletContext.getAttribute("onlineNumber");
if(onlineNumber==null){
onlineNumber = 1;
}
else {
onlineNumber++;
}
servletContext.setAttribute("onlineNumber",onlineNumber);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineNumber = (Integer) servletContext.getAttribute("onlineNumber");
if(onlineNumber==null){
onlineNumber = 0;
}
else {
onlineNumber--;
}
servletContext.setAttribute("onlineNumber",onlineNumber);
}
}
注册监听器
com.jia.countOnlinePeople
应用:使用过滤器实现登录
1、登录页面
Title
2、登录页面的servlet(配好servlet的映射)
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getParameter("username").equals("1") && req.getParameter("pwd").equals("1")){
req.getSession().setAttribute("user_success",req.getSession().getId());
//把req的sessionid保存下来,表示该浏览器已经登录,注销则把保存的sessionid移除
resp.sendRedirect("success/success.jsp");
}
else {
resp.sendRedirect("login.jsp");//重写登录
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3、注销登录
public class logout extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//开发中一般不销毁
Object user_session = req.getSession().getAttribute("user_success");
if(user_session!=null){
req.getSession().removeAttribute("user_success");
resp.sendRedirect("login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4、过滤访问success文件夹的servlet
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//servletRequest没有session
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse reps = (HttpServletResponse) servletResponse;
if(req.getSession().getAttribute("user_success")==null){
reps.sendRedirect("/test/login.jsp");
}
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
5.需要配置的映射
LoginFilter com.jia.LoginFilter LoginFilter /success/* logina com.jia.servlet.Login logina /login logout com.jia.servlet.logout logout /logout



