项目报告(适合初学者)

项目报告(适合初学者),第1张

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

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();
        }

    }

    /**
     * 获取数据库连接池中的连接
     * @return 如果返回null,说明获取连接失败
有值就是获取连接成功 */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭连接,放回数据库连接池 * @param 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;
    }
    /**
     *  将字符串转换成为int类型的数据
     */
    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();

    /**
     * 修改一个表的数据
     * @param sql sql *** 作
     * @param args  sql对应的参数
     * @return
     */
    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);
        }
    }

    /**
     * 查询返回一个javaBean的sql语句
     * @param type 返回的对象类型
     * @param sql 执行的sql语句
     * @param args sql对应的参数值
     * @param  返回的类型的泛型
     * @return
     */
    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);
        }

    }

    /**
     * 查询返回多个javaBean的sql语句
     * @param type 返回对象的类型
     * @param sql 执行的sql语句
      * @param args sql对应的参数
     * @param  返回的类型的泛型
     * @return
     */
    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);
        }
    }

    /**
     * 查询一些特殊的数据
     * 比如一些聚合函数Count Avg
     * @param sql 执行的sql语句
     * @param args sql对应的参数值
     * @return
     */
    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  {
    /**
     * 根据用户名查询
     * @param username(注册页面)
     * @return 返回null说明用户名不存在
     */
    public User queryUserByUsername(String username);

    /**
     * 根据用户名和密码查询(登录页面)
     * @param username
     * @param password
     * @return  返回null说明用户不存在
     */
    public User queryUserByUsernameandPassword(String username,String password);

    /**
     * 保存用户信息
     * @param user
     * @return 返回-1表示执行失败,返回其他表示sql语句影响的行数
     */
    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","[email protected]"));
        System.out.println(user);
    }
}
6 编写UserService

UserService接口

package Service;

import pojo.User;

public interface UserService {
    /**
     * 登录
     * @param user
     */
    public User login(User user);

    /**
     * 注册
     * @param user
     */
    public void regist(User user);

    /**
     * 检查用户名是否可用
     * @param name
     * @return 返回false表明可用,返回true表明用户名已存在
     */
    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();

    /**
     * 登录
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    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);
        }

    }


    /**
     * 处理注册功能
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */

    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);
        }
    }


    /**
     * 注销
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    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 {
    /**
     * 添加零食
     * @param snacks
     * @return
     */
    public  int add(Snacks snacks);

    /**
     * 删除零食
     * @param id
     * @return
     */
        public int delete(Integer id);

    /**
     * 修改零食
     * @param snacks
     * @return
     */
    public int update(Snacks snacks);

    /**
     * 根据id查询
     * @param id
     * @return
     */
    public Snacks querySnacksById(Integer id);

    /**
     * 查询全部零食
     * @return
     */
    public List querySnacks();

    /**
     * 求价格区间的数据
     * @param min
     * @param max
     * @return
     */
    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 {
    /**
     * 添加零食
     * @param snacks
     * @return
     */
    public int add(Snacks snacks);

    /**
     * 修改零食
     * @param snacks
     * @return
     */
    public int update(Snacks snacks);

    /**
     * 删除零食
     * @param id
     * @return
     */
    public int delete(Integer id);

    /**
     * 根据id查询零食
     * @param id
     * @return
     */
    public Snacks querySnacksById(Integer id);

    /**
     * 查询所有零食商品
     * @return
     */
    public ListquerySnacks();

    /**
     *求价格区间的数据
     * @param min
     * @param max
     * @return
     */
    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导入失败 重新导入

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

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/876844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存