02.商品分类选择-分析-前端js_
03.商品分类选择-分析-数据库_
(JJTree渲染过程解析(parent_id为0就是父节点,is_parent为1说明下面有子节点,state1正常2删除。tree组件有ztree,异步控件树每个节点都有id,展开节点向服务端发送请求,请求检索子节点列表,参数当前节点的id,服务端响应json数据,)&)
04.商品分类选择-Service_
05.商品分类选型实现_
(使用@RequestParam获取参数(@RequestParam(name=”id”,defaultValue=”0” )第一次请求不带参数,给一个默认值确保肯定有值)&)
06.图片上传分析及图片服务器配置_
(Socket选项 HTTP服务器(开启虚拟机,选择已移动该虚拟机保留原来网路配置不发生变化,复制重新生成网卡原来配置不生效,如果要使用虚拟机通过设置为NAT模式,并设置子网网段)&高可用的分布式文件系统构建(只有一个工程把图片放在工程目录下,在1000并发的时候到达tomcat集群,通过Nginx转发每一个tomcat部署一个应用程序,通过轮询把请求平均分给不同服务器,为了能够保证在不同服务器都能找到目标图片需要专门有一个分布式文件服务器FastDFS(软件分布式文件系统,允许横向扩容与负载均衡保证高性能与高可用)负责图片存放与http图片访问(http服务器可以使tomcat或者是nginx(用于访问静态资源性能较好)))&Nginx 安装及负载均衡配置&)
07.FastDFS上传图片测试_
(跟踪服务器配置(fastDFS没法从中央仓库获取,通过maven工程导入,)&存储节点配置(创建一个资源文件client.conf 配置fastDFS中央仓库服务器地址,后缀与源数据详情)&上传文件测试&)
08.FastDFSClient的使用_
(加载资源文件中的图片(this.getClass.getResource(“/”).getPath()取完还是绝对路径,使用全路径复制会有隐藏字符需要去除格式即可。不以’/'开头时,默认是从此类所在的包下取资源,以’/'开头时,则是从ClassPath根下获取。)&)
package testpackage;
public class TestMain {public static void main(String[] args) {System.out.println(TestMain.class.getResource(""));System.out.println(TestMain.class.getResource("/"));}
}
file:/E:/workspace/Test/bin/testpackage/
file:/E:/workspace/Test/bin/
上面说到的【path以’/'开头时,则是从ClassPath根下获取;】在这里就是相当于bin目录(Eclipse环境下)。
如果我们想在TestMain.java中分别取到1~3.properties文件,该怎么写路径呢?代码如下:
package testpackage;public class TestMain {public static void main(String[] args) {// 当前类(class)所在的包目录System.out.println(TestMain.class.getResource(""));// class path根目录System.out.println(TestMain.class.getResource("/"));// TestMain.class在
}
※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。
Class.getClassLoader().getResource(String path)
path不能以’/'开头时;
path是从ClassPath根下获取;
还是先看一下下面这段代码的输出:
package testpackage;
public class TestMain {public static void main(String[] args) {TestMain t = new TestMain();System.out.println(t.getClass());System.out.println(t.getClass().getClassLoader());System.out.println(t.getClass().getClassLoader().getResource(""));System.out.println(t.getClass().getClassLoader().getResource("/"));//null}
}
输出结果:
class testpackage.TestMain
sun.misc.Launcher$AppClassLoader@1fb8ee3
file:/E:/workspace/Test/bin/
null
从结果来看【TestMain.class.getResource("/") == t.getClass().getClassLoader().getResource("")】
如果有同样的Project结构
使用Class.getClassLoader().getResource(String path)可以这么写:
package testpackage;public class TestMain {public static void main(String[] args) {TestMain t = new TestMain();System.out.println(t.getClass().getClassLoader().getResource(""));System.out.println(t.getClass().getClassLoader().getResource("1.properties"));System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties"));System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties"));}
}
※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。
09.图片上传功能分析_
10.图片上传功能实现_
(多文件上传1:使用MultipartHttpServletRequest(springMVC需要把commonsi-fileupload两个jar包加到项目中,前端控制器需要配置多媒体解析器MultipartResolver设置默认编码与最大文件大小,通过MultipartFile接收参数,通过@Value加载配置文件的资源,通过Map返回json数据)&单文件上传3:使用MultipartFile结合实体类&通过IOC容器注入Properties类型&placeholder属性&)
11.上传图片功能测试_
12.解决上传图片浏览器兼容性问题_
(使用jackson在服务端将JSON字符串转换成各种Java数据类型(SpringMvc会把对象转为字符串响应浏览器,直接把Map转为json返回String即可)&)
13.富文本编辑器的使用_
(富文本UEditor(富文本编辑器有UEditor、KindEditor、CKEditor都是纯js开发的)&)
14.商品添加功能分析_
15.商品添加-service_
16.商品添加-完成_
02.工程搭建分析_
03.前台系统工程搭建_
(使用URL Rewrite实现网站伪静态(在web.xml中 url-pattern拦截所有*.html 请求网页伪静态,所有url后缀全部改为html,@RequestMapping(“/index”) 通过index.html进行访问。只访问localhost:8080会默认找welcome-file欢迎页index.html 带html后缀去controller匹配)&)
04.首页展示_
05.首页内容管理-数据库分析_
06.内容服务工程搭建_
07.内容分类查询-service_
08.内容分类列表展示_
(@RequestParam注解(与参数名对不上号,使用@RequestParam(“id” ,defaultValue=””)Integer parentId。使用脚本启动服务Maven build clean tomcat7:run )&)
09.内容分类添加-js分析_
10.内容分类添加-mapper_
11.内容分类添加-service_
12.内容分类添加-完成_
13.内容分类修改、删除-作业_
14.内容添加-功能分析_
15.内容添加-service_
16.内容添加-完成_
17.内容编辑、删除_
01.课程计划
(Redis缓存穿透和雪崩(首页并发量最高,每次都查询数据库压力比较大,通过缓存读取内存数据减轻数据库压力,Reids可以把内容持久化到磁盘数据不会丢,内容不会丢失否则瞬时请求会造成数据库雪崩,Redis缓存同步问题)&)
02.首页大广告位实现分析_
04.首页大广告位实现-表现层_
05.首页大广告-测试_
06.redis的安装及启动_
(gcc的简易用法(编译、参数与连接)(编译环境对c语言编译后为可二进制可执行文件,需要按照gcc编译环境,yum install gcc-c++)&用make进行宏编译&makefile的基本语法与变量&RPM安装(install)&Redis安装和配置(rm -rf * 删除所有安装包 ,rm -rf /user/local/redis* )&Redis客户端命令(tar zxf redis-3.0.0.tar.gz 进行解压缩,C语言编译必须有Makefile文件夹,直接使用make命令编译,编译后进行通过make install进行安装 make install PREFIX=/usr/local/redis到指定目录,进入安装目录的bin文件夹,通过./redis-server启动前端启动模式占用一个终端,通过配置文件cp ~/redis-3.0.0/redis.conf 复制到当前文件夹下,进行后端启动不占端口号,修改daemonize yes即可,通过./redis-server redis.conf 后端启动,通过ps aux|grep redis查看进程判断是否启动。 ./redis-cli默认连接6379端口,客户端通过ping pang检测服务器健康状态,连接其他redis服务 ./redis-cli -h 192.168 -p 6379)&Redis基础配置文件&)
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。它类似于ftp, 但是它提供一种更为安全的网络的加密方法。
如何进行远程连接,进行文件的上传和下载。
在命令行模式下,输入:
sftp 用户名@ip地址 eg: sftp lzy@202.206.64.33
sftp>
如果登陆远程机器不是为了上传下载文件,而是要修改远程主机上的某些文件。可以
ssh lzy@202.206.64.33 (其实sftp就是ssh 的一个程式。)
sftp> get /var/index.php /home/libai/
这条语句将从远程主机的 /var目录下将 index.php 下载到本地 /home/libai/目录下。
sftp> put /home/libai/downloads/linuxgl.pdf /var/
这条语句将把本地 /home/libai/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var 目录下。
要查看远端机器的一些信息,可以直接使用平时的linux命令
比如:pwd 远端机器的当前路径 cd 改变远端机器的路径 ,ls, rm, mkdir,rmdir 都可以用
要查看本机的一些信息,要在平时的linux命令上,加上l
比如:lpwd 本机当前工作目录 lcd 改变本机的路径, lls ,lrm,lmkdir,lrmdir
要离开sftp,用exit 或quit、 bye 均可。详细情况可以查阅 man sftp.
如果觉得在命令行模式下不太方便,可以 sudo apt-get install gftp。在图形界面下操作就简便多了。
07.redis常用命令复_
(Redis数据结构常用命令(Redis一共提供5种数据类型,String普通key-value Hash一个key对应一个hash集,LIST集合 set集合 zset有序集合。String数据类型 set添加一个值 set str1 12345 get str1 incr str1自增,decr减1,Hash命令hset添加一个key hset hash1 field1 abc hget hash1 field1,ttl str1查看key的有效期-1永久保存,ttl str2 -2key不存在,正数正在倒计时,expire str1 100设置过期时间为100秒,key *查看数据库有多少key)&Redis数据结构——哈希&Redis数据结构——链表(linked-list)&Redis数据结构——集合&Redis数据结构——有序集合&INCRBY、DECRBY:对整数值执行加法操作和减法操作& HSET:为字段设置值&)
08.Jedis的使用方法_
(使用Jedis客户端操作Redis(Java客户端通过Jedis,每次创建都有一个连接耗费资源,通过redis连接池JedisPool 节约资源,jedis.getResource()获取jedis来操作数据库)&)
09.redis的使用方法_
(单线程与多线程客户端(持久化RDB和AOF默认开启RDB快照(当前时刻数据)定期操作磁盘,AOF保存对数据库操作的命令频繁操作磁盘性能下降,数据完整性高一点,可以同时开启。Redis有可能丢数据,Mysql或者Oracle关系型数据库不会丢数据,Redis不适合保存大数据适合存储小数据(单线程的顺次处理单个命令尽快完成,通过集群横向扩容),基于Hadoop的Hbase还有MongoDB支持存储海量数据)&)
10.redis集群架构讲解_
(使用Redis集群实现数据水平化存储(Redis集群没有统一的入口,可以连接任何客户端进入集群,集群内部客户端可以相互通讯,检测检点的监控状态通过投票容错实现,redis集群有0-16383个slot为了均匀分布key到不同服务器,每个节点分配一定数量的槽,一般集群分布在3个节点上,每个集群主从同步槽挂了包装高可用,需要6台服务器(一台服务器运行在不同端口6个实例,搭建集群要把dump.rdb快照文件删除,修改redis.conf改变端口号,/cluster-enabled yes集群节点。通过批处理批量执行启动命令 vim start-all.sh cd redis01 ./redis-server redis.conf) cd.. 通过chmod +x start-all.sh增加可执行权限,TCC最大权限 ,./start-all.sh执行)&对文章进行投票&Redis集群容错&Redis集群中的主从复制&Redis主从复制模式&)
11.redis集群搭建01_
(Redis主从架构的缺点&Redis哨兵模式& Redis集群架构& Redis集群环境搭建&mongodump 和mongorestore&批处理和任务&权限设置&)
12.redis集群搭建02_
(RPM、SRPM与YUM&)
13.使用redis-cli连接集群_
14.使用JedisCluster连接集群_
(使用Jedis客户端操作Redis(Java通过JedisCluster连接到集群,自带连接池,构造参数是set类型集合每个元素是HostAndPort类型)&)
15.JedisClient连接单机版_
(使用Annotation注解法创建对象(
16.jedisClient连接集群_
17.向业务逻辑中添加缓存_
18.添加缓存测试_
19.缓存同步处理_
(消息发送和同步接收&HDEL:删除字段&)
day06
01.课程计划_
02.solr服务搭建_
(catalina.sh脚本&Redis基础配置文件&Tomcat启动&复制、删除与移动:cp、rm、mv &配置web.xml文件&)
03.业务域的定义_
(中文分词安装&IK分词器安装&内部类——InnerClasses属性 &基于XML Schema的简化配置方式&使用th:field属性&语言区域&使用服务提供业务逻辑&)
04.业务数据sql语句编写_
05.搜索工程搭建_
(覆盖起步依赖引入的传递依赖&)
06.导入商品数据到索引库-dao_
07.solrj实现索引库维护_
(在Sping Boot中集成Solr,实现数据的增、删、改和查&)
08.导入商品数据-Service_
( constructor方法&)
09.导入商品数据-jsp_
10.商品数据导入成功_
11.首页跳转到搜索页面_
12.商品实现分析_
13.使用solrJ查询索引库_
(Solr——搜索应用服务器&)
14.搜索服务-dao实现_
day07
01.课程计划_
02.商品搜索功能-Service_
03.商品搜索功能-Controller_
04.搜索功能测试_
05.什么是SolrCloud_
06.solr集群架构讲解_
(并发&分片简介&)
07.zookeeper集群讲解_
08.zookeeper集群搭建_
(配置ZooKeeper集群&Data Server简介&修改文件时间或创建新文件:touch&变量的使用与设置:echo、变量设置规则、unset &vim的额外功能&)
09.solr集群的配置_
10.SolrCloud中管理Collection_
11.闲扯_
12.使用SolrJ管理SolrCloud_
13.搜索功能切换到集群_
14.全局异常处理器的应用_
day08
01.课程计划_
02.同步索引库功能分析_
03.什么是ActiveMQ_
04.activemq的安装_
(vim的额外功能&)
05.Activemq发送queue消息_
(Topic 和 Queue&)
06.接收queue消息_
07.发送topic消息_
08.接收topic消息_
09.spring整合Activemq_
(使用JmsTemplate 发送&)
10.使用JMSTemplate发送消息_
11.Activemq整合Spring接收消息_
12.添加商品同步索引库-发送消息_
13.添加商品同步索引库-mapper_
14.添加商品同步索引库-MessageListener_
15.添加商品同步索引库-测试_
16.小结_
day09
01.课程计划_
02.商品详情页面工程搭建_
03.商品详情页面展示分析_
04.商品详情页面展示-代码实现_
05.商品详情页面展示-测试_
06.商品详情页面添加缓存分析_
07.redis添加缓存的使用方法_
08.向业务逻辑中添加缓存_
09.添加缓存测试_
10.freemarker的使用方法_
11.freemarker语法-取pojo的属性_
12.freemarker语法-list_
13.freemarker语法-if_
14.freemarker语法-日期类型处理_
15freemarker语法-null值的处理_
16.freemarker语法-include_
17.freemarker整合Spring_
18.网页静态化方案分析_
19.网页静态化-freemarker模板改造_
20.网页静态化-业务逻辑_
21.网页静态化-测试_
day10
01.课程计划_
(构建HTTP服务器&)
02.什么是nginx_
03.nginx的应用场景_
04.nginx的安装及启动_
( v-pre&)
05.nginx的配置文件介绍_
06.通过端口区分虚拟主机_
(shift&使用fetchType属性设置局部加载策略&ngx_http_upstream_t结构体&)
07.什么是域名及hosts文件的作用_
08.通过域名区分虚拟主机_
09.使用nginx配置反向代理_
(proxy_pass请求代理规则&)
10.使用nginx实现负载均衡_
11.nginx小结_
12.keepalived+nginx实现高可用_
13.lvs实现高并发处理_
14.sso系统分析_
15.sso工程搭建_
16.sso系统接口分析_
day11_单点登录&js跨域
01.课程计划_
02.检查数据是否可用-接口分析_
03.检查数据是否可用-Service_
04.检查数据是否可用-Controller_
05.用户注册-Service_
06.用户注册-表现层_
07.用户登录流程分析_
08.用户登录-Service_
(使用Redis保存token令牌&全局唯一标识符UUID&)
09.用户登录表现层_
10.用户登录测试_
11.根据token查询用户信息-Service_
(使用Redis保存token令牌&)
12.根据token查询用户信息-表现层层_
13.安全退出-作业_
14.登录、注册页面展示_
15.用户注册页面实现_
16.用户登页面实现_
17.js跨域分析_
(跨域AJAX&)
(活用模板方法模式及Callback&callback调用&JSONP&media query语法&)
19.jsonp服务端处理_
20.jsonp处理第二种方法_
day12
01.课程计划_
02.购物车实现分析_
03.购物车工程搭建_
04.商品详情页面加入购物车改造_
05.添加购物车功能分析_
06.添加购物车实现_
07.添加购物车测试_
08.展示购物车列表_
09.修改购物车商品数量_
10.修改购物车商品数量测试_
11.删除购物车商品_
12.购物车小结_
13.订单系统工程搭建_
14.订单确认页面展示_
15.登录拦截器实现分析_
(HandlerInterceptor接口&Handler实例&)
16.拦截器业务逻辑实现_
17.拦截器测试及登录成功回调_
(Interceptor&)
18.拦截器测试取用户信息_
19.订单生成-数据库分析_
20.订单生成-页面分析_
day13
01.课程计划_
02.订单提交-分析回顾_
03.生成订单业务逻辑_
04.订单生成表现层_
05.订单生成-测试_
06.系统架构讲解_
07.系统部署规划_
(安装RPM包&)
08.tomcat热部署_
09.系统部署演示_
10.项目总结01_
11.项目总结02_
12.面试中的问题_
部分代码
taotao-portal-web
pom.xml
war / 8082
web.xml
encoding utf-8 contextConfigLocation classpath:spring/springmvc.xml
index.jsp
<%@ page language="java" cOntentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>家电通讯
大家电
大家电 New
小家电
手机通讯
汽车五金
品牌旗舰店