實現一個很簡單的例子,用戶登錄。
此Demo用到了過濾器、servlet、注解。
運行效果如圖:
login.jsp :
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% // 如果用戶名已經存在,說明已經登錄,跳轉到主頁 String username = (String) request.getSession().getAttribute("username"); if (username != null && username.length() > 0) { response.sendRedirect("index.jsp"); return; } %> <form action="<%=request.getContextPath()%>/servlet/LoginServlet" method="post"> 用戶:<input type="text" name="username" /> 密碼: <input type="password" name="password" /> 昵稱: <input type="text" name="nickname" /> <input type="submit" value="登錄" /><br> </form> </body> </html>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page import="java.util.*" %> <%@ page import="java.text.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>歡迎訪問我的主頁</h1><hr> 你好,<font color="red">${nickname}</font> [<font color="blue">${username}</font>]<br> 今天是 <%= new SimpleDateFormat("yyyy年MM月dd日 HH:kk:ss").format(new Date()) %>.<br> </body> </html>
login.sucess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 登錄成功,歡迎你,${username} </body> </html>
login.fail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 登錄失敗,請重新輸入用戶名和密碼。<br> [<a href="login.jsp">返回登錄</a>] </body> </html>
LoginFilter.java
package com.demo.servlet; import java.io.IOException; import java.util.HashMap; import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 登錄過濾器 * @author Administrator */ @WebFilter(filterName="LoginFilter", urlPatterns={"/*"}, initParams={ @WebInitParam(name="NotFilterURI", value="/login.jsp;/login.fail.jsp;/LoginServlet") }, dispatcherTypes={DispatcherType.REQUEST}) public class LoginFilter implements Filter { private HashMap<String, Integer> NotFilterMap; // 將URI中的最后一截取出來 protected String getPageName(String v) { if (v == null || v.length() == 0) return v; int i = v.lastIndexOf("/"); if (i < 1) return v; else return v.substring(i); } @Override public void init(FilterConfig filterConfig) throws ServletException { // 將不過濾的URI加載到哈希表中 String noFilterURI = filterConfig.getInitParameter("NotFilterURI"); if (noFilterURI != null && noFilterURI.length() > 0) { NotFilterMap = new HashMap<String, Integer>(); String[] uris = noFilterURI.split(";"); for (String uri : uris) NotFilterMap.put(uri, 0); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; // 設置字符集,防止亂碼 req.setCharacterEncoding("utf-8"); // 檢測URI是否需要過濾。如果不過濾,則直接放行 String reqPage = getPageName(req.getRequestURI()); if (NotFilterMap != null && NotFilterMap.containsKey(reqPage)) { chain.doFilter(request, response); return; } String username = (String) ((HttpServletRequest) request).getSession().getAttribute("username"); if (username == null || username.length() == 0) ((HttpServletResponse)response).sendRedirect("login.jsp"); else chain.doFilter(request, response); } }
LoginServlet.java
package com.demo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 登錄處理 * @author Administrator */ @WebServlet(name="LoginServlet",urlPatterns={"/servlet/LoginServlet"}) public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("LoginServlet.doPost..."); String username = req.getParameter("username"); String password = req.getParameter("password"); if ("admin".equals(username) && "admin".equals(password)) { HttpSession session = req.getSession(); session.setAttribute("username", username); String nickname = req.getParameter("nickname"); if (nickname == null || nickname.length() == 0) nickname = "匿名用戶"; session.setAttribute("nickname", nickname); resp.sendRedirect(req.getContextPath()+"/login.sucess.jsp"); } else resp.sendRedirect(req.getContextPath()+"/login.fail.jsp"); } }
完整項目源碼下載:
鏈接: http://pan.baidu.com/s/1c2oKUQW 密碼: 7m3b