瑞吉外卖项目总结
前言博主最近在学习开发后端项目,因为没有做项目的基础,所以找了黑马的瑞吉外卖项目练练手。开始做这个项目的时候还是在学校,最近也是回到了家里。这几天就把在学校里差的内容做完了,从开始做这个项目到结束差不多一个月的时间。而瑞吉外卖这个项目更多的CRUD,调用API和库,总体上功能简单,没有什么难点,也没有高并发的场景可供调优实践。但是在其中还是学习到很多知识,所以写下这篇博客来总结项目。
后端Controller层返回结果统一封装为R对象后端的Controller层接收完前端的请求后,要返回什么样的结果是需要按情况变化的,但是如果每一个Controller返回的结果是不一样的,前端也要用不同的数据类型来接收。为了避免麻烦,前后端指定统一的controller层返回对象类型。
1234567891011121314151617181920212223242526272829303132public class R<T> implements Serializable { private Integer code; //编码:1成功,0和其它数字为失败 ...
监听器案例
需求描述某一个域名所对应的网站在某个时间段,浏览的变化情况:针对波峰和波谷的变化,就可以针对性地对网站进行优化和调整
此案例包括两个部分:利用监听器实现对网站访问的量的获取,图表信息的展示
一.具体实现:后台数据准备1.第一部分:编写监听器
RequestTotalListener:监听器
下面这个监听器的编写方式,最重要的启发是:一个问题,梳理清业务后,做好逻辑规划,然后按条例分别编写程序就ok了
这个监听器内容其实很简单,大略看看就ok了
全局对象ServletContext创建的时候,就在全局对象中初始化两个集合对象timeList和valueList;每当请求对象ServletRequest被创建的时候,就在timeList和valueList中做出对应的操作
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import javax.servlet.ServletContextEvent;import jav ...
Java中的Set接口
Set接口set接口存储12345678/**存储的数据特点:无序的、不可重复的元素具体的:以HashSet为例说明:1.无序性:不等于随机性。存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的2.不可重复性:保证添加新的元素照equals()判断时,判断的值为Hashcode的值,不能返回true,即:相同的元素只能添加一个如果HashSet集合中存储的是自定义类的对象(JavaBean),需要重写equals(),HashCode方法,利用HashCode()算出Hash值后,按照不同的情况利用equals()方法判断其中的值是否相同,然后做出不同的判断,因为HashSet集合中是没有重复的数据的*/
元素添加过程123456789101112131415161718/**以HashSet为例我们向HashSet中添加元素a,首先调用元素a所在类的HashCode()方法,计算元素a的哈希值,此哈希值接着某种算法计算出在HashSet底层数组中的存放位置(即:索引位置,判断数组此位置上是否有元素)如果此位置没有其他元素,则元素a添加成功。-->情 ...
Java中的List接口
List接口List接口概述
鉴于Java中数组用来存储数据的局限性·,我们通常使用List代替数组
List集合类中元素有序。且可重复,集合中的每个怨怒苏都有其对应的顺序索引
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存储容器中的元素
JDK API中的List接口的实现类常用的有: ArrayList、LinkedList和Vector
List接口存储数据的特点1234/**List接口存储数据的特点:存储有序的、可重复的数据如果List集合中存储的是自定义类的对象(JavaBean),需要重写equals()方法,add()方法不需要用到此方法,但是例如改,查操作的时候是需要用到的equals()方法来判断其中的值*/
List接口的常用方法1234567891011/**增加:add(Object obj)删除:remove(int index)/remove(Object obj)改:set(int index,Object ele)查:get(int index)插入:add(int index,Object ele)长度:s ...
Java中的Collection接口
单列集合框架结构
Collection接口:单列集合,用来存储一个一个对象
List接口:存储有序的。可重复的数据 –>”动态”数组
ArrayList、LinkedList、vector
Set接口:存储无序的、不可重复的数据 –>高中讲的”集合”
HashSet、LinkedHashSet、TreeSet
Collection接口中常用的方法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778/** * Collection接口中声明的方法的测试 * 向Collection接口的实现类的对象中添加数据obj时,要求obj所在类中重写equals(); * */public class CollectionTest { @Test public void test1(){ ...
Java中的反射机制
Java反射机制java反射机制概述
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API(反射接口)取得任何类的内部信息,并能直接操作任何对象的内部属性及方法
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称为:反射。
动态语言 VS 静态语言
动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行代码可以根据某些条件改变自身结构 主要静态语言:Object-C、C#、JavaScript、PHP、Python、Erlang
静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++
Java Java不是动态语言,但Java可以称之为”准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似 ...
利用JDBC获取数据库连接
获取数据库连接2.1要素一:Driver接口的实现类2.1.1Driver接口介绍
java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现,也就是说要调用jdbc的jar,必须需要实现driver接口
在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理类(java.sql.DriverManager)去调用这些Driver实现 1.Oracle的驱动:oracle.jdbc.driver.OracleDriver 2.mySql的驱动:com.mysql.jdbc.Driver
将jdbc的jar包导入工程
注意:如果是Dynamic Web Project(动态的web项目),则是把驱动jar放到WEB目录下的WEB-INF目录下中lib目录中即可
2.1.2加载与注册JDBC驱动
加载驱动:加载jdbc驱动(jdbc的jar包)需要调用Class类的静态forName(),向其传递要加载的JDBC驱动的类名 class.forName(“com.mysql.jdbc. ...
jQuery选择器
jQuery选择器web开发的两个要素
在使用HTML开发页面时,有两个基本点
选择HTML页面上的哪些元素
在这些元素上做哪些动作
在JavaScript中有document.getElementById()等方式获取元素,但这种方式太古老。麻烦、局限
jQuery选择器
jQuery选择器用于选择器用于选中需要操作的页面元素
语法1:jQuery(选择器表达式)
语法2:$(选择器表达式)
jQuery选择器是一种更加快捷高效的方式:
上面的语法1和语法2是等价的,当在页面中引入jQuery文件后,使用jQuery关键字和$是完全等价的;符合需求,高效准确地选择器表达式是关键
jQuery基本选择器
基本选择器是jQuery最基础也是最常用的选择器表达式
语法
说明
$(“#id”)
ID选择器,指定id元素的对象
$(“标签”)
元素选择器,选择指定标签名的选择器(例如a标签等)
$(“.class”)
类选择器,选中拥有指定的CSS类的元素
$(“S1,S2,SN”)
组合选择器,对元素进行组合
id选择器和类选择器最常用:
标签选择器有 ...
jQuery对Ajax的支持
简介已经知道,JavaScript是一种浏览器脚本语言,Ajax是一种内嵌到浏览器中的一种技术
jQuery是一个以JavaScript为基础的plugin,即jQuery可以简化JavaScript开发;jQuery也可以简化Ajax的开发
Ajax的流程包括创建XmlHttpRequest对象,发送Ajax请求,处理服务器响应三个步骤;比较麻烦;jQuery也提供了对Ajax的支持;在jQuery中对Ajax进行了大幅度的简化和封装
jQuery对Ajax的支持
jQuery对Ajax进行封装,提供了$.ajax()方法
语法:$.ajax(options);即在引入jQuery文件后,在html文件的标签中,就可以使用$.ajax(方法中书写一个json表达式,使用Ajax)之所以这么简单,背后是jQuery的简化的”plugin”
在设计之初,Ajax是使用XML作为对象或数据传输的表达方式的,这也是Ajax最后一个x的含义;但后来发现利用JSON来进行数据传输更加简单,目前基本使用JSON进行数据交互
json常用设置项
说明
url
发送请求地址
...
Ajax工具介绍
Ajax介绍Ajax主要作用:在不刷新网页的情况下,与后台数据进行交互,从而实现页面局部刷新的功能
Asynchronous JavaScript And Xml(异步的JavaScript和XML)
Ajax可以在不刷新页面的前提下,进行页面局部更新
Ajax不是新的技术,Ajax并不是W3C的标准
Ajax并不是一种标准,而是服务商提供的一种技术;大部分浏览器在浏览器内核中都提供了Ajax的核心实现;后来某位大牛对这些技术进行整合和命名,才有今天的Ajax
学习Ajax时,需要理解几点:
(1)以前遇到的请求都是和一个网页面联系在一起的,即前端发起一个请求就是和一个网页联系在一起,也可以理解为以前接触到的都是为了展示一个全新的页面而发起的一个请求,也可以理解为每发起一个新的请求,都会创建一个新的界面来展示一个新的界面来展示本次响应的内容;但Ajax不是这样的,Ajax的请求内容并不是为了展示一个新的界面,而是将本次请求的响应内容,局部刷新展示在已有界面上,本质是,已有页面发起一个没有和新的页面绑定的请求(这个请求和已有界面的局部刷新有关)
而这个功能的实现,浏览器中内嵌的a ...