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

news2024/9/25 15:27:13

目录

一.什么是MVC设计模式?

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

二.MVC运用(家居商城)

2.1 实现登录

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

2.2.1 效果预览

index.jsp

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

2.3.1 效果预览

 2.3.2 代码实现

数据库脚本

 2.4 页面包含

2.4.1 语法

           

2.4.2 处理

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

 

//登录成功后  跳转到主界面的加载数据处 让首页默认选中

resp.sendRedirect("indedx.do?index=1")

2.5 登录与否判断

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

            

  •    

    req.setCharacterEncoding("utf-8");

    HttpSession session = req.getSession(); session.setAttribute("user", null);

    resp.sendRedirect("login.jsp");

    --没有登录才显示登录,注册选项

                 

  •                 
  •             


一.什么是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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux进程基本知识

1.什么是程序&#xff0c;什么是进程&#xff1f; 程序是静态的概念&#xff0c;例如 gcc xx.c -o pro 磁盘中生成pro文件&#xff0c;叫做程序 进程是程序的一次运行活动&#xff0c;意思是程序跑起来了&#xff0c;系统中就多了一个进程 2.如何查看系统中有哪些进程&…

EMC VNX登录Unisphere错误 certificate has invalid date问题处理

经常有用户反应说&#xff0c;突然用浏览器登录EMC VNX或者Clarrion CX系统的时候出现“certificate has invalid date”的故障&#xff0c;然后无法正常登录图形界面。具体报错如下图所示&#xff1a; 导致这个问题的原因在于VNX系统中的certification认证过期&#xff0c;既然…

SpringBoot整合Echarts实现用户人数和性别展示

一、背景 在Web应用开发中&#xff0c;经常需要使用图表来展示数据&#xff0c;而Echarts是一个非常优秀的图表库。SpringBoot是一个非常流行的Java Web框架&#xff0c;它可以快速搭建Web应用。本文将介绍如何使用SpringBoot集成Echarts&#xff0c;实现展示用户人数和性别的…

百度百科如何创建?创建百度百科的秘诀你值得掌握(经验分享)

百度百科是中国最大的百科全书式的中文网站之一&#xff0c;是广大用户在互联网上获取知识的重要途径之一。任何人都可以在百度百科创建新的词条&#xff0c;为网站的发展作出贡献。 小媒同学将从如何创建百度百科词条和注意事项两个方面来详细介绍百度百科词条的创建流程和相关…

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年&#xff0c;W3C 提出了一种新的方案----Flex 布局&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前&#xff0c;它已经得到了所有浏览器的支持&#xff0c;这意味着&#xff0c;现在就能很安全地使用这项功能。…

在选择数据库时需要考虑的因素

在文章的第一部分中&#xff0c;我们奠定了理解各种数据库类型及其用例的基础。随着我们继续探索数据库选择的艺术&#xff0c;我们现在将更深入地探讨影响这个决策过程的关键因素。通过更详细地检查每个因素&#xff0c;我们可以更好地装备自己做出符合项目要求的知情选择&…

ubuntu 卸载 软件包 libfdt-dev

编译环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro NUC980 bsp 自带的编译工具链&#xff1a; nuc980bsp.tar.gz&#xff0c;版本 gcc version 4.8.4 (GCC) NUC980 uboot : https://gitee.com/OpenNuvoton/NUC970_U-Boot_v2016.11 目标 手动编译 NUC9…

【Windows】Windows下载使用wget命令

文章目录 一、前言 & 介绍二、安装步骤2.1 下载 wget 压缩包2.2 解压到指定的位置2.3 检查是否安装成功2.4 是否可以正常下载 一、前言 & 介绍 wget 是 linux 一个下载文件的工具&#xff0c;可以下载一些软件或从远程服务器恢复备份到本地服务器。 wget 在 Linux 下…

PCA主成成分分析例题详解

主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息 需要了解具体细节可看此视频&#x1f449;&#xff1a;什么是主成成分分析PC…

webpack 5 实战(3)

四十一、代码拆分方式 通过Webpack实现前端项目整体模块化的优势很明显&#xff0c;但是它同样存在一些弊端&#xff0c;那就是项目当中所有的代码最终都会被打包到一起&#xff0c;试想一下&#xff0c;如果说应用非常复杂&#xff0c;模块非常多的话&#xff0c;那打包结果就…

C++ ---- 入门基础知识总结

思维导图 目录 命名空间 命名冲突 如何定义命名空间 命名空间定义语法 嵌套定义 同一工程下定义同名命名空间 命名空间的使用 命名空间名称和作用域限定符&#xff08;: :&#xff09; using将命名空间中某个成员“释放”出来 using namespace 命名空间名称 C标准库…

Go:值与指针

1. 计算机中的值 在百万年的演化历史中&#xff0c;人类对事物的属性进行了抽象&#xff0c;有了数量、精度、信息等概念的表示&#xff0c;对应的我们称之为整数、小数、文本文字等。计算机出现后&#xff0c;我们使用计算机对真实世界的问题进行建模&#xff0c;通过计算机的…

WIN10安装CUDA保姆级教程[2023.5.7更新]

本系列分步记录在win10上搭建CUDAcudnnpytorchYOLOv5tensorrt等深度学习架构部署及系统搭建&#xff0c;欢迎关注追更&#xff01; 目录 0.了解CUDA 1.注意事项 1.1显卡驱动 1.2确定关联性 1.2.1 显卡驱动与cuda的对应关系&#xff1a; 1.2.2 pytorch与cuda的对应关系 2.c…

NLP大模型微调原理

1. 背景 LLM (Large Language Model) 大型语言模型&#xff0c;旨在理解和生成人类语言&#xff0c;需要在大量的文本数据上进行训练。一般基于Transformer结构&#xff0c;拥有Billion以上级别的参数量。比如GPT-3(175B)&#xff0c;PaLM(560B)。 NLP界发生三件大事&#xff…

ChatGLM-6B模型微调实战(以 ADGEN (广告生成) 数据集为例,序列长度达 2048)

kingglory/ChatGLM-6B 项目地址 1 介绍 对于 ChatGLM-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%&#xff0c;再通过模型量化、Gradient Checkpoint 等方法&#xff0c;差不多需要 7GB或则8GB 显存即可运行。 2 环境 2.1 python …

【软考-中级】系统集成项目管理工程师-计算题

系统集成项目管理工程师 二、计算题题型一&#xff1a;EMV&#xff08;预期货币价值&#xff09;题型二&#xff1a;加权系统题型三&#xff1a;自制和外贸决策——采购管理题型四&#xff1a;沟通渠道——沟通管理题型五&#xff1a;投资回收期、回收率题型六&#xff1a;进度…

metinfo_6.0.0 任意文件读取漏洞复现

一.漏洞简介 MetInfo是一套使用PHP和Mysql开发的内容管理系统。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。 二.漏洞影响 MetInfo 6.0.0 MetInfo 6.1.0 三.漏洞分析 在\MetInfo6.0.0\app\system\i…

推开“任意门”,华为全屋智能正在实现一代科幻迷的童年梦想

科幻作家亚瑟查理斯克拉克有句名言&#xff0c;“任何足够先进的科技&#xff0c;都和魔法无异”。 提到空间魔法&#xff0c;很多科技爱好者或科幻迷会想到哆啦A梦的“任意门”。通过那扇门&#xff0c;可以进入全新的世界&#xff0c;去任何想去的地方&#xff0c;是不少人在…

最新研究,GPT-4暴露了缺点!无法完全理解语言歧义!

夕小瑶科技说 原创作者 |智商掉了一地、Python自然语言推理&#xff08;Natural Language Inference&#xff0c;NLI&#xff09;是自然语言处理中一项重要任务&#xff0c;其目标是根据给定的前提和假设&#xff0c;来判断假设是否可以从前提中推断出来。然而&#xff0c;由于…

远程连接阿里云mysql数据库教程(SSH方式和宝塔面板方式)

一、SSH方式 1.首先登录mysql数据库 mysql -u root -p 输入密码后&#xff1a; 第一次连接的话该密码可以通过宝塔面板来重置&#xff1a; &#xff08;1&#xff09;输入 bt&#xff1a; &#xff08;2&#xff09;输入 7 即可重置mysql密码 2.查询mysql数据库中的user表 …