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> -->

 

posted @ 2019-01-23 13:06  Cynical丶Gary  阅读(1614)  评论(0编辑  收藏  举报