帶新手玩轉MVC——不講道理就是幹(下)

泰斗賢若如發表於2019-07-26

帶新手玩轉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匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,期待我們都有美好的明天!

支援我的朋友們記得點波推薦哦,您的肯定就是我進步的動力。

 

相關文章