家居网购项目(二)

2024-04-13 05:04
文章标签 项目 家居网

本文主要是介绍家居网购项目(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.会员登录
        • 1.需求分析
        • 2.程序框架图
        • 3.修改MemberDao
          • 添加方法
        • 4.修改MemberDaoImpl
          • 添加方法
          • MemberDaoTest单元测试
        • 5.修改MemberService
          • 添加方法
        • 6.修改MemberServiceImpl
          • 添加方法
          • MemberServiceTest单元测试
        • 7.编写LoginServlet
          • 1.修改login.html表单
          • 2.引入login_ok.html,修改base路径
          • 3.LoginServlet.java
        • 8.调试阶段
          • 1.没有报错,登录之后是空白页面
            • 原因
        • 9.结果展示
    • 2.登录错误提示,表单回显
        • 1.需求分析
        • 2.程序框架图
        • 3.修改LoginServlet
          • 将username和信息放到request中
        • 4.修改login.html为login.jsp
        • 5.修改login.jsp
          • 1.提示错误信息
          • 2.登录失败之后显示用户名
        • 6.结果展示
    • 3.Web层Servlet合并
        • 1.需求分析
        • 2.方案一
          • 1.方案
          • 2.login.jsp增加两个隐藏域
          • 3.编写MemberServlet
            • MemberServlet.java
          • 4.缺点
            • if-else过多,影响可读性
        • 3.方案二
          • 1.方案
          • 2.修改MemberServlet
            • **MemberServlet.java**
          • 3.编写BasicServlet
            • BasicServlet.java
    • 4.家居后台管理—显示家居
        • 1.需求分析
        • 2.管理员表的两种方式
        • 1.继续使用member表,增加字段
        • 2.开一个新的admin表
        • 3.程序框架图
        • 4.管理员登录
          • 1.创建管理员表
          • 2.编写javabean与表的映射
            • Admin.java
          • 3.编写AdminDao
            • AdminDao.java
          • 4.编写AdminDaoImpl
            • AdminDaoImpl.java
          • 5.单元测试
            • AdminDaoTest.java
          • 6.编写AdminService
            • AdminService.java
          • 7.编写AdminServiceImpl
            • AdminServiceImpl.java
          • 8.单元测试
            • AdminServiceTest.java
          • 9.修改manage_login.jsp
          • 10.编写AdminServlet
            • AdminServlet.java
          • 11.结果展示
            • 1.管理员登录
            • 2.登录成功
        • 5.家居表设计
        • 6.编写javabean与家居表的映射
          • Furn.java
        • 7.编写FurnDao
          • FurnDao.java
        • 8.编写FurnDaoImpl
          • FurnDaoImpl.java
        • 9.单元测试
          • FurnDaoTest.java
        • 10.编写FurnService
          • FurnService.java
        • 11.FurnServiceImpl
          • FurnServiceImpl.java
        • 12.单元测试
          • FurnServiceTest.java
        • 14.修改manage_menu.jsp
        • 15.编写FurnServlet
          • FurnServlet.java
        • 16.修改furn_manage.jsp
        • 17.结果展示
          • 1.管理员登录成功
          • 2.点击家居管理

1.会员登录

1.需求分析

image-20240205141846819

2.程序框架图

image-20240205142412674

3.修改MemberDao
添加方法
    //3.根据用户名和密码查找是否有该用户public Member queryMemberByUsernameAndPassword(String useranme, String password);
4.修改MemberDaoImpl
添加方法
    /*** 根据会员的用户名和密码去member表中查询是否有该用户* @param useranme* @param password* @return 有则返回member对象,没有则返回null*/@Overridepublic Member queryMemberByUsernameAndPassword(String useranme, String password) {//查询单条记录String sql = "select * from member where username = ? and password = MD5(?)";return querySingle(sql, Member.class, useranme, password);}
MemberDaoTest单元测试
    @Testpublic void queryMemberByUsernameAndPassword() {Member member = memberDao.queryMemberByUsernameAndPassword("111111", "111111");if (member == null) {System.out.println("该用户不存在");} else {System.out.println("该用户存在");}}

image-20240205143951356

image-20240205144015135

5.修改MemberService
添加方法
    //用户登录public boolean login(String username, String password);
6.修改MemberServiceImpl
添加方法
    /*** 用户登录验证* @param username* @param password* @return 登录成功返回Member对象,登录失败返回null*/@Overridepublic boolean login(String username, String password) {return memberDao.queryMemberByUsernameAndPassword(username, password) == null ? false : true;}
MemberServiceTest单元测试
    @Testpublic void queryMemberByUsernameAndPassword() {if (memberService.login("11111", "111111")){System.out.println("登录成功");} else {System.out.println("登录失败");}}

image-20240205144929597

image-20240205145005417

image-20240205150123882

7.编写LoginServlet
1.修改login.html表单

image-20240205150334770

2.引入login_ok.html,修改base路径

image-20240205150748812

3.LoginServlet.java
package com.sxs.furns.web;import com.sxs.furns.service.MemberService;
import com.sxs.furns.service.impl.MemberServiceImpl;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 java.io.IOException;/*** 处理会员用户登录* @author 孙显圣* @version 1.0*/
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {MemberService memberService = new MemberServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户名和密码String username = req.getParameter("username");String password = req.getParameter("password");//进行登录验证if (memberService.login(username, password)) {//请求转发到成功页面req.getRequestDispatcher("/views/member/login_ok.html").forward(req,resp);} else {//请求转发到首页req.getRequestDispatcher("/views/member/login.html").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
8.调试阶段
1.没有报错,登录之后是空白页面
原因

后端光获取了getRequestDispatcher,并没有使用forward转发

9.结果展示

image-20240205150918104

2.登录错误提示,表单回显

1.需求分析

image-20240205151515757

2.程序框架图

image-20240205151714706

3.修改LoginServlet
将username和信息放到request中

image-20240205152753612

4.修改login.html为login.jsp

image-20240205152540897

image-20240205153128252

5.修改login.jsp
1.提示错误信息

image-20240205153935579

2.登录失败之后显示用户名

image-20240205154218136

6.结果展示

image-20240205154301343

3.Web层Servlet合并

1.需求分析

image-20240205154602530

2.方案一
1.方案

image-20240205154934592

2.login.jsp增加两个隐藏域

image-20240205160738845

3.编写MemberServlet
MemberServlet.java
package com.sxs.furns.web;import com.sxs.furns.entity.Member;
import com.sxs.furns.service.MemberService;
import com.sxs.furns.service.impl.MemberServiceImpl;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 java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet("/memberServlet")
public class MemberServlet extends HttpServlet {MemberService memberService = new MemberServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取隐藏域的信息String action = req.getParameter("action");if (action.equals("register")) {//调用register方法register(req, resp);} else if (action.equals("login")) {//调用login方法login(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}public void register(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受用户注册信息String username = req.getParameter("username");String password = req.getParameter("password");String email = req.getParameter("email");//判断用户名是否在数据库中if (!memberService.isExistsUsername(username)) { //不在数据库中,可以注册Member member = new Member(null, username, password, email);//注册if (memberService.registerMember(member)) {//请求转发req.getRequestDispatcher("/views/member/register_ok.html").forward(req, resp);} else {//请求转发req.getRequestDispatcher("/views/member/register_fail.html").forward(req, resp);}} else {//返回注册页面req.getRequestDispatcher("/views/member/login.jsp").forward(req, resp);}}public void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户名和密码String username = req.getParameter("username");String password = req.getParameter("password");//进行登录验证if (memberService.login(username, password)) {//请求转发到成功页面req.getRequestDispatcher("/views/member/login_ok.html").forward(req, resp);} else {//登录失败则将username请求转发到首页req.setAttribute("msg", "用户名或密码错误");req.setAttribute("username", username);req.getRequestDispatcher("/views/member/login.jsp").forward(req, resp);}}
}
4.缺点
if-else过多,影响可读性
3.方案二
1.方案

image-20240205161324909

2.修改MemberServlet
MemberServlet.java
package com.sxs.furns.web;import com.sxs.furns.entity.Member;
import com.sxs.furns.service.MemberService;
import com.sxs.furns.service.impl.MemberServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet("/memberServlet")
public class MemberServlet extends BasicServlet {MemberService memberService = new MemberServiceImpl();public void register(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受用户注册信息String username = req.getParameter("username");String password = req.getParameter("password");String email = req.getParameter("email");//判断用户名是否在数据库中if (!memberService.isExistsUsername(username)) { //不在数据库中,可以注册Member member = new Member(null, username, password, email);//注册if (memberService.registerMember(member)) {//请求转发req.getRequestDispatcher("/views/member/register_ok.html").forward(req, resp);} else {//请求转发req.getRequestDispatcher("/views/member/register_fail.html").forward(req, resp);}} else {//返回注册页面req.getRequestDispatcher("/views/member/login.jsp").forward(req, resp);}}public void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户名和密码String username = req.getParameter("username");String password = req.getParameter("password");//进行登录验证if (memberService.login(username, password)) {//请求转发到成功页面req.getRequestDispatcher("/views/member/login_ok.html").forward(req, resp);} else {//登录失败则将username请求转发到首页req.setAttribute("msg", "用户名或密码错误");req.setAttribute("username", username);req.getRequestDispatcher("/views/member/login.jsp").forward(req, resp);}}
}
3.编写BasicServlet
BasicServlet.java
package com.sxs.furns.web;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** servlet抽象模板** @author 孙显圣* @version 1.0*/
public abstract class BasicServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取隐藏域的信息String action = req.getParameter("action");//获取当前实例的class对象try {//获取指定参数类型的方法Method declaredMethod = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);//调用方法declaredMethod.invoke(this, req, resp);} catch (NoSuchMethodException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

4.家居后台管理—显示家居

1.需求分析

image-20240205171716753

2.管理员表的两种方式
1.继续使用member表,增加字段
2.开一个新的admin表
3.程序框架图

image-20240205172755705

4.管理员登录
1.创建管理员表
-- 创建管理员表
CREATE TABLE `admin` (
`id` INT PRIMARY KEY auto_increment,
`username` VARCHAR(32) NOT NULL UNIQUE,
`password` VARCHAR(32) NOT NULL
);
-- 测试数据
INSERT INTO admin VALUES(NULL, 'admin', MD5('admin'));
2.编写javabean与表的映射
Admin.java
package com.sxs.furns.entity;/*** @author 孙显圣* @version 1.0*/
public class Admin {private Integer id;private String username;private String password;//无参构造public Admin() {}public Admin(Integer id, String username, String password) {this.id = id;this.username = username;this.password = password;}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;}
}
3.编写AdminDao
AdminDao.java
package com.sxs.furns.dao;import com.sxs.furns.entity.Admin;/*** @author 孙显圣* @version 1.0*/
public interface AdminDao {//1.根据用户名和密码查询管理员public Admin queryAdminByUsernameAndPassword(String username, String password);
}
4.编写AdminDaoImpl
AdminDaoImpl.java
package com.sxs.furns.dao.impl;import com.sxs.furns.dao.AdminDao;
import com.sxs.furns.dao.BasicDao;
import com.sxs.furns.entity.Admin;/*** @author 孙显圣* @version 1.0*/
public class AdminDaoImpl extends BasicDao<Admin> implements AdminDao {/*** 根据用户名和密码查询管理员* @return 查询到则返回Admin对象,查询失败则返回null*/@Overridepublic Admin queryAdminByUsernameAndPassword(String username, String password) {String sql = "select * from admin where username = ? and password = md5(?)";//返回查到的数据或者nullreturn querySingle(sql, Admin.class, username, password);}
}
5.单元测试
AdminDaoTest.java
package com.sxs.furns.test;import com.sxs.furns.dao.AdminDao;
import com.sxs.furns.dao.impl.AdminDaoImpl;
import org.junit.Test;/*** @author 孙显圣* @version 1.0*/
public class AdminDaoTest {private AdminDao adminDao = new AdminDaoImpl();@Testpublic void queryAdminByUsernameAndPassword() {if (adminDao.queryAdminByUsernameAndPassword("admin1", "admin") != null) {System.out.println("管理员存在");} else {System.out.println("管理员不存在");}}
}

image-20240205184147789

image-20240205184217202

6.编写AdminService
AdminService.java
package com.sxs.furns.service;/**** @author 孙显圣* @version 1.0*/
public interface AdminService {//1.管理员登录public boolean login(String username, String password);
}
7.编写AdminServiceImpl
AdminServiceImpl.java
package com.sxs.furns.service.impl;import com.sxs.furns.dao.AdminDao;
import com.sxs.furns.dao.impl.AdminDaoImpl;
import com.sxs.furns.entity.Admin;
import com.sxs.furns.service.AdminService;/*** @author 孙显圣* @version 1.0*/
public class AdminServiceImpl implements AdminService {AdminDao adminDao = new AdminDaoImpl();/*** 根据用户名密码验证管理员登录* @param username* @param password* @return 成功返回true失败返回false*/@Overridepublic boolean login(String username, String password) {return adminDao.queryAdminByUsernameAndPassword(username, password) != null ? true : false;}
}
8.单元测试
AdminServiceTest.java
package com.sxs.furns.test;import com.sxs.furns.service.AdminService;
import com.sxs.furns.service.impl.AdminServiceImpl;
import org.junit.Test;/*** @author 孙显圣* @version 1.0*/
public class AdminServiceTest {AdminService adminService = new AdminServiceImpl();@Testpublic void login(){if (adminService.login("admin", "admin")) {System.out.println("登录成功");} else {System.out.println("登录失败");}}
}

image-20240205185536391

image-20240205185611761

9.修改manage_login.jsp

image-20240205190425185

10.编写AdminServlet
AdminServlet.java
package com.sxs.furns.web;import com.sxs.furns.service.AdminService;
import com.sxs.furns.service.impl.AdminServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/adminServlet")
public class AdminServlet extends BasicServlet{private AdminService adminService = new AdminServiceImpl();//处理管理员登录,注意需要在表单提交的action隐藏域传递login这个方法名public void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户名和密码String username = req.getParameter("username");String password = req.getParameter("password");//执行登录验证if (adminService.login(username, password)) {//请求转发到管理员菜单页面req.getRequestDispatcher("/views/manage/manage_menu.jsp").forward(req, resp);} else {//请求转发到登录界面req.getRequestDispatcher("/views/manage/manage_login.jsp").forward(req, resp);}}
}
11.结果展示
1.管理员登录

image-20240205195949625

2.登录成功

image-20240205200030708

5.家居表设计
-- 创建家居表CREATE TABLE `furn` (
`id` INT UNSIGNED PRIMARY KEY auto_increment, #id
`name` VARCHAR(64) NOT NULL, #名字
`maker` VARCHAR(64) NOT NULL, #制造商
`price` DECIMAL(11, 2) NOT NULL, #价格
`sales` INT UNSIGNED NOT NULL, #销量
`stock` INT UNSIGNED NOT NULL, #库存
`img_path` VARCHAR(256) NOT NULL #存放图片的路径
);
-- 测试数据
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) 
VALUES(NULL , '北欧风格小桌子' , '熊猫家居' , 180 , 666 , 7 , 'assets/images/product-image/6.jpg');INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) 
VALUES(NULL , '简约风格小椅子' , '熊猫家居' , 180 , 666 , 7 , 'assets/images/product-image/4.jpg');INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) 
VALUES(NULL , '典雅风格小台灯' , '蚂蚁家居' , 180 , 666 , 7 , 'assets/images/product-image/14.jpg');INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`) 
VALUES(NULL , '温馨风格盆景架' , '蚂蚁家居' , 180 , 666 , 7 , 'assets/images/product-image/16.jpg');
6.编写javabean与家居表的映射
Furn.java
package com.sxs.furns.entity;import java.math.BigDecimal;/*** 家居表映射* @author 孙显圣* @version 1.0*/
public class Furn {private Integer id;private String name;private String maker;private BigDecimal price;private Integer sales;private Integer stock;private String imgPath; //注意这里的字段跟表中设计的是不一样的,后面有解决方案//无参构造public Furn(){}public Furn(Integer id, String name, String maker, BigDecimal price, Integer sales, Integer stock, String imgPath) {this.id = id;this.name = name;this.maker = maker;this.price = price;this.sales = sales;this.stock = stock;this.imgPath = imgPath;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMaker() {return maker;}public void setMaker(String maker) {this.maker = maker;}public BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}public Integer getSales() {return sales;}public void setSales(Integer sales) {this.sales = sales;}public Integer getStock() {return stock;}public void setStock(Integer stock) {this.stock = stock;}public String getImgPath() {return imgPath;}public void setImgPath(String imgPath) {this.imgPath = imgPath;}@Overridepublic String toString() {return "Furn{" +"id=" + id +", name='" + name + '\'' +", maker='" + maker + '\'' +", price=" + price +", sales=" + sales +", stock=" + stock +", imgPath='" + imgPath + '\'' +'}';}
}
7.编写FurnDao
FurnDao.java
package com.sxs.furns.dao;import com.sxs.furns.entity.Furn;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public interface FurnDao {//返回所有家具集合public List<Furn> queryFurns();
}
8.编写FurnDaoImpl
FurnDaoImpl.java
package com.sxs.furns.dao.impl;import com.sxs.furns.dao.BasicDao;
import com.sxs.furns.dao.FurnDao;
import com.sxs.furns.entity.Furn;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class FurnDaoImpl extends BasicDao<Furn> implements FurnDao {@Overridepublic List<Furn> queryFurns() {//sql语句的img_path字段加一个别名为属性的名字,这样在查找到数据之后就会调用setImgPath()方法String sql = "SELECT id, name, maker, price, sales, stock, img_path as imgPath from furn";return queryMulti(sql, Furn.class);}
}
9.单元测试
FurnDaoTest.java
package com.sxs.furns.test;import com.sxs.furns.dao.FurnDao;
import com.sxs.furns.dao.impl.FurnDaoImpl;
import com.sxs.furns.entity.Furn;
import org.junit.Test;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class FurnDaoTest {FurnDao furnDao = new FurnDaoImpl();@Testpublic void queryFurns(){List<Furn> furns = furnDao.queryFurns();if (furns != null) {//遍历输出for (Furn o : furns) {System.out.println(o);}} else {System.out.println("查询失败!");}}
}

image-20240205210405689

10.编写FurnService
FurnService.java
package com.sxs.furns.service;import com.sxs.furns.entity.Furn;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public interface FurnService {//1.查询所有家居信息public List<Furn> queryFurns();
}
11.FurnServiceImpl
FurnServiceImpl.java
package com.sxs.furns.service.impl;import com.sxs.furns.dao.FurnDao;
import com.sxs.furns.dao.impl.FurnDaoImpl;
import com.sxs.furns.entity.Furn;
import com.sxs.furns.service.FurnService;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class FurnServiceImpl implements FurnService {FurnDao furnDao = new FurnDaoImpl();/*** 返回所有家居信息* @return 成功返回所有信息,失败返回null*/@Overridepublic List<Furn> queryFurns() {return furnDao.queryFurns();}
}
12.单元测试
FurnServiceTest.java
package com.sxs.furns.test;import com.sxs.furns.entity.Furn;
import com.sxs.furns.service.FurnService;
import com.sxs.furns.service.impl.FurnServiceImpl;
import org.junit.Test;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class FurnServiceTest {FurnService furnService = new FurnServiceImpl();@Testpublic void queryFurns() {List<Furn> furns = furnService.queryFurns();if (furns != null) {//遍历输出for (Furn furn : furns) {System.out.println(furn);}} else {System.out.println("查询失败");}}
}

image-20240206092742704

14.修改manage_menu.jsp

image-20240206095540342

15.编写FurnServlet
FurnServlet.java
package com.sxs.furns.web;import com.sxs.furns.entity.Furn;
import com.sxs.furns.service.FurnService;
import com.sxs.furns.service.impl.FurnServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/manage/furnServlet")
public class FurnServlet extends BasicServlet{FurnService furnService = new FurnServiceImpl();/*** 将家居信息发送给前端* @param req* @param resp*/public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//取出家居数据List<Furn> furns = furnService.queryFurns();//请求转发到furn_manage.jspreq.setAttribute("furns", furns);req.getRequestDispatcher("/views/manage/furn_manage.jsp").forward(req, resp);}
}
16.修改furn_manage.jsp

image-20240206102123530

17.结果展示
1.管理员登录成功

image-20240206102214604

2.点击家居管理

image-20240206102243122

这篇关于家居网购项目(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899196

相关文章

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依