栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

项目报告(适合初学者)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

项目报告(适合初学者)

一个简单的超市项目,拥有最基础的登录注册对商品的增删改查

Java EE三层框架

代码操作

1.先创建用户的数据库和表

CREATE DATABASE `supermarket`

CREATE TABLE `t_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `email` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
)

2 编写数据库表对应的JavaBean对象

  在pojo包下面创建User类

package pojo;

public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public User() {
    }

    public User(Integer id, String username, String password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", password='" + password + ''' +
                ", email='" + email + ''' +
                '}';
    }
}
3 编写工具类JdbcUtils

jdbc.properties配置文件

username=csy
password=111111
url=jdbc:mysql://localhost:3306/supermarket
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10

在utils包下面创建JdbcUtils类

package Utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtils {

    private static DruidDataSource dataSource;

    static {
        try {
            Properties properties = new Properties();
            // 读取 jdbc.properties属性配置文件
            InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            // 从流中加载数据
            properties.load(inputStream);
            // 创建 数据库连接 池
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    
    public static Connection getConnection(){

        Connection conn = null;

        try {
            conn = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return conn;
    }

    
    public static void close(Connection conn){
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

测试JdbaUtils类

@Test
void getConnection() {
   Connection conn= JdbcUtils.getConnection();
    System.out.println(conn);
}
在utils包下面创建WebUtils类
package Utils;

import org.apache.commons.beanutils.BeanUtils;

import java.util.Map;

public class WebUtils {
    public static  T copyParamToBean(Map value,T bean){
        try{
            BeanUtils.populate(bean,value);
        }catch(Exception e){
            e.printStackTrace();
        }
        return bean;
    }
    
    public static int parseInt(String strIng,int defaultValue){
        try{
            return Integer.parseInt(strIng);

        }catch(Exception e){
            e.printStackTrace();
        }
        return defaultValue;
    }
}
4 编写BaseDao

在dao.impl包下面创建一个抽象类,写一些表的通用操作(其他某种类可以继承使用里面的方法)

package Dao;

import Utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public abstract class BaseDao {
    private QueryRunner queryRunner=new QueryRunner();

    
    public int update(String sql,Object...args){
        Connection connection= JdbcUtils.getConnection();
        try{
            return queryRunner.update(connection, sql, args);
        }catch(SQLException e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally {
            JdbcUtils.close(connection);
        }
    }

    
    public   T queryForOne(Class type,String sql,Object...args){
        Connection connection=JdbcUtils.getConnection();
        try{
            return queryRunner.query(connection,sql,new BeanHandler(type),args);
        }catch(SQLException e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally {
            JdbcUtils.close(connection);
        }

    }

    
    public  List queryForList(Classtype, String sql, Object...args){
        Connection connection=JdbcUtils.getConnection();
        try{
            return queryRunner.query(connection,sql,new BeanListHandler(type),args);

        }catch (SQLException e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally {
            JdbcUtils.close(connection);
        }
    }

    
    public  Object queryForSingleValue(String sql,Object...args){
        Connection connection=JdbcUtils.getConnection();
        try{
            return queryRunner.query(connection,sql, new ScalarHandler(),args);
        }catch(SQLException e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally {
            JdbcUtils.close(connection);
        }
    }
}
5 编写UserDao

接口UserDao

package Dao;

import pojo.User;

public interface UserDao  {
    
    public User queryUserByUsername(String username);

    
    public User queryUserByUsernameandPassword(String username,String password);

    
    public int saveUser(User user);

}

UserDaoImpl实现类

package DaoImpl;

import Dao.BaseDao;
import Dao.UserDao;
import pojo.User;

public class UserDaoImpl extends BaseDao implements UserDao {
    @Override
    public User queryUserByUsername(String username) {
        String sql = "select `id`, `username`,`password`,`email` from t_user where username=?";

        return queryForOne(User.class, sql, username);
    }

    @Override
    public User queryUserByUsernameandPassword(String username, String password) {
        String sql = "select `id`, `username`,`password`,`email` from t_user where username=? and password=?";
        return queryForOne(User.class, sql, username, password);


    }

    @Override
    public int saveUser(User user) {
        String sql = "insert into t_user(`username`,`password`,`email`)value(?,?,?)";
        return update(sql, user.getUsername(), user.getPassword(), user.getEmail());

    }
}

测试类UserDaoTest

快捷键,在UserDao接口中:Ctrl+Shift+t,在test包下面创建测试类

package Test;

import Dao.UserDao;
import DaoImpl.UserDaoImpl;
import org.junit.jupiter.api.Test;
import pojo.User;

import static org.junit.jupiter.api.Assertions.*;

class UserDaoImplTest {

    @Test
    void queryUserByUsername() {
        UserDao userDao=new UserDaoImpl();
       User user= userDao.queryUserByUsername("Lisi");
        System.out.println(user);
    }

    @Test
    void queryUserByUsernameandPassword() {
        UserDao userDao=new UserDaoImpl();
        User user= userDao.queryUserByUsernameandPassword("csy","111111");
        System.out.println(user);
    }

    @Test
    void saveUser() {
        UserDao userDao=new UserDaoImpl();
       int user= userDao.saveUser(new User(null,"zy","111111","zyn@qq.com"));
        System.out.println(user);
    }
}
6 编写UserService

UserService接口

package Service;

import pojo.User;

public interface UserService {
    
    public User login(User user);

    
    public void regist(User user);

    
    public  boolean existsUsername(String name);



}

UserServiceImpl实现类

package Service;


import Dao.UserDao;
import DaoImpl.UserDaoImpl;
import pojo.User;

public class UserServiceImpl  implements UserService {
UserDao userDao=new UserDaoImpl();
    @Override
    public User login(User user) {
      return userDao.queryUserByUsernameandPassword(user.getUsername(),user.getPassword());
    }

    @Override
    public void regist(User user) {
        userDao.saveUser(user);

    }

    @Override
    public boolean existsUsername(String username) {
       if(userDao.queryUserByUsername(username)!=null){
           return true;
       }
       return false;
    }
}

创建BaseServlet

package web;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.Method;


public class BaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html,charset=UTF-8");
    String action=request.getParameter("action");
    try{
        Method method=this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
        method.invoke(this,request,response);
    }catch(Exception e){
        e.printStackTrace();
    }
    }
}

创建UserServlet

package web;

import Service.UserService;
import Service.UserServiceImpl;
import Utils.JdbcUtils;
import Utils.WebUtils;
import com.google.gson.Gson;
import pojo.User;

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY;

public class UserServlet extends BaseServlet {

    private UserService userService = new UserServiceImpl();

    
    protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User loginUser = userService.login(new User(null, username, password, null));
        if (loginUser == null) {
            request.setAttribute("msg", "用户名或密码错误");
            request.setAttribute("username", username);
            request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
        } else {
            request.getSession().setAttribute("user", loginUser);
            request.getRequestDispatcher("/pages/user/login_success.jsp").forward(request, response);
        }

    }


    

    protected void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session域中的验证码
        String token = (String) request.getSession().getAttribute(KAPTCHA_SESSION_KEY);
        request.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
        //1.获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");
        String code = request.getParameter("code");
        User user = WebUtils.copyParamToBean(request.getParameterMap(), new User());
        if (token.equalsIgnoreCase(code)) {
            //检查用户名是否存在
            if (userService.existsUsername(username)) {
                request.setAttribute("msg", "用户名已存在!");
                request.setAttribute("username", username);
                request.setAttribute("email", email);
                request.getRequestDispatcher("/pages/user/regist.jsp").forward(request, response);

            } else {


                userService.regist(new User(null, username, password, email));
                request.getRequestDispatcher("/pages/user/regist_success.jsp").forward(request, response);
            }
        }else{
            request.setAttribute("msg", "验证码不正确!");
            request.setAttribute("username", username);
            request.setAttribute("email", email);
            request.getRequestDispatcher("/pages/user/regist.jsp").forward(request, response);
        }
    }


    
    protected void loginout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().invalidate();
        response.setContentType(request.getContextPath() + "/");//重定向到首页

    }

    protected void ajaxExistsUsername(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求的参数
        String username = request.getParameter("username");
        boolean existUsername = userService.existsUsername(username);
        Map resultMap = new HashMap<>();
        resultMap.put("existsUsername", existUsername);
        Gson gson = new Gson();
        String json = gson.toJson(resultMap);
        response.getWriter().write(json);
    }
}

登录页面

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/28
  Time: 16:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    山河之恋登录页面
      <%@include file="/pages/common/head.jsp"%>






    
        欢迎登陆
    
    
    
        
            
                山河之恋用户账号
                立即注册
            
            
                
                
                    ${empty requestScope.msg?请输入用户名和密码:requestScope.msg}
                
            
            
                
用户名称:



<%@include file="/pages/common/footer.jsp"%>

注册页面

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/28
  Time: 16:21
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    山河之恋用户注册页面
    <%@include file="/pages/common/head.jsp"%>

    




    
        欢迎注册

    
    
        
            
                
                    注册用户
                    
                        ${requestScope.msg}
                    
                
                
                    










<%@include file="/pages/common/footer.jsp"%>

公共部分

脚尾 footer.jsp

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/28
  Time: 17:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

      
         山河之恋.csy@2022
      

头部head.jsp  base标签 css标签 jquery标签

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/28
  Time: 16:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% String basePath=request.getScheme()+"://"
    +request.getServerName()
    +":"
    +request.getServerPort()
    +request.getContextPath()
    +"/";
pageContext.setAttribute("basePath",basePath);

        %>


web.xml部分


    UserServlet
    web.UserServlet


    UserServlet
    /userServlet


    KaptchaServlet
    com.google.code.kaptcha.servlet.KaptchaServlet


    KaptchaServlet
    /kaptcha.jpg

创建商品表

CREATE TABLE `t_snacks` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `price` decimal(20,0) NOT NULL,
  `sales` int DEFAULT NULL,
  `stock` int DEFAULT NULL,
  `img_path` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
)

创建snacksDao

package Dao;

import pojo.Snacks;

import java.util.List;

public interface SnacksDao {
    
    public  int add(Snacks snacks);

    
        public int delete(Integer id);

    
    public int update(Snacks snacks);

    
    public Snacks querySnacksById(Integer id);

    
    public List querySnacks();

    
    public  List querySnacksByprice(Integer min,Integer max );
}

snacksDaoImpl实现类

package DaoImpl;

import Dao.BaseDao;
import Dao.SnacksDao;
import pojo.Snacks;

import java.util.List;

public class SnacksDaoImpl extends BaseDao implements SnacksDao {
    @Override
    public int add(Snacks snacks) {
        String sql="insert into t_snacks(`name`,`price`,`sales`,`stock`,`img_path` )value(?,?,?,?,?)";
        return update(sql,snacks.getName(),snacks.getPrice(),snacks.getSales(),snacks.getStock(),snacks.getImgPath());
    }

    @Override
    public int delete(Integer id) {
       String sql="delete from t_snacks where id=?";
       return update(sql,id);
    }

    @Override
    public int update(Snacks snacks) {
        String sql="update t_snacks set `name`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=?where `id`=?";
        return update(sql,snacks.getName(),snacks.getPrice(),snacks.getSales(),snacks.getStock(),snacks.getImgPath(),snacks.getId());
    }

    @Override
    public Snacks querySnacksById(Integer id) {
        String sql="select `id`,`name`,`price`,`sales`,`stock`,`img_path` as imgPath from t_snacks where id=?";
        return queryForOne(Snacks.class,sql,id);
    }

    @Override
    public List querySnacks() {
        String sql="select `id`,`name`,`price`,`sales`,`stock`,`img_path` as imgPath from t_snacks ";
        return  queryForList(Snacks.class,sql);
    }

    @Override
    public List querySnacksByprice(Integer min, Integer max) {
        String sql="select `id`,`name`,`price`,`sales`,`stock`,`img_path` as imgPth from t_snacks where `price` between ? and ? order by `price` ASC";
        return queryForList(Snacks.class,sql,min,max);
    }
}

service

package Service;

import pojo.Snacks;

import java.util.List;

public interface SnacksService {
    
    public int add(Snacks snacks);

    
    public int update(Snacks snacks);

    
    public int delete(Integer id);

    
    public Snacks querySnacksById(Integer id);

    
    public ListquerySnacks();

    
    public List querySnacksByPrice(Integer min,Integer max);

}

serviceImpl实现类

package Service;

import Dao.SnacksDao;
import DaoImpl.SnacksDaoImpl;
import pojo.Snacks;

import java.util.List;

public class SnacksServiceImpl implements SnacksService {
    SnacksDao snacksDao = new SnacksDaoImpl();

    @Override
    public int add(Snacks snacks) {
        return snacksDao.add(snacks);
    }

    @Override
    public int update(Snacks snacks) {
        return snacksDao.update(snacks);
    }

    @Override
    public int delete(Integer id) {
        return snacksDao.delete(id);
    }

    @Override
    public Snacks querySnacksById(Integer id) {
        return snacksDao.querySnacksById(id);
    }

    @Override
    public List querySnacks() {
        return snacksDao.querySnacks();
    }

    @Override
    public List querySnacksByPrice(Integer min, Integer max) {
        return snacksDao.querySnacksByprice(min, max);
    }
}

SnacksServlet

package web;

import Service.SnacksService;
import Service.SnacksServiceImpl;
import Utils.WebUtils;
import pojo.Snacks;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

public class SnacksServlet extends BaseServlet {
    SnacksService snacksService = new SnacksServiceImpl();

    protected void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //把添加的零食封装成一个零食对象
        Snacks snacks = WebUtils.copyParamToBean(request.getParameterMap(), new Snacks());
        //添加零食
        snacksService.add(snacks);
        response.sendRedirect(request.getContextPath() + "/snacksServlet?action=list");
    }

    protected void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Snacks snacks = WebUtils.copyParamToBean(request.getParameterMap(), new Snacks());
        snacksService.update(snacks);
        response.sendRedirect(request.getContextPath() +"/snacksServlet?action=list");
    }

    protected void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = WebUtils.parseInt(request.getParameter("id"), 0);
        snacksService.delete(id);
        response.sendRedirect(request.getContextPath() + "/snacksServlet?action=list");
    }

    protected void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List snacks = snacksService.querySnacks();
        request.setAttribute("snacks", snacks);
        request.getRequestDispatcher("/pages/snacks/snacks.jsp").forward(request, response);
    }

    protected void getSnacks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数
        int id = WebUtils.parseInt(request.getParameter("id"), 0);
        Snacks snacks = snacksService.querySnacksById(id);
        request.setAttribute("snacks", snacks);
        request.getRequestDispatcher("/pages/snacks/snacks_edit.jsp").forward(request, response);

    }
    protected void querySnacksByprice(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数
        int min=WebUtils.parseInt(request.getParameter("min"),0);
        int max=WebUtils.parseInt(request.getParameter("max"),0);
       Listsnacks= snacksService.querySnacksByPrice(min,max);
        request.setAttribute("min",min);
        request.setAttribute("max",max);
       request.setAttribute("snacks",snacks);
       request.getRequestDispatcher("/pages/snacks/snacks.jsp").forward(request,response);
    }

}
商品首页展示snacks.jsp
<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/30
  Time: 16:03
  To change this template use File | Settings | File Templates.
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    山河之恋零食商架
    <%@include file="/pages/common/head.jsp"%>
    
    




    查询

    
       
名称 价格 销量 库存 操作
${snacks.name} ${snacks.price} ${snacks.sales} ${snacks.stock} 修改 删除
添加
<%@include file="/pages/common/footer.jsp"%>

添加或修改商品操作snacks_edit.jsp

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/4/30
  Time: 20:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    编辑商品
    <%@include file="/pages/common/head.jsp"%>
    



  
名称 价格 销量 库存 操作
<%@include file="/pages/common/footer.jsp"%>

查询操作snacks_f.jsp

<%--
  Created by IntelliJ IDEA.
  User: 29231
  Date: 2022/5/1
  Time: 1:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    查询
    <%@include file="/pages/common/head.jsp"%>





    
        
元-


<%@include file="/pages/common/footer.jsp"%>

web.xml


    SnacksServlet
    web.SnacksServlet


    SnacksServlet
    /snacksServlet

首页index.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

页面展示

 

首页(登录页面)、

注册页面

登录成功后商品功能页面

 所需要的jar包

 在运行项目中可能会出现jdbcUtils连接失败;可能原因是mysql.jar导入失败 重新导入;

 在运行项目中还可能会出现Servlet页面跳转不进去,可能是Servlet.jar导入失败 重新导入

总结,在写项目时一般不会出现啥问题,需要注意的地方就是包的导入

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号