JavaWeb_(MVC)管理員后台商品查詢demo


 

 

MVC分層實現管理員后台商品查詢

 

  MVC層即model view controller

  Model(模型):模型代表着核心的業務邏輯和數據(不要理解成Model只是實體類)

  View(視圖):視圖應該關注與如何展示數據,而不應該包含任何業務邏輯(業務邏輯應寫在Model中)

  Controller(控制器):控制器控制着程序的邏輯,並充當着視圖和模型之間的協調角色。控制器從視圖層接收用戶輸入的信息,然后使用模型來執行特定的操作,並把最終的結果回傳給視圖

  model層:存放業務邏輯處理,不直接和數據庫打交道但存放關於數據庫處理的操作

  Dao層:對數據庫進行數據持久化操作,操作直接針對數據庫

 

  index.jsp進行首頁的展示,用戶可以在首頁進行普通用戶的注冊和登錄,當使用管理員賬號登錄時候可以進入商品后台對其進行進一步管理(LoginServlet.java中實現)

  項目結構

  

 

  DBUtil.java模擬數據庫,已存在的管理員用戶和商品信息列表如下,注冊時只能對普通用戶進行注冊,Gary和Gary2的isAdmin為True

    public static Map<String , User> userMap = new HashMap<String , User>();
    public static List<Goods> goodsList = new ArrayList<Goods>();
    
    static {
        addUser(new User("Gary","123",10,"男",true));
        addUser(new User("Gary2","456",20,"男",true));
        
        goodsList.add(new Goods("香蕉","這個是香蕉",100,110));
        goodsList.add(new Goods("蘋果","這個是蘋果",200,120));
        goodsList.add(new Goods("西瓜","這個是西瓜",300,130));
        goodsList.add(new Goods("桃子","這個是桃子",400,140));
    }

 

 

邏輯層:處理代碼請求

package com.Gary.controller;

import java.io.IOException;
import java.util.List;

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 com.Gary.model.Goods;
import com.Gary.service.GoodsService;


@WebServlet("/admin/goods_list")
public class GoodsListServlet extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        doGet(req, resp);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Goods> list = new GoodsService().selectAllGoods();
        request.setAttribute("list", list);
        request.getRequestDispatcher("/admin/goods_list.jsp").forward(request, response);
    }

}
GoodsListServlet.java

 

package com.Gary.controller;

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 com.Gary.model.User;
import com.Gary.service.UserService;


@WebServlet("/login_do")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        UserService service = new UserService();
        User user =service.login(username, password);
        
        System.out.println(user);
        if(user!=null) {
            request.getSession().setAttribute("user", user);
            //System.out.println(user);
            //TODO
            if(user.isAdmin()) {
                //管理員
                //response.sendRedirect(request.getContextPath()+"/admin/goods_list.jsp");
                request.getRequestDispatcher("admin/goods_list").forward(request, response);
                //不需要傳遞數據時可以使用重定向
                //response.sendRedirect(request.getContextPath()+"/admin/good_list");
            }else {
                //普通用戶
                //System.out.println("完成");
                request.getRequestDispatcher("/").forward(request, response);
            }
        }else {
            request.setAttribute("msg", "<font color='red'>用戶名或密碼錯誤,請重新登錄!</font>");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

}
LoginServlet.java

 

package com.Gary.controller;

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 com.Gary.service.UserService;

/**
 * Servlet implementation class RegisterService
 */
@WebServlet("/register_do")
public class RegisterService extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //設置中文編碼
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        int age = Integer.parseInt(request.getParameter("age"));
        String sex = request.getParameter("sex");
        
        UserService  userService = new UserService();
        boolean isSuccess = userService.register(username,password,age,sex);
        if(isSuccess) {
            request.setAttribute("msg", "<font color='green'>注冊成功,請登錄!</font>");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }else {
            request.setAttribute("msg", "<font color='red'>用戶名重復,請重新填寫</font>");
            request.getRequestDispatcher("/register.jsp").forward(request, response);
        }
    }

}
RegisterService.java

 

DAO層:將數據存到數據庫中

package com.Gary.dao;

import java.util.List;

import com.Gary.model.Goods;
import com.Gary.util.DBUtil;

public class GoodsDao {
    public    List<Goods> getAllGoods(){
        return DBUtil.goodsList;
    }
}
GoodsDao.java

 

package com.Gary.dao;

import com.Gary.model.User;
import com.Gary.util.DBUtil;

public class UserDao {
    
    public boolean isExist(String username) {
        return DBUtil.userMap.containsKey(username);
    }
    
    public boolean addUser(String username,String password,int age,String sex) {
        if(isExist(username))    return false;
        User u = new User(username,password,age,sex,false);
        DBUtil.userMap.put(u.getUsername(),u);
        return true;
    }
    
    public User getUserByUP(String username,String password) {
        if(isExist(username)==false)     return null;
        User u = DBUtil.userMap.get(username);
        if(u.getPassword().equals(password))return u;
        else    return null;
    }
    
    
}
UserDao.java

 

model層:存放我們的實體類,與數據庫中的屬性值基本保持一致

package com.Gary.model;

public class Goods {
    private String name;
    private String des;
    private int price;
    private int inventory;
    public Goods(String name, String des, int price, int inventory) {
        super();
        this.name = name;
        this.des = des;
        this.price = price;
        this.inventory = inventory;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDes() {
        return des;
    }
    public void setDes(String des) {
        this.des = des;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public int getInventory() {
        return inventory;
    }
    public void setInventory(int inventory) {
        this.inventory = inventory;
    }
    
}
Goods.java

 

package com.Gary.model;

public class User {
    private String username;
    private String password;
    private int age;
    private String sex;
    private boolean isAdmin=false;    //判斷是否是管理員賬號
    
    public User(String username, String password, int age, String sex, boolean isAdmin) {
        super();
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.isAdmin = isAdmin;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    
}
User.java

 

service層:存放業務邏輯處理

package com.Gary.service;

import java.util.List;

import com.Gary.dao.GoodsDao;
import com.Gary.model.Goods;

public class GoodsService {
    public List<Goods> selectAllGoods(){
        return new GoodsDao().getAllGoods();
    }
}
GoodsService.java

 

package com.Gary.service;

import com.Gary.dao.UserDao;
import com.Gary.model.User;

public class UserService {
    //處理注冊請求
    public boolean register(String username,String password,int age ,String sex) {
        UserDao userDao = new UserDao();
        boolean isExist =userDao.isExist(username);
        if(isExist)    
            return false;
        else 
            userDao.addUser(username, password, age, sex);
        return true;
    }
    
    public User login(String username,String password) {
        return new UserDao().getUserByUP(username, password);
    }
}
UserService.java

 

util層:輔助作用  【我用來做數據庫的模擬】

package com.Gary.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.Gary.model.Goods;
import com.Gary.model.User;

//模擬數據庫
public class DBUtil {
    public static Map<String , User> userMap = new HashMap<String , User>();
    public static List<Goods> goodsList = new ArrayList<Goods>();
    
    static {
        addUser(new User("Gary","123",10,"男",true));
        addUser(new User("Gary2","456",20,"男",true));
        
        goodsList.add(new Goods("香蕉","這個是香蕉",100,110));
        goodsList.add(new Goods("蘋果","這個是蘋果",200,120));
        goodsList.add(new Goods("西瓜","這個是西瓜",300,130));
        goodsList.add(new Goods("桃子","這個是桃子",400,140));
    }
    
    private static void addUser(User user) {
        userMap.put(user.getUsername(), user);
    }
    
}
DBUtil.java

 

商品列表頁面

<%@page import="com.Gary.model.Goods"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<style type="text/css">
*{
    font-size = 20px;
}
</style>
</head>
<body>

<h1>商品管理</h1>
</hr>
<a>添加</a>
<table border = "1">
<tr>
<td>商品名</td><td>描述</td><td>價格</td><td>庫存</td><td>操作</td>
</tr>

<%
List<Goods> list = (List<Goods>)request.getAttribute("list");
for(Goods goods : list){
    %>
    <tr>
        <td><%=goods.getName() %></td><td><%=goods.getDes() %></td><td><%=goods.getPrice() %></td><td><%=goods.getInventory() %></td><td>刪除 修改</td>
    </tr>
    <%
}
%>

<!-- <tr> -->
<!--     <td>香蕉</td><td>這個是香蕉</td><td>78</td><td>500</td><td>刪除 修改</td> -->
<!-- </tr> -->



</body>
</html>
goods_list.jsp

 

首頁面

<%@ page import="com.Gary.model.User" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>

<%
Object user = session.getAttribute("user");
if(user==null){
    %>
    <a href="<%=request.getContextPath() %>/login.jsp">登錄</a>
    <a href="<%=request.getContextPath() %>/register.jsp">注冊</a>
    <%         
}else{
    out.println("當前登錄用戶:"+((User)user).getUsername());
}
%>

<body>

</br>
各種商品的展示
</body>
</html>
index.jsp

 

用戶登錄頁面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

<%
if(request.getAttribute("msg")!=null)
    out.println(request.getAttribute("msg")+"<br/>");
%>

登錄 
<hr/>
<form action="<%=request.getContextPath() %>/login_do" method="post">
用戶名:<input type="text" name="username" /><br/>
密碼:<input type="password" name="password" /><br/>
<input type="submit" value="登錄" />
</form>

</body>
</html>
login.jsp

 

用戶注冊頁面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

<%
if(request.getAttribute("msg")!=null)
    out.println(request.getAttribute("msg")+"<br/>");
%>

注冊
<hr/>
<form action="<%=request.getContextPath() %>/register_do" method="post">
用戶名:<input type="text" name="username" /><br/>
密碼:<input type="password" name="password" /><br/>
年齡:<input type="text" name="age" /><br/>
性別: 男<input type="radio" name="sex" value="男" checked="checked"/><input type="radio" name="sex" value="女" /><br/>
<input type="submit" value="注冊" />
</form>

</body>
</html>
register.jsp

 

 

實現過程

  index.jsp判斷有無用戶登錄,有用戶登錄時展示用戶信息,若無用戶登錄則顯示用戶注冊登錄

<%
Object user = session.getAttribute("user");
if(user==null){
    %>
    <a href="<%=request.getContextPath() %>/login.jsp">登錄</a>
    <a href="<%=request.getContextPath() %>/register.jsp">注冊</a>
    <%         
}else{
    out.println("當前登錄用戶:"+((User)user).getUsername());
}
%>

 

  用戶注冊后將表單提交給register_do

<form action="<%=request.getContextPath() %>/register_do" method="post">
用戶名:<input type="text" name="username" /><br/>
密碼:<input type="password" name="password" /><br/>
年齡:<input type="text" name="age" /><br/>
性別: 男<input type="radio" name="sex" value="男" checked="checked"/><input type="radio" name="sex" value="女" /><br/>
<input type="submit" value="注冊" />
</form>

 

  創建用戶數據模型User,java和Goods.java

    private String username;
    private String password;
    private int age;
    private String sex;
    private boolean isAdmin=false;    //判斷是否是管理員賬號

  

    private String name;
    private String des;    //商品描述信息
    private int price;
    private int inventory;    //商品庫存

 

  DBUtil.java模擬數據庫,將用戶與商品存放到List<>集合中

    public static Map<String , User> userMap = new HashMap<String , User>();
    public static List<Goods> goodsList = new ArrayList<Goods>();
    
    static {
        addUser(new User("Gary","123",10,"男",true));
        addUser(new User("Gary2","456",20,"男",true));
        
        goodsList.add(new Goods("香蕉","這個是香蕉",100,110));
        goodsList.add(new Goods("蘋果","這個是蘋果",200,120));
        goodsList.add(new Goods("西瓜","這個是西瓜",300,130));
        goodsList.add(new Goods("桃子","這個是桃子",400,140));
    }
    
    private static void addUser(User user) {
        userMap.put(user.getUsername(), user);
    }

 

  UserDao.java和GoodDao.java處理數據庫邏輯

//用戶是否退出登錄
    public boolean isExist(String username) {
        return DBUtil.userMap.containsKey(username);
    }
    
    //添加用戶
    public boolean addUser(String username,String password,int age,String sex) {
        if(isExist(username))    return false;
        User u = new User(username,password,age,sex,false);
        DBUtil.userMap.put(u.getUsername(),u);
        return true;
    }
    
    //判斷用戶是否登錄成功
    public User getUserByUP(String username,String password) {
        if(isExist(username)==false)     return null;
        User u = DBUtil.userMap.get(username);
        if(u.getPassword().equals(password))return u;
        else    return null;
    }

 

public class GoodsDao {
    //列出所有的商品
    public    List<Goods> getAllGoods(){
        return DBUtil.goodsList;
    }
}

 

  RegisterService.java處理用戶注冊信息,處理用戶的注冊和登錄

@WebServlet("/register_do")
public class RegisterService extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //設置中文編碼
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        int age = Integer.parseInt(request.getParameter("age"));
        String sex = request.getParameter("sex");
        
        UserService  userService = new UserService();
        boolean isSuccess = userService.register(username,password,age,sex);
        if(isSuccess) {
            request.setAttribute("msg", "<font color='green'>注冊成功,請登錄!</font>");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }else {
            request.setAttribute("msg", "<font color='red'>用戶名重復,請重新填寫</font>");
            request.getRequestDispatcher("/register.jsp").forward(request, response);
        }
    }

}

 

   LoginServlet.java處理用戶登錄后分用戶和管理員操作,用戶跳轉到首頁,管理員則轉發到goods_list對商品后台信息進行處理

  GoodsListServlet.java處理轉發的goods_list請求

@WebServlet("/admin/goods_list")
public class GoodsListServlet extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        doGet(req, resp);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Goods> list = new GoodsService().selectAllGoods();
        request.setAttribute("list", list);
        request.getRequestDispatcher("/admin/goods_list.jsp").forward(request, response);
    }

}

 

   goods_list.jsp展示數據庫中商品信息列表

 

<%
List<Goods> list = (List<Goods>)request.getAttribute("list");
for(Goods goods : list){
    %>
    <tr>
        <td><%=goods.getName() %></td><td><%=goods.getDes() %></td><td><%=goods.getPrice() %></td><td><%=goods.getInventory() %></td><td>刪除 修改</td>
    </tr>
    <%
}
%>

<!-- <tr> -->
<!--     <td>香蕉</td><td>這個是香蕉</td><td>78</td><td>500</td><td>刪除 修改</td> -->
<!-- </tr> -->

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM