【Java EE】从零开始写项目【总结】
从零开发项目概述
最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等...
被虐得不要不要的,即使是非常简单有时候绕半天,想不明白。
本来这篇博文是想留到我最后Java基础复习完再写出来的,鉴于公众号有的同学想看看邮箱登陆的案例,想看看Java开发后台是怎么的,于是我就提前写了这篇博文
这个项目是我自己手写的第一个SSM项目(毕竟学了当然得搞点事情,对吧),是上年写的小东西。当然了,现在回过头去看这个项目是有很多的不足的,仅供参考。用的也不是新技术,只是把我之前当时所学的一些东西做一个总结...如果想学新知识的同学看到这里就可以留步啦~
所以说,你可能会看到比较旧的技术,写得不好的地方都会有~如果是写过项目的同学而言,这个仅仅是一个Demo。对于没写过项目的同学可以适当的参考一下,因为用的是非常简单的技术,都是耳熟能详的技术,不会有什么难懂的地方~
PS:希望各位大佬不要攻击它,我没有做任何的安全措施。即使留了评论的功能,XSS攻击防范也没做,请手下留情啊~
地址:
编写记录:
一、功能介绍
巴巴拉拉地说了一大堆东西,我们来看一下这个项目有什么功能~
这是首页,会根据当地给出三天的天气预报:
很简单的注册页面,通过邮箱来进行注册~
2018年3月30日15:51:23,好吧,写这篇博文的时候也出错了.....
org.springframework.mail.MailAuthenticationException: Authentication failed
我怀疑是授权发送邮箱的密码错了(过时),于是我去更新了一下,果然就行了~
此时点击注册,就会要邮箱校验了~
去自己的邮箱查看一下邮件:
点击校验它即可完成注册(如果不校验的话,那么是不允许登陆的):
该项目用Shiro做了权限认证的,如果没在登陆的状态下点击以下的菜单都会跳转到登陆页面~:
网站说明:
这个网站的功能并不复杂,开发的功能都是为了方便使用而已。
- 一、个人收藏夹:将常用的网站添加进去,值得注意的地方就是:url(网址)最好是从浏览器复制下来,这是最方便也是最安全的做法
- 二、个人备忘录:添加个人备忘录,设置好时间、在邮件发送出去之前都能够修改时间
发送邮件好像会有点延迟~~~~
接下来是个人收藏夹了,添加一些常用的网址进去,并给它命名,当输入命名部分的字符时,即会提示:
用键盘上下键选中按回车即可跳转到对应的页面了~
二、技术介绍
网站用到的技术:
- 一、全站页面布局:前端是使用Bootstrap来进行布局的、背景是使用了GitHub的一个开源项目:particles-js。导航条来源于一个国外网站:http://toolofna.com/
- 二、首页:天气预报功能来源于高德地图API和和风天气API组合而成,能够查看当前IP地址所在地的近三日天气
- 三、个人收藏夹:使用了Elasticsearch全文搜索引擎工具。
- 四、在线聊天:使用了GoEasy的服务推送和jquery.barrager.js构建弹幕。目前该功能并未完善,敬请期待。
- 五、注册和登陆:使用了BootstrapValidation进行表单校验、JavaMail发送邮件的功能、Gif动态验证码
- 六、个人备忘录:使用了Quartz任务调度工具来定时发送邮件
总概要:
- 1. Maven构建项目
- 2. 使用Mysql数据库
- 3. Tomcat作用应用服务器
- 4. Dao层采用Mybatis,Controller层采用SpringMVC,Spring对Mybatis和SpringMVC进行整合和事务管理
- 5. Shiro权限管理框架控制登陆以及对个人收藏夹、在线聊天功能进行认证的管理
- 6. 使用FreeMarker来渲染页面和配置发送邮箱的模版
- 7. 使用Quartz和Spring整合,完成个人备忘录的功能。
- 8. 使用Nginx作为代理服务器,对静态资源处理,代理转发
可以看到的是,网站的功能并不多,就几个小模块,我就创建了三张表而已:
三、谈谈编写过程
其实所有的初学者都一样:怎么使用Java编写一个网站?数据库设计感觉好难,设计错了就很麻烦了。Web前端好烦啊,自己写的页面不好看。这个功能感觉好难实现哦,应该是挺高深的技术吧。我的基础还不够扎实,等我学好了再写吧,等等等..就一直有想写网站的念头,但一直没开始动手。
上面的问题我都有想过,不过我还是写了这么一个小东西....
当时写的练手项目都是视频教程给出的题目,比如我之前发过的:移动商城项目总结和纳税服务系统总结,jar包或者maven的坐标都是有给出来的,项目的前台页面和数据库标也大都是设计好的,我只需要补补填填写Java代码。而这一次,前端页面,数据库设计,Maven坐标等等全由自己包办
从开始到编写结束大概花了我一个月的时间,期间要去上课呀,回家呀,一些琐事呀等等才拖了那么久。如果自己从来没写过项目的同学建议自己折腾一下搞一个,期间能学到很多很多东西的。也不要怕自己写得不好(只要像我一样不要脸,不也将这么一个小东西发到公众号上来,发到其他的博客平台了么)
那么我自己折腾这么一个小玩意能学到什么了呢?
3.1搭建环境收获
- 在搭建环境的时候,不要觉得最新的版本就是牛逼,我要用最新的,不做过时的男人!我当时就是撘环境是用Spring5.0,Mysql驱动包6.x,jdk1.8,能用最新就用最新的,觉得自己贼牛逼。然后撘完项目就启不动了~~~
- 其实没必要用最新的,最新的一般都会有bug,没bug的也不一定兼容其他的版本。要知道,Spring可不单单有Spring的东西,还依赖很多其他的jar包的。同样Mysql用最新的驱动包,逆向工程时也不好使(我在SegementFault已经见过几次跟我一样遇到的坑)
- 一般最新的东西资料都挺少的,除了官方文档,出了什么问题都只能自己解决了。较老的版本就不一样了,很多人都会遇到的问题,解决方案也会相当多~
当时我在图书馆撘了一个晚上,得出的教训:
3.2登陆与注册收获
登陆与注册这个功能只要学过JavaWeb基础的同学,肯定做过。反正我是做了很多很多次的了,学Servlet做一次,学JSP做一次,学AJAX做一次,学xxx系统做一次,学XXX商城做一次。反正每次都会有新的东西补充上去
一开始我本来想做的是可以使用微信登陆,也可以使用账户(邮箱)登陆,也可以使用短信登陆的。
后来发现微信登陆要企业认证,做不了。短信登陆要钱,不想给。
所以最后就只有用邮箱登陆了~~~当然了,该有的基本功能是有的:
- 加密密码
- 前台校验和后台校验参数
- 忘记密码,记住我功能
- 验证码
由于之前是简单学过Shiro的,当时觉得Shiro做权限很方便,于是自己也想体验一把~实际上用起来并没有我当时学的时候那么简单!
在Shiro这一块也耽误了不少时间,因为我当时想的是使用AJAX来提交,如果正确则跳转到首页,如果密码(参数..)等错误就返回JSON给用户一个友好的提示。可是,Shiro的表单认证起默认返回的是一个页面,在这里就卡住了挺久的(有的时候没bug,有的时候又有bug),百思不得其解...最后查阅了很多资料才将FormAuthenticationFilter改写好,Shiro很多东西都是要自己重写来进行控制的,当时理解后画的流程图:
Shiro的“记住我”功能本来以为是很好用的,实则也挺鸡肋的..当时我做的记录:
反正Shiro给我的感觉就是很多东西都要自己来重写,控制,而如果是小范围使用我觉得自己写url控制会方便。也可能是我的学习姿势不对~
在登陆注册模块期间也自己去找了不少资料。
- 数据库设计上也是参考了网上和自己做了些许修改
- JavaMail我之前是没接触过的
- BootStrapValidation也是看中了就用,
- 折腾Shiro几天就更不用说了。
所以说,未必要使用自己熟悉的东西,只要想实现一些普通、你见过的功能,总会有方案可以参考。
3.3个人收藏夹收获
这个自动补全功能是我一开始想要做自己网站的时候想做的。因为我习惯了使用键盘去找文件,去找东西。
比如,在windows下,我下了一个rolan,将常用的软件丢进去,输入一些关键字即提示我,然后我通过键盘上下选择就可以打开软件了,十分方便
在编写之前,我学过Lucene的相关知识,知道Lucene是全文搜索索引的始祖(没做过相关案例)【参考博文:Lucene就是这么简单】,后来知道Solr和Elasticsearch在企业上是用得挺火的,而Elasticsearch又是各种火热,各种吹(哈哈哈,无贬义,是挺好用的)。
于是我就花了几天从零开始学Elasticsearch,当时参考的博主给出的是2.3.3版本,我也觉得没什么,就使用了。那是最新是5.x~就有了后来的博文:【Elasticsearch就是这么简单】
Elasticsearch遇到很多的问题都得去翻英文的,所以可以访问外网也挺重要的~
我英语也不咋地,就慢慢看看,弄个Chrome插件翻译呗,事情总得解决,也就这么成长的~
3.4搭建Linux环境收获
在之前只会Linux一些非常简单的命令,ls cd vi
这些,用得少就忘记了,于是又得重新去回顾一下Linux(这个学期也开了Linux的课,我打算过一阵再总结Linux的常用命令和相关要点,敬请期待~)
花了点点钱买了台云服务器(学生有优惠就10块一个月),我也建议是在校的学生也可以买来自己玩玩,熟悉一下Linux命令,还有很多软件都在Linux下才更好地支持(例如:Elasticsearch,Nginx),尤其Elasticsearch在windows下装它简直麻烦!
到了Linux阶段,我也去学了下Nginx了。在没学Nginx时我就经常听说过这个HTTP服务器了,但一直不知道它是干嘛用的。它的最常见作用就两个:
- 处理静态资源
- 动态资源转发到Web服务器(Tomcat)
学学Nginx的配置文件相关知识,是如何配置的,配置有什么用~就可以使用了
3.5评论功能和备忘录收获
评论功能在数据库设计上也有好几种:
- 将回复和评论都统一当成是评论,能够使用@XXX来当做是回复,类似与IOS知乎的评论【此做法是最简单的】
- 将回复和评论分开,要么单表就多增加一个父属性,要么就分两张表【稍微复杂,一个评论可以对应多个回复】
- 实现评论与回复“盖楼”的方式,这种就是网易的评论【此种是最复杂的】
我做的只是一个留言的功能,就直接使用第一种了~
对于备忘录就得用到Quartz时间调度框架,之前接触过,但用的使用还是出现了Bug
- 在Junit测试Quartz没有反应
- Spring不能注入对象进Quartz的Job类中
如果业务简单的话,下次也想玩玩Spring自带的任务调度~
四、最后
上面简要地介绍了我的小项目的功能和编写过程,更详细的业务得去看我下面的博文和源码了~也希望大家能够有所收获,自己动手做一个小项目~
现在看来很多没有写成规范(返回JSON、JavaScript模块化)等等,但毕竟是自己学编程的成长经历,看回以前的代码总会有这种感觉。我短时间内也不做重构了,学Java基础去~
后面的博文几乎都是Java基础或算法(少量)了,希望大家多多支持哈,在校的日子我会尽量保持日更的~
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y
【Java EE】从零开始写项目【总结】的更多相关文章
- JAVA EE 第一阶段项目问题
一: 乱码 原因: 由于同组的其他同学的myeclipse默认的编码方式是GBK,而我的默认的是UTF-8.所以当我使用svn把其他同学提交到组长那里去的代码下载下来的时候,就全乱码了! 解决问题: ...
- 从面试官甄别项目经验的角度,说说如何在简历中写项目经验(java后端方向)
在大多的JD(职位介绍)里,会写明该职位需要xx时间的相关经验,换句话说就是需要在简历中看到一定年限的相关商业项目经验,否则估计连面试的机会都没. 在本文里,不讨论这种门槛是否合理,而会以Java相关 ...
- 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】
一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- Eclipse Tomcat 7.0 添加WEB项目报错:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
前言 我叫梅乾花,我误闯了“从零开始的程序世界”,遭受到了前所未有的的困难,为了活下去,为了看见美好的明天,我开始学习之旅. 问题篇我打开了"Eclipse",将项目导入其中,开启 ...
- MyEclipse的项目中把 java EE 5 Libraries 删掉后怎么重新导入
myeclipse中鼠标右击项目->properties->java Build Path=>Libraries=>Add Library...=>选择MyEclipse ...
- 【Java EE 学习 25 上】【网上图书商城项目实战】
一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理 ...
- 如何在tomcat中如何部署java EE项目
如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...
随机推荐
- HDU5779 Tower Defence
dp[i][j][k] 已选i个人 选到第j层 第j层有k个人 讨论相邻层 上一层选了l人 那么共有 两层之间的方案数 以及这一层自己的方案数 #include<bits/stdc++.h&g ...
- Luogu P1410 子序列
题目大意: 给定一个长度为\(N\)(\(N\)为偶数)的序列,] 问能否将其划分为两个长度为\(\frac{N}{2}\)的严格递增子序列, 输入一共有\(50\)组数据,每组数据保证\(N \le ...
- 【Luogu1272】重建道路(动态规划)
[Luogu1272]重建道路(动态规划) 题面 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲 ...
- [Luogu3768]简单的数学题
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\] \(n\le10^{10}\) sol \[ans=\sum_{d=1}^{n}d\sum_ ...
- [Luogu3377]【模板】左偏树(可并堆)
题面戳我 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数 ...
- data数据不一致的问题
经常会遇到that.data能打印出来(能访问到),而that.data.xxx不能打印(为空)的情况.特别是在调用了云方法,然后setData的时候,为什么会出现这样的情况不明. 解决方法,将需要用 ...
- chkconfig命令核心案列及核心原理
chkconfig sshd on 设置sshd开机自启动 chkconfig sshd off 设置sshd开机不启动 chkconfig --level 35 sshd on 设置ssh ...
- ssr 服务端安装教程
1 ShadowsocksR 多用户版服务端安装教程(SS-Panel后端) 2 ShadowsocksR 单用户版服务端安装教程
- ES2015 类 class 语法
在ES2015之前,定义类的方法只能通过原型链来模拟 function Animal(family,species) { this.family = family; this.species = sp ...
- kubernetes dashboard backend源码剖析
dashboard架构主要由一个API handler 和 五个manager构成: API handler用来处理来自客户的http请求,不同的path路由到不同的的handler处理,使用的是go ...