自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 13.订单页面的展示

前面的servlet类中我们都是这样来处理HTTP请求的。这个类包含了订单的一些基本信息,以及对应的getter和setter方法,用于获取和设置这些信息,这是一个标准的Java Bean模式,允许外部代码通过这些方法来访问和修改订单对象的状态。在这里这个Servlet的主要作用是提供一个接口,让前端可以获取当前用户的订单列表,并以一种结构化的方式(按日期分组)展示这些订单。这个类是Order类的扩展,用于表示一个订单视图,是一个视图对象,它包含了订单的日期、一个订单列表以及计算订单总价和总数量的方法。

2024-08-25 00:17:11 540

原创 12. 购物车页面确认订单

在上一篇文章中,我们完成了在购物车页面的下订单操作,选取商品进行下订单后会弹出订单页面的模态框,在模态框中我们还要对商品进行确认,进行确认支付,完成支付,当然在这里的支付只是页面效果达成的,在当前下项目中我们并没有设计支付板块。

2024-08-24 00:25:54 1001

原创 11.购物车页面下订单

" > 下订单" > 下订单onclickplaceOrder" > 下订单" > 下订单" > 下订单" > 下订单" > 下订单stylewidth100px;" > 下订单if (!toast("错误!", "请选择要购买的商品!");return;${if(!toast("错误!" , "请选择要购买的商品!");return;if(!toast("错误!" , "查询失败!");return;if(!toast("失败!return;

2024-08-22 18:17:28 1043

原创 10.网页删除购物车餐品

在这个例子中,分隔符是 " or ",这意味着如果流中有多个元素,它们将被连接成一个由 " or " 分隔的字符串。对于每个 meal_id,它创建一个条件子句 “meal_id=” + id,然后将所有子句用 " or " 连接起来,形成一个完整的SQL WHERE 子句条件。:这行代码将选中的复选框的值(假设每个复选框的 value 属性代表商品的ID)转换成查询参数字符串,用于构建请求URL。注意:在这里的直接将用户输入拼接到SQL查询中的做法存在SQL注入的风险,一般还是用参数化的查询较好。

2024-08-22 01:15:10 887

原创 9.购物车的选择和购物车商品数量的调整

这里定义了一个名为 changeNum 的异步函数,它接受三个参数:s_id:商品的唯一标识符(通常是数据库中的ID),meal_id:与 s_id 相关联的餐品ID,opr:操作符,用于指示数量是增加(‘+’)还是减少(‘-’)。:这行代码使用三元运算符来决定是增加还是减少商品数量,如果 opr 是 ‘+’,则数量增加1,如果 opr 是 ‘-’,则数量减少1。:用 fetch 函数向服务器发送一个请求,以更新商品的数量,请求的 URL 包含 meal_id 和新的 s_num 值。

2024-08-21 13:47:35 928

原创 8.购物车清单

在之前我们上一篇文章中我们已经将显示当前用户的函数引入了购物车页面中,并且完善了页面的导航跳转等等基础工作,现在我们在引入轻组件,以及轻组件函数。直接从之前的页面复制即可。最后启动程序看效果就好了。注意对比页面显示和数据库的是不是一致,并且添加购物车是不是会在购物车中添加。创建CartServlet类来处理前端发送过来的请求,并查询数据,通过响应发送回给前端。创建ShoppingCart类封装购物车信息,用来存放从数据库查询出来的数据。注意变量名要与数据库中定义的变量名一致。后端到这里逻辑实现完成。

2024-08-20 15:56:13 338

原创 7.添加购物车以及完善导航条跳转

在前几篇文章中,我们一步一步慢慢的实现了项目的建立,从数据库获取数据显示在页面,商品大图查看,查询和商品分页功能,以及登录退出,涉及一些模态框和轻组件的使用。到这里应该对于前后端的数据的交互比较了解了,从后端到前端再到我们所看见的网页,就是这样一步一步建立起来的。我们学习这个项目,并不是单单学习怎么去做这么个商城项目,我们更多的是学他们的代码的逻辑,前后端怎么一起实现的功能,去理解代码为什么这么写,去学习他们代码的架构,层次。其实这里有个疑问,购物车数据增加了,库存的数据是不是应该减少相应的,后续再说吧。

2024-08-19 14:59:04 718

原创 6.登录功能的开发——获取当前用户、用户退出

接下来我们向后端发起请求获取响应,根据响应状态判断,成功状态我们就获取响应中的json格式的数据放入result对象中,如果result.success为真,我们就拿出数据,在控制台打印(便于调试),然后在当前文档中查找id为。我们从请求的会话(Session)中获取名为 “CurrUser” 的属性,放入user对象中,如果不为空,说明用户数据存在我们发送往前端一个包含数据的成功响应,如果为空那么说明没登录,那么向前端发送一个包含错误信息的响应。来显示,最后隐藏登录元素,显示当前用户元素,就完成了。

2024-08-18 17:51:28 939

原创 5.登录功能的开发

其实这个地方都是对前端发起请求的处理,无论那种写法,最后都会运行核心的数据处理代码,无非是一个直接处理请求调用数据处理方法,另一个处理请求在调用另一位请求处理的方法在调用数据处理的方法。这样从前端输入的登录信息就获取到了。表示这是一个 POST 请求方法,是 POST类型,所以在这里我们向后端发送的是POST请求,而之前的我们没有定义请求体,它默认的是GET请求。可能有些人是和我写的是相反的,是在doPost方法里面调用doGet方法,最后代码一样能跑,可能会有疑问(其实是我一开始没想明白,哈哈哈)。

2024-08-18 01:31:42 928

原创 4.网页分页实现,查询,大图查看

在传统的网页中,点击一个链接通常会使浏览器导航到该链接指向的URL地址,需要在点击链接时执行一些其他的操作,触发一个JavaScript函数来执行特定的逻辑,如打开一个模态窗口、显示一个弹出框等,就需要阻止浏览器的默认行为。查询就需要我们的查询条件,还记得上一篇文章提到的作为查询条件的MealQueryDto类嘛,在上一篇文章我们只定义了一个空类,现在我们查询功能就需要用到查询条件,就需要在MealQueryDto类中定义属性了。到这里基本就完成了。这里查找的是模态框,所以传入的参数是模态框的 id。

2024-08-16 15:07:38 1212

原创 3.从数据库中获取列表数据显示在页面

/定义查询条件page:1,rows:8//从后端获取分页数据total:0,const和let都是变量定义的关键字,区别是const定义的变量不能再赋新值,let定义的变量则可以。但是如果const声明的变量是对象,那么对象的属性依旧可以赋新值。//定义函数从后端获取分页数据//async表示该函数有异步操作//fetch函数负责向后端发送请求,获取响应page=${

2024-08-15 15:21:50 882

原创 2.网页获取图片——代码理解

meal_pic=food07.jpeg,项目启动时,加载页面发起Get请求,后端代码执行相关程序,变量meal_pic的图片信息就可以被后端代码获取到,进行IO操作,前端获取到图片。在启动项目的初始路径后加上,定义的路径,输入指定图片的名字会可以实现图片的下载,大概就是处理客户端的http请求,发送图片给客户端。加上定义路径以及图片参数信息:http://localhost:8080/meal/pic?在初始路径下加上定义的路径,加上图片的参数,回车。/meal/pic是我们定义的路径。

2024-08-14 16:56:40 685

原创 1.JavaWeb项目的创建

完成后就可以在右上角看见我们部署的Toncat了。

2024-08-13 16:25:26 236

原创 多线程操作与逻辑——售票系统

CPU调度分支线程时,分支线程可能才获取到剩余票数,CPU又去调度main线程,调度main线程时间比分支线程长。如果我们给厕所加一个锁,里面的人不出来,外面的进不去,这样保证了一次进厕所的只有一个。像这种的线程创建并开启方式,但线程开启的多了之后,代码就会显得冗余,使用Lambda表达式看起来也比较高级。不会让代码看起来繁琐。我们运行这个main方法时,在JVM中首先是main方法压栈,然后就是我们的setName方法,在然后是start方法。创建线程对象时,没有使用普通线程的创建方法,我们使用的是。

2023-06-18 21:07:30 426

原创 IO流之序列化以及反序列化

Java序列化是指将Java对象转换为字节序列的过程,而Java反序列化则是指将字节序列转换为Java对象的过程。Java序列化和反序列化的实现方法有多种,除了我上课学习的Java原生序列化之外,在课程外还有其它的序列化方法:JSON序列化、XML序列化等。Java序列化和反序列化是Java编程中非常重要的概念,它们是Java语言中实现对象持久化的重要手段。然后写一个ob类作为我们进行序列化和反序列化操作的地方,将序列化和反序列化写在一个方法里面,供我们在主类中调用。一、Java序列化和反序列化的概念。

2023-06-10 23:19:46 238

原创 IO流实现对数据的删除

利用String类的split方法将结合中数据进行分割,分割的数据以String数组的形式返回,利用equal方法确定我们要删除的某一行,利用array数组集合的remove()方法将数据删除掉。将修改后的集合的数据再次存储到原来的文件中,新的文件数据会覆盖原来的文件数据。接下来我们需要将修改好的集合中的数据,重新输出到文件中,因为我们没有开启续写,所以新的文件数据会覆盖原来的文件数据。注意我们这里数据是读取的一行,在while循环中数据是以一行一行的形式存入集合中的,一行为一个对象。这是增强for循环。

2023-06-03 18:38:47 823

原创 IO流简介

在程序中,具体以内存为对象,将外部数据读取到内存中,即是输入,从内存中输出到其他设备如磁盘,等存储设备中,称为输出。根据数据输出的方向分为了输入和输出,若根据处理数据的单位则可以分为字节流和字符流。在Java里面,InputStream和Reafer是输入流中的基类,OutputStream和Writer是所以输出流的基类。学会了 FileOutputStream类的用法,就可以触类旁通的使用其他输入和输出的类。作为输入流,可以看到Reader与InputStream这两个类的方法十分相似。

2023-05-28 22:12:49 167

原创 Excepion理解

String sd;int sf;sf = 18;System . out . println("姓名" + sd + "年龄" + sf);} }一般而言,我们理解为代码的运行顺序是从上而下,同时我们编写代码时头脑想的运行效果也是这样来预估的。上面的片段代码,按照我们的逻辑:程序会先执行两个println方法,然后再执行后面的实例化对象。最后运行出来是两行输出内容,然后是异常提示:看到结果如我们想的一样。但其实不然。

2023-05-21 21:52:43 112

原创 Lambda表达式学习

在这里根据上课学到的内容,结合自己的理解对Lambda表达式进行介绍。从内部类,主要是匿名内部类,到Lambda表达式。在课下尝试复刻代码时,发现将部分代码折叠起来后,有些代码部分代码变成了Lambda表达式的形式。例如:这是我课下写的一个匿名内部类,运行效果与创建一个子类继承一样,不同的是匿名内部类不知道它的名字。在我将这部分代码折叠起来后,该部分代码就变成了另外一种形式,见第二张图。在我将上部分代码折叠起来后,就变成了如下的形式。

2023-05-13 20:47:20 60

原创 【java内部类】Java:内部类介绍

相比于普通类,其中我们在S类的内部加上了一个Z类,Z类就是一个成员内部类。通过以上运行结果,可以总结出以下特点:成员内部类,可访问外部静态或非静态的属性,其次外部方法访问成员内部类,须通过实例化对象才能够访问,还有内部类实例化对象需要听过外部类的对象。可以看到我们运行的结果,可以知道内部类的方法成功的访问了外部类的属性,并且外部类静态的和非静态的都输出了出来,同时外部类的方法也成功通过对象访问了内部的数据属性。成员内部类,顾名思义在类的成员位置上,我们创建了一个Java类,这个类在已有类的内部。

2023-05-07 23:23:25 86

原创 父类引用指向子类类型(简单示例带你走进)

将这句话分开,再结合下面代码,就可以很好理解了。

2023-04-22 18:47:12 671

原创 Java:类的继承

子类可以继承父类中所有被子类访问的成员方法,如果此时子类中也定义了一个和父类同类型,同名,同参数的成员方法,那么父类的方法将会被覆盖,有些书上称为覆盖。在这种继承关系里,两个类分别是子类和父类,子类可以从父类那里继承成员变量和方法,同时子类本身也可以重新定义方法(叫做方法重写),扩充新的内容。若类C继承类B,类B继承类A——多重继承,则类C既有从类B那里继来的属性与方法。继承是构造、建立和扩充新类的最有效的手段。注:Java类只支持单继承,但可以进行多层继承——一个类继承一个类,子类又作为另一个类的父类。

2023-04-15 12:08:52 233

原创 Java:ArrayList用法

在Java集合框架里面,主要包括两种类型的容器,一种是集合Collection,另外一种是图Map。在Collection里面又包括来3个子类型:List,Set,Queen,在里面是一些抽象类,最后才是我们的实现类,而ArrayList就是Collection接口的一个实现类,属于底层的数据结构。Array List,顾名思义是一个数组列表,可以处理加长数组的类型,本身是一个泛型类,所以可以存放任意类型的对象,我的理解是Array List是数组的封装类,只不过,这个数组比较特殊;

2023-04-07 21:40:47 242

原创 Java:用Random类做猜数字

Random类似于Scanner,也是Java中提供的类,可以用来产生一个随机数,用处非常广大,可以用来做一个猜数字的小游戏,也可以作为一个功能放到编写的系统程序里面。

2023-04-01 14:16:47 555

原创 java:基于控制台的学生成绩统计系统详解。

首先需要我们先将各种信息如学生姓名,课程成绩等等先存储起来,这样才能在下次输入调出想要的数据信息。现在对于以下信息:大致分为三部分:姓名,成绩,课程,现在我们应该思考选择如何存储。如果随意存储,不仅不利于我们下次用命令调出来,而且像下方那样排列,可能排列不出来或者要用更复杂的方法。在这里,我们选择用分别进行存储。成绩用一个二维数组。通过以上代码,我们已经将学生信息存储进系统。

2023-03-21 15:40:28 2376 2

原创 编译Java程序时遇到的问题以及我的解决方法。

第一种:重新保存文件,重新保存时将encoding(红色划线处)改为ANSI,再次在windows窗口运行;我们将以上代码,在Windows窗口进行编译和运行:出现了下面这种情况:发现编译正常,运行出来是乱码。也就是在原来编译的代码字符基础上,在javac和Java文件名之间输入-encoding utf8。这种情况一般是类名和保存的文件名不一致,只需要将文件名改为类名即可。如果保存时选择的是其他格式,只需要将utf8改为相应的格式就可以。如保存为unicode格式:我们改utf8为unicode即可。

2023-03-17 23:35:39 485

原创 Java的输入输出语句。

Java中的程序结构也分为顺序结构,分支结构和循环结构,分支机构可以等同于c语言中的选择结构。Java中涉及的if,if else,switch,for等等语句的使用相较于c语言而言并没有较大的差别。当我们用Scanner进行输入操作时,该类同时也提供了一系列的nextXXX,让我们可以实现不同的类型输入数据。及main(String args[])方法的参数数组args接收命令行的参数,args[0]及存放第一个参数字符串,args[1]存放第二个数据,以此内推。case 值2:语句块2;

2023-03-12 22:04:14 1381 1

原创 欢迎来到Java的世界

进入甲骨文官网主页,并且我们可以看到最新的版本更新到了19,在这里我建议选择版本11或者8,这俩个版本,一般来说版本越高,意味着新的特性出现,但是在实际的开发应用中,对于初学者来说,jdk8完全够用。在这个官网页面下划,我们可以找到jdk8,然后根据系统现在对应的系统,我们点击Windows,选择x64的下载链接,在弹出来的页面上同意他的条款(若没有Oracle的账号,需要注册一个Oracle账号)然后返回开发工具,我们需要设置他的安装路径,可以按照下图路径安装,(不建议安装在c磁盘)

2023-03-12 17:34:33 278 1

servlet-api.jar

JavaWeb项目jar包

2024-08-15

my-lite-5.0.jar

JavaWeb项目jar包

2024-08-15

db.properties

JavaWeb项目db.properties

2024-08-15

fastjson2-2.0.51.jar

JavaWeb项目jar包

2024-08-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除