JavaWeb07(MVC应用01[家居商城]&连接数据库)

简介: JavaWeb07(MVC应用01[家居商城]&连接数据库)

一.什么是MVC设计模式

1.2 MVC设计模式有什么优点?

①降低代码耦合性:在MVC模式中,三个层各司其职,所有如果一旦哪一层的需求发生了变化,就只需要更改相应层的代码而不会影响到其他层的代码

②有利于分工合作:在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工,网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层

③有利于组件的重用:如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面,可以为一个模式在运行时同时建立和使用多个视图

二.MVC运用(家居商城)

2.1 实现登录

 

package com.zking.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;
import com.zking.biz.IUserBiz;
import com.zking.biz.UserBiz;
import com.zking.entity.User;
/**
 * 登录业务处理  控制器
 * @author PC
 *
 */
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doPost(req, resp);
  }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //设置编码
    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html; charset=UTF-8");
    //拿session和out
    HttpSession session = req.getSession();
    PrintWriter out = resp.getWriter();
    //接收表单提交过来的值  用户名  密码
    String uname=req.getParameter("uname");
    String upwd=req.getParameter("upwd");
    //servlet调用biz
    IUserBiz iub = new UserBiz();
    //调用登录方法
    User u = iub.login(uname, upwd);
    //判断
    if(u!=null) {
      //存起来session
      session.setAttribute("user", u);//键  值
      //跳转到主界面 index.do加载数据
      resp.sendRedirect("index.do?index=1");//为了让首页选中
    }
    else {
      out.print("<scrpit>alert('用户名或者密码有误');location.href='login.jsp';</scrpit>");
    }
  }
}

2.2 绑定轮播【随机三个商品】

2.2.1 效果预览

index.jsp

<!--轮播效果 -->
    <div class="container">
        <div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
            <ol class="carousel-indicators">
                <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
                <li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
                <li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
            </ol>
            <div class="carousel-inner">
              <c:forEach items="${lbls}" var="g" varStatus="vs">
                 <div class="carousel-item ${vs.index==0?'active':''}">
                    <img src="${g.gpath}" width="100%" height="500px" alt="...">
                    <div class="carousel-caption d-none d-md-block">
                        <h5>${g.gname}</h5>
                        <p>${g.ginfo}</p>
                    </div>
                </div>
              </c:forEach>

2.3 绑定最新上架&热门家居

2.3.1 效果预览

2.3.2 代码实现

数据库脚本

--类别表
create table tb_type
(
  tid   NUMBER,--类别id
  tname VARCHAR2(20) --类别名称
)
--插入数据
insert into tb_type (tid, tname)
values (1, '布艺软饰');
insert into tb_type (tid, tname)
values (2, '装饰摆件');
insert into tb_type (tid, tname)
values (3, '蜡艺香薰');
insert into tb_type (tid, tname)
values (4, '墙饰壁挂');
insert into tb_type (tid, tname)
values (5, '创意家居');
commit;
--商品表 tb_goods
--插入数据
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (1, '商品3', 3, 45.4, 38, '2023-01-01', 'img/bz02.jpg', '不畏将来,不念过往');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (2, '商品2', 4, 29.9, 8, '2022-10-23', 'img/bz04.jpg', '夏天有着迟暮的霞光,正如晚来的你,皆是笑意');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (3, '毛茸茸的小物件', 5, 12.9, 104, '2018-02-04', 'img/bz05.jpg', '世界的温柔,是晚来的善意和干净的你');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (4, '可爱舒适的抱枕', 2, 38.8, 91, '2023-13-09', 'img/bz03.jpg', '人间骄阳正好,风过林梢,彼时还正当年少');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (5, '商品12', 2, 18.8, 45, '2022-01-23', 'img/bz12.jpg', '踏月而来,这繁星便是赠礼');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (6, '商品1', 2, 23.9, 145, '2021-02-23', 'img/bz06.jpg', '你被黑暗敲打恰恰说明你是光明本身');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (7, '商品666', 1, 89.9, 888, '2020-11-22', 'img/bz11.jpg', '回首亘年漫月里所有怦然心动,你仍拨得头筹');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (8, '好看的花呀', 3, 9.9, 666, '2019-02-20', 'img/bz10.jpg', '最美是牵着你的手一路狂奔');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (9, '北欧家具', 1, 4.5, 10, '2022-12-24', 'img/bz08.jpg', '生活很暗,抱歉,我也没光');
insert into tb_goods (gid, gname, tid, gprice, gxl, gtime, gpath, ginfo)
values (10, '商品13', 4, 9.9, 100, '2020-12-20', 'img/bz09.jpg', '清水煮岁月,不悲不喜');
commit;
        <!-- 最新上架①或②-->
        <!-- 微章方式 ①-->
        <!-- <div class="h2 " style="margin-top: 10px;">
            <span class="badge badge-danger ">最新上架</span>
        </div> -->
        <!-- 背景图片方式② -->
        <div class="bq">
            最新上架
        </div>
        <div class="row">
          <c:forEach items="${zxls}" var="g">
            <div class="col">
                <!-- 画像  text-center"居中-->
                <figure class="figure  text-center">
                <!--<a href="xq.do?gid=${g.gid}"> 详情页面 自己写  -->
                  <a href="xq.do?gid=${g.gid}">  <img src="${g.gpath}" class="figure-img img-fluid rounded" alt="..."></a>
                    <figcaption class="figure-caption"><b>${g.gname}</b>&nbsp;<b>&yen;${g.gprice}</b></figcaption>
                </figure>
            </div>
          </c:forEach>
        </div>
        <!-- 热门家居 -->
        <div class="bq">
            热门家居
        </div>
        <div class="row">
          <c:forEach items="${xlls}" var="g">
          <div class="col">
               <!-- 画像  text-center"居中-->
               <figure class="figure  text-center">
               <!--<a href="xq.do?gid=${g.gid}"> 详情页面 自己写  -->
              <a href="xq.do?gid=${g.gid}"> <img src="${g.gpath}" class="figure-img img-fluid rounded" alt="..."></a>
                   <figcaption class="figure-caption"><b>${g.gname}</b>&nbsp;<b>&yen;${g.gprice}</b></figcaption>
               </figure>
           </div>
        </c:forEach>
    </div>

2.4 页面包含

2.4.1 语法

       <!--页面包含  -->

  <jsp:include page="header.jsp"></jsp:include>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例1:首页最新上架&热门家居实现</title>
    <!-- 支持手机端 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!-- 引入CSS -->
    <link rel="stylesheet" href="CSS/bootstrap.css" />
    <style>
        .navbar-collapse {
            /*1代表弹性扩大占用父容器剩余部分   0代表不占用*/
            flex-grow: 0;
        }
        .active {
            font-weight: bold;
            /*加粗*/
        }
    </style>
</head>
<body>
    <!-- 导航条 -->
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <!-- 固定容器 -->
        <div class="container">
            <a class="navbar-brand" href="#">你好<b>${user.uname}</b>,欢迎来到集美家居</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
                aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav">
                    <!-- active激活的 -->
                    <li class="nav-item ${param.index==1?'active':''}">
                        <a class="nav-link" href="index.do?index=1">首页<span class="sr-only">(current)</span></a>
                    </li>
                    <li class="nav-item ${param.index==2?'active':''}">
                        <a class="nav-link" href="type.jsp?index=2">分类</a>
                    </li>
                    <c:if test="${empty user}"><!--没登录  -->
                      <li class="nav-item">
                          <a class="nav-link" href="login.jsp">登录</a>
                      </li>
                       <li class="nav-item">
                          <a class="nav-link ">注册</a>
                    </li>
                    </c:if>
                     <c:if test="${not empty user}"><!--登录  -->
                      <li class="nav-item">
                          <a class="nav-link" href="exit.do">退出</a>
                      </li>
                    </c:if>
                    <li class="nav-item ${param.index==5?'active':''}">
                        <a class="nav-link" href="cart.jsp?index=5">我的购物车</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <!-- 引入jQuery的类库 -->
    <!-- 再引入Bootstrap的类库 -->
    <script src="js/jquery-3.6.4.js"></script>
    <script src="js/bootstrap.js"></script>
</body>
</html>

2.4.2 处理

注意:${param.key} 相当于request.getParameter("key")用于jsp页面取值

<ul class="navbar-nav">
                    <!-- active激活的 -->
                    <li class="nav-item ${param.index==1?'active':''}">
                        <a class="nav-link" href="index.do?index=1">首页<span class="sr-only">(current)</span></a>
                    </li>
                    <li class="nav-item ${param.index==2?'active':''}">
                        <a class="nav-link" href="type.jsp?index=2">分类</a>
                    </li>
</ul>
//登录成功后  跳转到主界面的加载数据处 让首页默认选中
resp.sendRedirect("indedx.do?index=1")

2.5 登录与否判断

--登录了则导航条上出现登录名并不显示登录,而显示退出

<c:if test="${not empty user}"><!--登录  -->
          <li class="nav-item">
                  <a class="nav-link" href="exit.do">退出</a>
             </li>
    </c:if>
req.setCharacterEncoding("utf-8");
HttpSession session = req.getSession();
 session.setAttribute("user", null);
resp.sendRedirect("login.jsp");
--没有登录才显示登录,注册选项
 <c:if test="${empty user}"><!--没登录  -->
            <li class="nav-item">
                            <a class="nav-link" href="login.jsp">登录</a>
             </li>
                 <li class="nav-item">
                            <a class="nav-link " href="register.jsp">注册</a>
              </li>
            </c:if>


相关文章
|
2天前
|
存储 算法 数据库
矢量数据库在图像识别与检索中的应用实践
【4月更文挑战第30天】本文探讨了矢量数据库在图像识别与检索中的应用,通过特征提取(如SIFT、SURF)、编码和相似度度量实现快速识别。在图像检索流程中,经过预处理、特征提取和编码后,矢量数据库用于查询相似特征,排序后展示给用户。实际案例显示,矢量数据库能提升电商平台的商品图像搜索效率和用户体验。随着技术发展,这一领域应用前景广阔。
|
2天前
|
机器学习/深度学习 搜索推荐 数据库
矢量数据库的未来发展趋势:新技术与应用展望
【4月更文挑战第30天】随着AI和机器学习的发展,矢量数据库在处理非结构化数据方面的重要性日益增强。预测到2028年,全球矢量数据库市场将从2023年的15亿美元增长至43亿美元。未来趋势包括:并行计算与分布式架构提升处理能力,硬件加速技术(如TPU和昇腾芯片)提高性能,自适应索引机制优化查询效率。应用领域将拓展至NLP、图像视频分析和推荐系统,为各行业带来更多创新和价值。
|
2天前
|
机器学习/深度学习 存储 人工智能
矢量数据库在机器学习领域的应用与前景
【4月更文挑战第30天】本文探讨了矢量数据库在机器学习领域的应用,包括特征存储、相似性搜索、模型训练与调优及实时分析。随着AI技术发展,矢量数据库将深度融合,提升扩展性和可伸缩性,增强智能化功能,并加强安全性与隐私保护。未来,矢量数据库将在机器学习领域扮演关键角色。
|
2天前
|
存储 数据可视化 关系型数据库
矢量数据库在地理空间数据处理中的应用
【4月更文挑战第30天】矢量数据库在地理空间数据处理中展现优势,高效存储管理高维向量数据,支持快速查询、空间分析与可视化。分布式处理能力适应大数据量需求,提供高效、灵活、可扩展及可视化支持,是处理地理空间数据的理想选择。随着技术进步,其应用将更加广泛。
|
2天前
|
SQL 关系型数据库 MySQL
【Go语言专栏】使用Go语言连接MySQL数据库
【4月更文挑战第30天】本文介绍了如何使用Go语言连接和操作MySQL数据库,包括选择`go-sql-driver/mysql`驱动、安装导入、建立连接、执行SQL查询、插入/更新/删除操作、事务处理以及性能优化和最佳实践。通过示例代码,展示了连接数据库、使用连接池、事务管理和性能调优的方法,帮助开发者构建高效、稳定的Web应用。
|
2天前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
2天前
|
运维 分布式计算 DataWorks
DataWorks产品使用合集之dataworks为子账号创建DataWorks访问密钥的基本步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
15 0
|
2天前
|
DataWorks 安全 数据库
DataWorks产品使用合集之在DataWorks中,使用Power BI Desktop来连接Hologres数据库需要设置白名单如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
19 2
|
2天前
|
SQL DataWorks 网络安全
DataWorks操作报错合集之DataWorks连接Hive数据库时出现连接超时的问题如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
7 1
|
3天前
|
弹性计算 关系型数据库 MySQL
检测MySQL 数据库连接数量
【4月更文挑战第29天】
5 0