帶新手玩轉MVC——不講道理就是幹(下)
前言:廢話不多說,直接開幹
完整案例演示
案例程式碼
LoginServlet
package servlet; import domain.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; /* * 使用者登入的Servlet * */ @WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); //接收資料 String username = req.getParameter("username"); String password = req.getParameter("password"); //從ServletContext域中獲得儲存使用者資訊集合 List<User> list = (List<User>) this.getServletContext().getAttribute("list"); for (User user:list){ //判斷使用者名稱是否正確 if (username.equals(user.getUsername())){ //判斷密碼是否正確 if (password.equals(user.getPassword())){ //使用者名稱密碼都正確 //登入成功 //判斷記住使用者名稱核取方塊是否勾選 String remember = req.getParameter("remember"); if ("true".equals(remember)){ //完成記住使用者名稱的功能 Cookie cookie = new Cookie("username",username); //設定有效路徑 cookie.setPath("/login.jsp"); //設定有效時間 cookie.setMaxAge(60*60*24); //將cookie回寫到瀏覽器 resp.addCookie(cookie); } //將使用者的資訊儲存到Session中 req.getSession().setAttribute("user",user); resp.sendRedirect("/success.jsp"); return; } } } //登入失敗 req.setAttribute("msg","使用者名稱或密碼錯誤!"); req.getRequestDispatcher("/login.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
CookieUtils
package utils; import javax.servlet.http.Cookie; public class CookieUtils { public static Cookie findCookie(Cookie[] cookies,String name){ if (cookies==null){ //說明客戶端沒有攜帶Cookie return null; }else { //說明客戶端攜帶Cookie for (Cookie cookie:cookies){ if (name.equals(cookie.getName())){ return cookie; } } return null; } } }
success.jsp
<%@page import="domain.User"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登入成功</title> <link rel="stylesheet" href="./css/login.css"> </head> <body> <% if(session.getAttribute("user")!=null){ User user = (User)session.getAttribute("user"); System.out.println(user.getPath()); // 獲得絕對路徑最後一個\的位置 int idx = user.getPath().lastIndexOf("\\"); // 獲得檔案上傳的唯一檔名: String fileName = user.getPath().substring(idx+1); %> <div class="login"> <div class="header"> <h1>登入成功</h1> </div> <div class="content"> <table align="center"> <tr> <td align="center"><img src="/img/<%= fileName %>" /></td> </tr> <tr> <td align="center">歡迎<%= user.getNickname() %>,登入成功!</td> </tr> </table> </div> </div> <% }else{ %> <div class="login"> <div class="header"> <h1>您還沒有登入!請先去<a href="/login.jsp">登入</a>!</h1> </div> </div> <% } %> </body> </html>
特別說明
如果有朋友是按照上篇的程式碼一路敲過來的,這裡有個問題,就是啟動伺服器後你必須先訪問/initServlet去執行init()方法,否則你註冊的資訊將無法儲存。
在這再給你教另外一種方法,就是在Web.xml中配置InitServlet,當伺服器一啟動,init()方法就立刻被執行,不用你再去手動訪問了,操作過程如下:
第一步:找到web.xml,配置如下圖所示的資訊
<!DOCTYPEweb-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <servlet> <servlet-name>initServlet</servlet-name> <servlet-class>servlet.InitServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>initServlet</servlet-name> <url-pattern>/initServlet</url-pattern> </servlet-mapping> </web-app>
第二步:去掉@WebServlet(“/initServlet”)註解
好了,這樣就完成了,現在已開啟伺服器,就可以直接訪問註冊頁面進行註冊了。
案例總結
寫到這案例算是結束了,這裡面用了MVC的設計模式,運用了JSP,Servlet裡面的知識,有Web四大域物件的使用,引數的請求和接收,轉發和重定向,集合的使用,還有Cookie和Session的使用,表單資料的接收,檔案的上傳,涉及的方面多,但不超綱,都是JavaSE中學過的部分,在這做個系統性的應用,個人認為此案例適合於初學者練手,希望能幫助到一些真正需要的朋友。
*****************************************************************************************************
我的部落格園地址:https://www.cnblogs.com/zyx110/
轉載請說明出處
我不能保證我所說的都是對的,但我能保證每一篇都是用心去寫的,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的技術分享“Java匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,期待我們都有美好的明天!
支援我的朋友們記得點波推薦哦,您的肯定就是我進步的動力。