监听器、过滤器的常见应用
监听器、过滤器的常见应用
-
用户登录后才能进入主页,注销后不能进入。
1.用户登录之后,向Session中放入用户的数据
2.进入主页的时候判断用户是否已登录;【在过滤器中实现】
其中的Constant.USER_SESSION是将字符串”user_session”变成一个静态常量,方便修改及复用
public class Constant {
public final static String USER_SESSION = "USER_SESSION";
}
login.jsp
<%@ 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" value="login">
</form>
</body>
</html>
loginServlet
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
System.out.println("loginServlet执行");
//获取前端请求的参数
String username = req.getParameter("username");
//处理简单的登录验证
if ("admin".equals(username)){
req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
req.getRequestDispatcher("success.jsp").forward(req, resp);
// resp.sendRedirect("success.jsp");
}else {
// resp.sendRedirect("error.jsp");
req.getRequestDispatcher("error.jsp").forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
LoginFilter
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 {
System.out.println("登录拦截");
//因为ServletHttp是接口,没有HttpServlet实现类的方法,因此需要向下转型
HttpServletRequest req = (HttpServletRequest)servletRequest;
HttpServletResponse resp = (HttpServletResponse)servletResponse;
//获取Session
Object userSession = req.getSession().getAttribute(Constant.USER_SESSION);
//如果Session为空则认为是没有登录就访问主页,将会被过滤到error页面!
if (userSession == null){
req.getRequestDispatcher("error.jsp").forward(req, resp);
// resp.sendRedirect("error.jsp");
}
filterChain.doFilter(req,resp);
}
@Override
public void destroy() {
}
}
web.xml中过滤器Filter
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.saxon.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/login/*</url-pattern>web.xml中注册Servlet以及过滤器Filter
</filter-mapping>

浙公网安备 33010602011771号