前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼...

Bootstrap or Vue?

先吐槽一句..写页面是真的不擅长,然后限于时间的问题,我开始考虑换用Bootstrap来完成页面的编写,因为时间有限(我得在实习完之前把所有页面开发完),学习Vue对于我来说还是存在一些学习成本的,虽然之前已经通过文档博客之类的学得七七八八(emm..三三四四吧...)的样子,但我还是想尽可能的写好...还是用自己熟悉的Bootstrap来完成吧...

前台页面分析

个人博客的前台页面相对比较简单,大概也就这么五个页面搞定,因为有了原型图,所以实现起来还是挺容易;

页面展示

首页

emm...还原度还算蛮高的啦...而且发现这一套模板对于题图的要求蛮高的...如果不好看或者图片本身太小就会变得奇怪以及模糊...目前还没有找到啥好的方法解决这个图片的问题,不过倒是找到一个有趣的css属性叫object-fit: cover;,超级方便的图片居中方法,之前找了很多JS都不是很满意,大家可以试试...

博客分类页

这个页面还有待商榷...因为后面可能会换成没有题图而是只是博文信息的版本...

博文页

Ps:突然很想吐槽一下自己写的文章都有点长..专门找了篇内容没那么多的,不然截图工具截不完页面...

保存在数据库中的是md源码,在前台请求的时候,我直接转成了html源码弄出来,然后CSS样式是自己找的,跟我的公众微信号是一个,大家需要的话存一下吧,感觉还是挺好看的:

p{font-size:15px; line-height:28px; color:#595959;font-family:微软雅黑}
pre, code{font-size:14px; font-family: Roboto, 'Courier New', Consolas, Inconsolata, Courier, monospace;}
code{margin:0 3px; padding:0 6px; white-space: pre-wrap; background-color:#F8F8F8; border-radius:2px; display: inline;}
pre{font-size:15px; line-height:20px;}
precode{white-space: pre; overflow:auto; border-radius:3px; padding:5px10px; display: block !important;}
strong, b{color:#BF360C;}
em, i{color:#009688;}
big{font-size:22px; color:#009688; font-weight: bold; vertical-align: middle; border-bottom:1px solid #eee;}
small{font-size:12px; line-height:22px;}
hr{border-bottom:0.05em dotted #eee; margin:10px auto;}
p{margin:15px 5px!important;}
table, pre, dl, blockquote, q, ul, ol{margin:10px 5px;}
ul, ol{padding-left:10px;}
li{margin:5px;}
lip{margin:5px 0!important;}
ulul, ulol, olul, olol{margin:0; padding-left:10px;}
olol, ulol{list-style-type: lower-roman;}
ululol, ulolol, olulol, ololol{list-style-type: lower-alpha;}
dl{padding:0;}
dldt{font-size:1em; font-weight: bold; font-style: italic;}
dldd{margin:0 0 10px; padding:0 10px;}
blockquote, q{border-left:3px solid #009688; padding:0 10px; color:#777; quotes: none;}
blockquote::before, blockquote::after, q::before, q::after{content: none;}
h1, h2, h3, h4, h5, h6{margin:20px 0 10px; padding:0; font-weight: bold; color:#009688;}
h1{font-size:24px;}
h2{font-size:22px;}
h3{font-size:18px;}
h4{font-size:18px;}
h5{font-size:16px;}
h6{font-size:16px; color:#777;}
table{padding:0; border-collapse: collapse; border-spacing:0; font-size:1em; font: inherit; border:0;}
tbody{margin:0; padding:0; border:0;}
tabletr{border:0; border-top:1px solid #CCC; background-color: white; margin:0; padding:0;}
tabletr:nth-child(2n){background-color:#F8F8F8;}
tabletrth, tabletrtd{font-size:16px; border:1px solid #CCC; margin:0; padding:5px10px;}
tabletrth{font-weight: bold; background-color:#F0F0F0;}
img{display:block;text-align:center;margin:0 auto;}

关于/留言页

emmm...一大堆测试用的留言信息请无视...

简历页

这里简历也仅仅是包含了一个头和一个尾巴,其实已经做好了...做成的PDF文件可以网上搜索工具直接转成html代码,但并不是很想粘出来...


后台页面分析

当时分析的时候是大致分成了这几个模块和这么多个页面,但是后来实现的时候,一个模块都整成了一个页面,懒得复制粘贴再改改改,直接一个页面搞定;

页面展示

数据统计模块

看过我之前博文的童鞋应该都会觉得眼熟(什么?这不就是之前写天猫找的模板吗?),反正能省事儿就省,而且这一套模板既有满足自适应的要求,又有增强表格的js插件,为啥不用呢?好了,链接在这里:http://www.cssmoban.com/cssthemes/7381.shtml

这一个模块就是一个数据统计,包括有:访问量、日志量、留言数还有一些详细的列表;

emmm..自适应后大概像下面这样:

分类管理模块

我把分类相关的功能都写在了一个页面上,这样操作也方便;

博文管理模块

点击编辑会弹出一个模态框,跟新增博文差不太多:

评论管理模块

这个模块我后来改了一下,只是用来显示文章的评论信息,通过监听Select来动态加载数据,删除之后虽然是置数据库isEffective字段为0,但仍然不会在后台显示...(因为我感觉删除的都是不想看到的,就不显示了...)


项目总结

上面就是项目的所有页面了,虽然现在看起来还是挺清晰简单的,但写的时候还是头大,头大,头大...不过通过这一次的开发,对写前台还是有了一定的熟悉,特别是对JS的编写以及Bootstrap响应式布局,而且在写前端的时候测出来还是一堆BUG,也犯了一些拼写错误这样的低级错误...而且感觉前端更多的是细节的东西,因为毕竟是直接与用户进行交互的,还是希望自己多写多积累吧,下面对项目中出现的一些问题进行一些总结:

HTML公有资源的提取

前端会面临着和写后端一样的问题,就是怎样抽取出一些中间件,来让大家共同使用,例如头部、尾部,我采用的是下面这样的方法解决:

<script language="javascript" type="text/javascript" src="js/head.js"></script>

先编写好单独的html文件,然后转成JS动态加载进来就好了,参考文章:https://blog.csdn.net/wabiaozia/article/details/75092623

跨域问题

在前后端结合的时候,出现的第一个问题就是跨域,参考文章:https://blog.csdn.net/saytime/article/details/74937204 ,我是使用的Filter方法,下面是代码:

/**
* 实现跨域
*
* @author:wmyskxz
* @create:2018-06-21-下午 22:48
*/
@Component
public class SimpleCORSFilter implements Filter { @Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS ,PUT, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie");
chain.doFilter(req, res);
} @Override
public void init(FilterConfig filterConfig) {} @Override
public void destroy() {}
}

但其实这样配置了之后,前端发的请求确实的能提交到服务器上来,服务器也能够做相应的处理,但AJAX中,PUT和POST方法老是进到error方法中而不进入success方法,我也是没辙...而且之前没有给Allow-Headers添加上除X-Requested-with之外的东西,POST的时候它会先提交一个头里面不光有X-Requested-with还有Content-TypeOPTIONS方法...也不知道为啥,最后只能妥协搞成现在这样;

时间显示的BUG

从数据库取出来的数据给到前台显示的时候就变成了一串时间戳,解决方法就是在实体类的getCreateBy()这样的取时间的操作前加上一行注解:@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8"),就能成功解决了:

font-awesome库显示问题

单独编写前台的时候都能够正常的显示字体,但是给弄到服务器文件夹下的时候就加载不出来了,也不是404找不到一类的,但字体就是请求不到,但是我点击控制台的信息又能成功下载到字体不知道是为啥,所以只能妥协给换成了CDN上的CSS:

<link href="//cdn.bootcss.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet">

错误页面跳转的问题

因为不想让除了我以外的人登录进后台页面,我也是想了各种办法,其中之一就是把login.html页面给“隐藏”起来了,具体的做法就是把它放进一个奇怪的文件夹,然后使用一个奇怪的地址(以后再改)来绑定它:

所以这样就会出现一个问题,因为我写的拦截器的原因,所有不是以/admin开头的地址如果请求错误的话,地址栏不变,会自动跳转到error.html文件中,因为我把这个页面放到了static根目录下,这是SpringBoot默认覆盖的结果,但是如果我在后台拦截器中使用重定向访问error.html的话就会出现404图片请求不到的问题,因为它会默认访问/admin/img/404.png这个地址(此时我后台的页面放在/admin/目录下),所以我不得不把error.htmlimg标签中的src改成一个网络地址;


项目地址 & 后期计划

Github地址:https://github.com/wmyskxz/MyBlog

因为前端(不包括后台页面)没有加任何的响应式的东西,就只是用了百分比来显示,但测试的时候不知道为啥手机端啊,小屏幕啊都还可以,特别是手机端它不会缩放看到的还是页面本身的样子..还是挺好的,又可以骗自己节省了一大部分的工作,hhh

马上面临着暑假,同时也意味着秋招快要开始了,还是准备复习复习基础(数据结构和算法),emmm...冲刺冲刺大厂,自己加油吧...

欢迎转载,转载请注明出处!

简书ID:@我没有三颗心脏

github:wmyskxz

欢迎关注公众微信号:wmyskxz_javaweb

分享自己的Java Web学习之路以及各种Java学习资料

SpringBoot技术栈搭建个人博客【前台开发/项目总结】的更多相关文章

  1. SpringBoot技术栈搭建个人博客【后台开发】

    前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...

  2. SpringBoot技术栈搭建个人博客【项目准备】

    前言:很早之前就想要写一个自己的博客了,趁着现在学校安排的实习有很多的空档,决定把它给做出来,也顺便完成实习的任务(搞一个项目出来...) 需求分析 总体目标:设计一套自适应/简洁/美观/易于文章管理 ...

  3. Flask搭建个人博客网站(1)—项目规划--李渣渣(lizaza.cn)

    Flask搭建个人博客网站(1)—项目规划--李渣渣(lizaza.cn) 发布时间:2020-05-2413次浏览 前言 现在市面上又许多比较成熟的博客平台,例如:CSDN,博客园,新浪博客等!对于 ...

  4. 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈

    本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...

  5. Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦

    个人博客 对于技术人员来说,拥有自己的个人博客应该是一件令人向往的事情,可以记录和分享自己的观点,想到这件事就觉得有意思,但是刚开始写博客的时候脑海中是没有搭建个人博客这一想法的,因为刚起步的时候连我 ...

  6. 使用VuePress搭建个人博客

    使用VuePress搭建个人博客 VuePress 是一个基于 Vue 的静态网站生成器.其中主要用到:Vue,VueRouter,Webpack. 类似的工具:hexo 基于 Markdown 语法 ...

  7. 【原】Github+Hexo+NextT搭建个人博客

    摘要 GitHub 是一个开源项目的托管网站,相信很多人都听过.在上面有很多高质量的项目代码,我们也可以把自己的项目代码托管到GitHub,与朋友们共享交流.GitHub Pages 是Github为 ...

  8. 利用Hexo搭建个人博客-环境搭建篇

    我是一个爱写博客进行总结分享的人.然而,有着热爱写博客并且深知写博客好处的我,却没有好好的把这个习惯坚持下来.如今毕业已经一年多了吧,每一次与师弟师妹们聊天,我总会意味深长的建议他们,一定要定期梳理总 ...

  9. hexo在git上搭建个人博客

    公司实习第一天接到的任务是:搭建一个基于Nodejs的开源项目的开发环境,接到任务时以为不是很困难,后来才知道该项目已于去年被废弃,搭配环境的时候遇到了不少问题,折腾了两天还是没有最终完成... 不过 ...

随机推荐

  1. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

  2. Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造

    Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造 题意: 我们用一种叫做食物网的有向图来描述生物之间的关系:一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连 ...

  3. 优化:mysql查询最近一条记录

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by ...

  4. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  5. ZZZPHP1.61 代码审计-从SQL注入到Getshell

    近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...

  6. C# winform 检测当前电脑安装的.net framework版本

    private static bool GetDotNetRelease(int release) { const string subkey = @"SOFTWARE\Microsoft\ ...

  7. "元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名"问题解决思路

    最近在构建一个typescript项目时如下代码在项目框架里vscode报错元素隐式具有 "any" 类型,因为类型“Shared”没有索引签名;很有意思的是当我们单独的把这段代码 ...

  8. 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而 ...

  9. 【php性能优化】关于写入文件操作的取舍方案

    对于使用php对文件进行写入操作有两种方案一种使用 file_put_contents() 和 fopen()/fwrite()/fclose() 两种方案至于应该怎么选,我觉得应该分情况选择,下面是 ...

  10. Proj.Net 投影介绍

    Proj.Net是开源地图投影库Proj.4的.net版本,许多GIS开源软件的投影都直接或间接地使用Proj.4的库,Proj.4是用C语言编写..Net下的开源GIS项目NetTopologySu ...