颜林琳
Filter过滤器:
1.作用:拦截从客户端向服务器发送的请求.(过滤器是在服务器中,在客户端向服务器发送请求时,还没到达目标资源时进行拦截)
2.应用: 1. IP的过滤 2.敏感词过滤 3.自动登录 4.增强request的方法
3.FilterChain:过滤链(过滤链中的过滤执行顺序和<filter-mapping>的配置顺序有关)
doFilter(request,response); -- 放行,放行到下一个过滤器中,如果没有下一个过滤器,到达目标资源.
4.FilterConfig:了解
1.getFilterName() 获取过滤器名称
2.getInitParameter(String name) 获得初始化参数
3.getInitParameterName(String name) 获取初始化参数名称
4.getServletContext() 获取ServletContext
5.Filter配置:
在filter的配置中若不配<url-patten>就配置<Servlet-name>进行配置根据Servlet名称拦截Servlet
<dispatcher>的配置:
1.request: 默认值 (拦截请求)
2.forward: 转发 (拦截转发)
3.include: 包含
4.error: 错误页面跳转(全局错误页面)
基本的登录:
Servlet中:
1.接收参数
request.getParameterMap();
2.封装数据
BeanUtils.populate(new User(),map)
3.调用业务层处理数据
UserService userService=new UserService();
User existUser=userService.login(user);
4.页面跳转
判断用户是否存在
1.不存在,登录失败
向页面发送一个错误信息
request.setAttribute("msg","登录失败,用户名或密码有误!");
使用转发,跳回到登录页面
request.getRequestDispatcher("/login.jsp").forward(request, response);
2.存在,登录成功
将其值存入session中
request.getSession().setAttribute("existUser", existUser);
使用重定向到首页
response.sendRedirect(request.getContextPath()+"/index.jsp");
登录成功后再页面显示,登录的用户:
<c:if test="${empty existUser }">
<li><a href="${pageContext.request.contextPath}/login.jsp">登录</a></li>
<li><a href="register.htm">注册</a></li>
</c:if>
<c:if test="${not empty existUser }">
<li>您好,${existUser.nickname }</li>
<li><a href="#">退出</a></li>
</c:if>
自动登录:
1.在页面"自动登录"的复选框,添加个name="autoLogin",value="true"
2.在Servlet的判断登录成功后下边编写自动登录的代码
1.记住用户名和密码:
获取复选框名称:
String autoLogin = request.getParameter("autoLogin");
2.判断复选框是否被选中:
if("true".equals(autoLogin)){
将获取到的数据存到cookie中,携带到浏览器中
Cookie cookie=new Cookie("autoLogin", existUser.getUsername()+"#"+existUser.getPassword());
cookie.setPath("/day23");
cookie.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(cookie);
}
3.自动登录过滤器:
1.获取session
2.判断session中是否有用户信息
1.有,放行
2.没有,就要到cookie中获取
1.cookie中没有,放行
2.cookie中有,到数据库中查询用户信息
1.没有查询到,放行
2.有,将信息存到session中,放行 |