前言
这篇博客就是简单总结下完成项目过程中遇到的问题和学到的东西。
技术选型
web层
- 前端控制
- Servlet:前端控制器
- ajax:发送异步请求
- html :视图
- Filter:过滤器
- BeanUtils:数据封装
- Jackson:json序列化工具
service层
- javamail:java发送邮件工具
- Redis:nosql内存数据库
- Jedis:java的redis客户端
DAO层
- Mysql:数据库
- Druid:数据库连接池
- JdbcTemplate:jdbc的工具
关于maven
-
maven的作用:maven能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点。
-
maven的优势:使用maven给我最直观的便利就是找jar包很方便,再也不用自己手动去网上下载jar了。还有一个大的便利就是maven的一键构建的功能,编译打包部署一气呵成。这是maven的两个最大的优势。
-
maven的配置:
第一步我们安装好maven后需要配置下环境变量
第二步我们找到maven安装目录下的conf文件下的setting.xml文件,打开文件找到/path/to/local/repo标签,(记得要去掉注释)将标签中的地址换成我们的本地仓库(本地仓库的话可以自己网上找)就可以了。为什么要配置本地仓库呢?如果没有配置本地仓库maven会去中央仓库联网下载jar包(如果有远程仓库的话会先去远程仓库下载),而maven中央仓库是在国外的可想而知比较慢,当然你也可以配置下中央仓库国内的镜像,配置了本地仓库如果本地仓库有的话就直接从本地就不需要联网下载了。如果想要搞一些个性化的配置我们可以到用户目录下的setting.xml文件中配置。
我对maven的理解:
我觉得maven就像一个管家,就比如说我们平常一个人做饭,首先要做菜我们得先有菜吧,所以我们得先去买菜,要买肉去肉铺买,买蔬菜去卖蔬菜的地方买,买调料去商店买,好不买好菜了,于是我们回家做饭,做完饭不经感慨做饭真是不容易,买菜走得腿都要缺了,这时候我们想要是有管家能帮我们买菜就好了,这样我们就有更多的时间来专心于做饭了。写代码就像做饭,而maven就是那个管家,他帮我们解决了“买菜”的过程,我们只要告诉他我们需要什么“菜”什么“调料”,他就能帮我们准备好,我们只管专心“做饭”了。
遇到的问题以及解决办法
-
在写注册激活模块的时,使用javaMail发送邮件,输入了正确的邮箱和密码,但是不能发送邮件,后来了解到要通过第三方平台发送邮件的话需要授权码,申请授权码后,将用户名和授权码传给javaMai就能发送邮件了。
-
退出功能是利用超链接发送一个请求给后端,然后后端销毁session,重定向到登陆页面。在这里遇到的问题是请求发不出去,后来发现是我前台的请求路径写得不对,给浏览器的路径是绝对路径但是没有写虚拟路径的名称,所以导致了请求发送部出去。修改路径后问题解决。
-
我们每写一个功能都要写一个servlet,这样servlet会很多,于是做了下优化,创建一个baseservlet继承自httpservlet,重写里面的service方法,在这里通过反射完成方法的调用,我们再写一个userservlet继承自baseservlet,添加我们实现相关功能的方法就可以了,这样有关用户的功能只需要一个servlet就可以实现了。当时不是很理解这种做法,和它实现的原理,最后通过查看httpservlet源码理解了,继承方式如下:
-
分类的数据在每一次页面加载后都会重新请求数据库来加载,对数据库的压力比较大,而且分类的数据不会经常产生变化,所有可以使用redis来缓存这个数据。第一次访问时我们先从缓存中查,但是这时候缓存里面肯定是没有数据的,我们得先从数据库查询,查询出来返回一个分类对象的list,然后在将查询出来的list存到缓存中去,第二次我们就能够直接从缓存中取出数据了,但是后面发现我们从缓存中取出来的数据没有cid,而且每次查询出来的数据顺序都是不一样的。检查发现在向缓存中存数据的时候我们用的是set集合,而这个集合是无序的当然查出来的顺序是乱的。最后使用zset解决了以上问题。
-
在做组合条件查询的时候遇到了如何获取查询请求参数的问题,最后是给搜索按钮绑定了一个单击事件,当点击按钮时从搜索框获取搜索关键字,将关键字作为参数放到地址栏传递给路线列表页面,当页面完成加载时,从地址栏获取参数发送请求,由于从地址栏获取的中文的参数时用了uri编码的,所以记得先解码再传递参数到后端。
-
。。。
总结
以上就是这次项目中遇到一些主要问题,还有一些问题忘记了,把记得的做一个简单的记录。只有不断发现问题解决问题技术才能长进。