计划:先学习前后端基本概念,通过一个小项目熟悉流程,再阅读麻雀源码,参考修改。

文章目录

    • 预期目标
    • 麻雀研究
      • html概览
      • js解析
    • 麻雀魔改
    • html
    • CSS
  • web
    • MySql
    • js
    • AJAX
    • Vue
    • Mybatis
    • spring

网页的构成:
html:用来定义网络内容的含义和基本结构的标记语言
CSS:用来描述网页的表现与展示效果
JS:通常用来执行网络的功能与行为

预期目标

预期进度
v1.0思考一个基于麻雀的改造思路:先阅读源码,在用户界面的recforyou点击一个电影的时候,弹出一个js提示,显示推荐理由。思路:需要给每个用户和推荐给他的每个电影生成推荐理由,在启动的时候发布到网页,然后查询。参照装载电影的设计思路,在鼠标获得焦点的时候生成推荐理由,可能需要改写电影类?或者新建一个result类?
先找到获得焦点的代码部分,定位,再去研究数据是怎样封装,发布到网页,请求的。

v2.0,参考论文,基于sb和vue从零搭建一个前后端框架,支持用户的登录,包含冷启动等功能,看看能不能融入更高级的组件如flink实现高级功能

麻雀研究

问题记录:boostrap不是要引入源码包吗怎么没看到?还是说在css那里,或者说直接复制html不需要引入源码包?
为什么只有在麻雀本体里面能显示出图片,但是复制去新开一个web项目就显示不了?
js为什么效果不显示?
猜测是因为找不到地址?

v=针对每个用户对他的每一个

html概览

collection.html对应的是某一类电影点进去的集合

index.html对应的是主页

movie.html对应的是电影点进去的界面

user.html点进去对应的是用户点进去的界面

user.html甚至可以选择模型?
meta标签:描述元数据

html底下的函数来自哪个文件呢?

recsys.js写的是一些加载数据的逻辑

collection的getQueryString函数:就来自它自己。

index的addGenreRow:来自recsys.js
作用是给每个种类的电影添加行

movies.html的addMovieDetails和addRelatedMovies:来自recsys.js

user.html里面的三个函数也是来自recsys.js

jquery写的是什么呢?
这好像只是一个包,没有具体的逻辑编写。jq的引入是为了简化js的编写的。

js解析

除了页面的设计,还应该关注底下的javascript代码。
麻雀里面主要用的是jquery
需要了解是什么编程模型,html和script在一起,而且文件名是html

addGenreRow分析
首先调用addRowFrame
addGenreRow(‘#recPage’, ‘Action’, ‘action-collection’, 8, baseUrl);
五个参数:
function addGenreRow(pageId, rowName, rowId, size, baseUrl) {
addRowFrame(pageId, rowName, rowId, baseUrl)
//pageid就是#recPage
//baseUrl:http://localhost:6010/
$.getJSON(baseUrl + “getrecommendation?genre=”+rowName+“&size=”+size+“&sortby=rating”, function(result){
$+.each (result, function(i, movie){
appendMovie2Row(rowId, movie.title, movie.movieId, movie.releaseYear, movie.averageRating.toPrecision(2), movie.ratingNumber, movie.genres,baseUrl);
//函数的参数中有很多电影的信息,这些信息从哪里来呢?
//movie是怎么来的呢?
});
});
};

麻雀魔改

添加Explaination的数据bean,封装推荐解释数据
添加ExplainationService类,在datamanager类里增加相应的加载代码

在js文件中增加请求解释数据的逻辑
修改js注入html的文件把请求到的解释展示,效果如下
调试的时候不能单步调试,但也可以通过alert输出到网页来调试$.getJSON(baseUrl + "getrecforyou?id="+userId+"&size=32&model=" + model, function(result){$.each(result, function(i, movie){//猜测是getJson没有get到,所以就不执行函数?appendMovie2Row2不用写getJSON里面,而是用变量接收getjson传出来的exp,//再在外面调用appendMovie2Row2就好了$.getJSON(baseUrl+"getexplaination?id="+userId+"&movieid="+movie.movieId,function(result){appendMovie2Row2(result.explaination,containerId, movie.title, movie.movieId, movie.releaseYear, movie.averageRating.toPrecision(2), movie.ratingNumber, movie.genres,baseUrl);// alert(result.explaination) ;});// alert(explaination)});});

html

html的组成:
标签:网页的内容和文字
属性:标签的描述信息(eg所属的类,标签的位置)

常用标签:

标签名 作用
p 表示文本的一个段落
h 表示文档标题,<h1>–<h6> ,呈现了六个不同的级别的标题,<h1> 级别最高,而 <h6> 级别最低
hr 表示段落级元素之间的主题转换,一般显示为水平线
li 表示列表里的条目。
ul 表示一个无序列表,可含多个元素,无编号显示。
ol 表示一个有序列表,通常渲染为有带编号的列表
em 表示文本着重,一般用斜体显示
strong 表示文本重要,一般用粗体显示
font 表示字体,可以设置样式(已过时)
i 表示斜体
b 表示加粗文本
标签名 作用
a 表示超链接。
标签名 作用
img 可以显示一张图片(本地或网络)
属性名 作用
title 鼠标悬停(hover)时显示文本。
alt 图形不显示时的替换文本。
height 图像的高度。
width 图像的宽度。
标签名 作用
form 表示表单,是用来收集用户输入信息并向 Web 服务器提交的一个容器
属性名 作用
action 处理此表单信息的Web服务器的URL地址
method 提交此表单信息到Web服务器的方式
autocomplete 自动补全,指示表单元素是否能够拥有一个默认值,配合input标签使用
标签名 作用
label 表单元素的说明,配合表单元素使用
input 表单中输入控件,多种输入类型,用于接受来自用户数据
button 页面中可点击的按钮,可以配合表单进行提交
input属性值 作用
text 单行文本字段
password 单行文本字段,值被遮盖
email 用于编辑 e-mail 的字段,可以对e-mail地址进行简单校验
属性值 作用
button 无行为按钮,用于结合JavaScript实现自定义动态效果
submit 提交按钮,用于提交表单数据。
reset 重置按钮,用于将表单中内容恢复为默认值。
image 图片提交按钮。必须使用 src 属性定义图片的来源及使用 alt 定义替代文本。还可以使用 height 和 width 属性以像素为单位定义图片的大小。

CSS

CSS:用来描述网页的表现与展示效果,是用于设置和布局网页的计算机语言.
CSS是一门基于规则的语言 — 你能定义用于你的网页中特定元素的一组样式规则。这里面提到了两个概念,一是特定元素,二是样式规则。对应CSS的语法,也就是选择器(selects和声明(eclarations)。
语法:
内联样式:
内联样式是CSS声明在元素的style属性中,仅影响一个元素:
内部样式表:
内部样式表是将CSS样式放在style标签中,通常style标签编写在HTML 的head标签内部。

外部样式表:< link rel=“stylesheet” href=“css文件” >

外部样式表是CSS附加到文档中的最常见和最有用的方法,因为您可以将CSS文件链接到多个页面,从而允许您使用相同的样式表设置所有页面的样式。

外部样式表是指将CSS编写在扩展名为css的单独文件中,并从HTML的link元素引用它,通常link标签编写在HTML 的head标签内部。

选择器:
选择器作用:选择html元素绑定,添加css的效果。
最常用的几种选择器:
元素选择器
类选择器
id选择器
通用选择器

开发者工具可以修改样式

web

系统结构:
cs结构:它指的是客户端——服务器的方式。其中C代表着Client,S代表着服务器。
bs结构:它指的是浏览器——服务器的方式。其中B代表着Browser,S代表着服务器。

服务器:服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),也可以指代用于部署网站的应用。我们这里说的服务器,其实是web服务器,或者应用服务器。它本质就是一个软件,一个应用。作用就是发布我们的应用(工程),让用户可以通过浏览器访问我们的应用。tomcat是服务器

HTTP的全称是:Hyper Text Transfer Protocol,意为 超文本传输协议。它指的是服务器和客户端之间交互必须遵循的一问一答的规则。形容这个规则:问答机制、握手机制。

静态资源:运行tomcat访问静态网页,无法跟java产生交互。其实这么看麻雀应该是一个静态的网络,我们最好能做成一个动态的,能够提供用户注册功能的网页。

动态资源servelet

需要重写service方法

Tomcat是服务器
服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),**也可以指代用于部署网站的应用。我们这里说的服务器,其实是web服务器,或者应用服务器。**它本质就是一个软件,一个应用。作用就是发布我们的应用(工程),让用户可以通过浏览器访问我们的应用。
相应状态码:

状态码 说明
200 一切都OK>
302/307 请求重定向(客户端行为,两次请求,地址栏发生改变)
304 请求资源未发生变化,使用缓存
404 请求资源未找到
500 服务器错误

Servlet:
svl是什么?
Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是一个Java类。JavaWeb中servlet主要功能是承载网络连接,业务逻辑处理,比如一些编码格式的转换、登录拦截等。

我们通过浏览器发送请求,请求首先到达Tomcat服务器,由服务器解析请求URL,然后在部署的应用列表中找到我们的应用。接下来,在我们的应用中找应用里的web.xml配置文件,在web.xml中找到FirstServlet的配置,找到后执行service方法,最后由FirstServlet响应客户浏览器。整个过程如下图所示:
浏览器——>Tomcat服务器——>我们的应用——>应用中的web.xml——>FirstServlet——>响应浏览器

Servlet类视图

svl的生命周期
出生:请求第一次到达Servlet时,对象就创建出来,并且初始化成功。只出生一次,就放到内存中。

活着:服务器提供服务的整个过程中,该对象一直存在,每次只是执行service方法。

死亡:当服务停止时,或者服务器宕机时,对象消亡。

常用的方法是doGet()和doPost(),里面可以处理请求和相应。

cookie和session:这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。

serveletconfig:
它是Servlet的配置参数对象,在Servlet规范中,允许为每个Servlet都提供一些初始化配置。所以,每个Servlet都一个自己的ServletConfig。它的作用是在Servlet初始化期间,把一些配置信息传递给Servlet。

serveletcontext
ServletContext对象,它是应用上下文对象。每一个应用有且只有一个ServletContext对象。它可以实现让应用中所有Servlet间的数据共享。

请求和响应

响应,它表示了服务器端收到请求,同时也已经处理完成,把处理的结果告知用户。简单来说,指的就是服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。

响应对象,顾名思义就是用于在JavaWeb工程中实现上述功能的对象。
响应是类,实现接口。响应是服务器收到请求,(把数据进行处理然后发送到浏览器的过程,不一定,也可能是别的处理形式)。有很多方法,需要(可以由)用户编写

请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问。在B/S架构中,就是客户浏览器向服务器发出询问。在我们的JavaEE工程中,客户浏览器发出询问,要遵循HTTP协议所规定的。

请求对象,就是在JavaEE工程中,用于发送请求的对象。我们常用的对象就是ServletRequest和HttpServletRequest,它们的区别就是是否和HTTP协议有关。

jsp

类别 适用场景
HTML 只能开发静态资源,不能包含java代码,无法添加动态数据。
Servlet 写java代码,可以输出页面内容,但是很不方便,开发效率极低。
JSP 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。
域对象名称 范围 级别 备注
PageContext 页面范围 最小,只能在当前页面用 因范围太小,开发中用的很少
ServletRequest 请求范围 一次请求或当期请求转发用 当请求转发之后,再次转发时请求域丢失
HttpSession 会话范围 多次请求数据共享时使用 多次请求共享数据,但不同的客户端不能共享
ServletContext 应用范围 最大,整个应用都可以使用 尽量少用,如果对数据有修改需要做同步处理

EL表达式
全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

filter:
它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。

常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。

方法/类型 Servlet Filter 备注
初始化 方法 void init(ServletConfig); void init(FilterConfig); 几乎一样,都是在web.xml中配置参数,用该对象的方法可以获取到。
提供服务方法 void service(request,response); void dofilter(request,response,FilterChain); Filter比Servlet多了一个FilterChain,它不仅能完成Servlet的功能,而且还可以决定程序是否能继续执行。所以过滤器比Servlet更为强大。 在Struts2中,核心控制器就是一个过滤器。
销毁方法 void destroy(); void destroy();

监听器:
在介绍监听器之前,先跟同学们普及一个知识,观察者设计模式。因为所有的监听器都是观察者设计模式的体现。

那什么是观察者设计模式呢?

它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时,触发事件。

观察者模式通常由以下三部分组成:

​事件源:触发事件的对象。

​事件:触发的动作,里面封装了事件源。

​监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。(此处的思想还涉及了一个涉及模式,我们在JDBC的第二天课程中就给同学们讲解,策略模式)

MySql

存储引擎:

特性 MyISAM InnoDB MEMORY
存储限制 有(平台对文件系统大小的限制) 64TB 有(平台的内存限制)
事务安全 不支持 支持 不支持
锁机制 表锁 表锁/行锁 表锁
B+Tree索引 支持 支持 支持
哈希索引 不支持 不支持 支持
全文索引 支持 支持 不支持
集群索引 不支持 支持 不支持
数据索引 不支持 支持 支持
数据缓存 不支持 支持 N/A
索引缓存 支持 支持 N/A
数据可压缩 支持 不支持 不支持
空间使用 N/A
内存使用 中等
批量插入速度
外键 不支持 支持 不支持

索引:

  • 我们之前学习过集合,其中的ArrayList集合的特点之一就是有索引。那么有索引会带来哪些好处呢?
  • 没错,查询数据快!我们可以通过索引来快速查找到想要的数据。那么对于我们的MySQL数据库中的索引功能也是类似的!
  • MySQL数据库中的索引:是帮助MySQL高效获取数据的一种数据结构!所以,索引的本质就是数据结构。
  • 在表数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
  • 一张数据表,用于保存数据。 一个索引配置文件,用于保存索引,每个索引都去指向了某一个数据(表格演示)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uiYb0IOF-1653120570593)(MySQL高级-04-授课笔记.assets/04.png)]

js

js是用来增强用户和html页面交互行为的,让页面有一定动态效果的脚本语言。
语法跟常见的编程语言差不多,循环判断之类的,可以写方法,可以有类与对象,继承。
跟css一样,也可以根据html元素的属性绑定html元素(称之为js的事件,当执行了某些操作时,会触发某些代码的执行),可以对html增删改。

事件:eg:鼠标单击,鼠标双击,触发焦点。当触发事件时可以编程实现一定的逻辑。怎么实现呢?使用文档对象模型对html进行增删改。

DOM对象:文档对象模型
执行对html增删改查的操作。
可以通过属性获取html元素,对元素进行增删改。也可以操作html元素的属性,操作html的文本。

jquery:
是Javascript库:封装了Javascript的函数,简化javascript编程,也有事件。
jquery也有选择器,和js效果类似但更简单。

AJAX

异步的js和xml,是用于快速创建动态网页的技术。
而 AJAX 通过浏览器与服务器进行少量数据交换,就可以使网页实现异步更新。也就是在不重新加载整个页 面的情况下,对网页的部分内容进行局部更新。
js和jquery都可以实现ajax。

Vue

用来构建用户界面的前端框架,方便与其他库进行整合。
个人理解还是操作html的一套范式,查资料得到是一套js框架
Vue程序包含视图和脚本两个核心部分:

脚本:Vue核心对象
el:接收获取的元素。
data:保存数据。
methods:定义方法。

视图部分:
数据绑定:{{变量名}}

Mybatis

mybatis是简化jdbc的操作,通过配置映射文件的方式。

spring

spring是解决方案框架



用于控制bean对象是否是单例
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例

资源由spring控制。在配置文件里创建资源,资源为实现类
资源是什么?数据?似乎是代码的实现,类接口等。
spring怎么空值?配置文件?
加载应用程序,加载配置文件获取资源
我理解的获取资源的一种形式就是获取类的参数构造对象,就是把运行程序所需的数据注入到程序里面

对bean的理解?

java前后端技术栈相关推荐

  1. Java后端技术栈,到底如何深入学习?

    Java,是现阶段中国互联网公司中,覆盖度最广的研发语言.有不少朋友问,如何深入学习Java后端技术栈,今天分享一个,互联网牛人整理出来的Java深入学习路线图,以及免费学习资料. 一.阅读源码 深入 ...

  2. 讲解开源项目:一步步跑起来个 Java 前后端分离的人力资源管理系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行项目,本示例是在 Windows 操作系统下演示. 本文作者:HelloGitHub-秦人 大家好!这里是 HelloGitHub 推出 ...

  3. 棋牌游戏前后端技术介绍

    1前端技术介绍 Cocos2d Cocos2d-x+lua 版本稳定,技术相对成熟,可以ios  adroid  pc三端打包,支持热更新,相关技术人员多,相对比较好招人. Cocos Creator ...

  4. 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...

  5. 作为技术负责人,如何从0搭建公司后端技术栈

    前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 图文编辑:xj.来源:网络 如何您是一名创业公司的负责人,如何从0搭建公司的后端技术栈.今天要说的后台是大后台的概念,放在服务器上的东西都 ...

  6. 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  7. 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...

  8. 计算机毕业设计Java前后端分离Erp系统(源代码+数据库+系统+lw文档)

    计算机毕业设计Java前后端分离Erp系统(源代码+数据库+系统+lw文档) 计算机毕业设计Java前后端分离Erp系统(源代码+数据库+系统+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 计算机毕业设计JAVA前后端分离在线作业系统mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA前后端分离在线作业系统mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA前后端分离在线作业系统mybatis+源码+调试部署+系统+数据库+lw 本源码技 ...

最新文章

  1. 3.12 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
  2. mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
  3. sonarqube扫描安卓代码
  4. Handler处理器 和 自定义Opener
  5. 『HTML5挑战经典』是英雄就下100层-开源讲座(一)从天而降的英雄
  6. CLR via C# ver4.0 读书笔记
  7. 最简单的List集合排序方法
  8. 防止页面高度不足,引起的底部上浮问题
  9. 图像数字水印技术研究及matlab实现,基于MATLAB的数字水印技术研究
  10. Bugzilla使用
  11. 六、Python函数
  12. 红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要
  13. 教你低成本获取用户:利用数据精细化运营(附手绘图)
  14. JavaWeb登陆成功后跳转到上一个页面
  15. vivo 推送平台架构演进
  16. Directory Opus Pro v12.29.8272 文件管理资源管理器工具专业版
  17. android 寺库trytry_人民日报中秋福利 寺库trytry红包刷爆朋友圈背后的秘密
  18. 10_JavaScript数据结构与算法(十)哈希表
  19. 第十六周 项目1 验证算法 堆排序
  20. Burpsuite专题学习指南

热门文章

  1. 【C语言】汉诺塔问题(图文详解)
  2. 《C语言程序设计》江宝钏主编-习题1-4-圆柱体
  3. tableau -- 月销售额年同比增长
  4. 直播预告 | 哈工大HIT-SCIR实验室专场二
  5. python生成中文词云图
  6. csp字符画c语言,CCF-CSP:201909-3字符画
  7. 堆排序基础讲解(代码+注释)
  8. Linux远方拷贝文件指令,windows与linux系统互相拷贝文件借助PSCP命令实现
  9. easywechat6获取微信用户信息(基于公众号)
  10. GDR(Gradual Decoding Refresh, GradualDecoder Refresh)