├── .gitignore ├── ForestBlog ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── ssm │ │ │ └── blog │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── AdminController.java │ │ │ │ ├── BackArticleController.java │ │ │ │ ├── BackCategoryController.java │ │ │ │ ├── BackCommentController.java │ │ │ │ ├── BackLinkController.java │ │ │ │ ├── BackMenuController.java │ │ │ │ ├── BackNoticeController.java │ │ │ │ ├── BackOptionsController.java │ │ │ │ ├── BackPageController.java │ │ │ │ ├── BackTagController.java │ │ │ │ ├── BackUserController.java │ │ │ │ └── UploadFileController.java │ │ │ └── home │ │ │ │ ├── ArticleController.java │ │ │ │ ├── CategoryController.java │ │ │ │ ├── CommentController.java │ │ │ │ ├── IndexController.java │ │ │ │ ├── LinkController.java │ │ │ │ ├── NoticeController.java │ │ │ │ ├── PageController.java │ │ │ │ └── TagController.java │ │ │ ├── dto │ │ │ ├── ArticleParam.java │ │ │ ├── JsonResult.java │ │ │ ├── Response.java │ │ │ ├── ResultVO.java │ │ │ └── UploadFileVO.java │ │ │ ├── entity │ │ │ ├── Article.java │ │ │ ├── ArticleCategoryRef.java │ │ │ ├── ArticleTagRef.java │ │ │ ├── Category.java │ │ │ ├── Comment.java │ │ │ ├── Link.java │ │ │ ├── Menu.java │ │ │ ├── Notice.java │ │ │ ├── Options.java │ │ │ ├── Page.java │ │ │ ├── Tag.java │ │ │ └── User.java │ │ │ ├── enums │ │ │ ├── ArticleCommentStatus.java │ │ │ ├── ArticleStatus.java │ │ │ ├── CategoryStatus.java │ │ │ ├── LinkStatus.java │ │ │ ├── MenuLevel.java │ │ │ ├── NoticeStatus.java │ │ │ ├── PageStatus.java │ │ │ └── Role.java │ │ │ ├── interceptor │ │ │ ├── HomeResourceInterceptor.java │ │ │ └── SecurityInterceptor.java │ │ │ ├── mapper │ │ │ ├── ArticleCategoryRefMapper.java │ │ │ ├── ArticleMapper.java │ │ │ ├── ArticleTagRefMapper.java │ │ │ ├── CategoryMapper.java │ │ │ ├── CommentMapper.java │ │ │ ├── LinkMapper.java │ │ │ ├── MenuMapper.java │ │ │ ├── NoticeMapper.java │ │ │ ├── OptionsMapper.java │ │ │ ├── PageMapper.java │ │ │ ├── TagMapper.java │ │ │ └── UserMapper.java │ │ │ ├── service │ │ │ ├── ArticleService.java │ │ │ ├── CategoryService.java │ │ │ ├── CommentService.java │ │ │ ├── LinkService.java │ │ │ ├── MenuService.java │ │ │ ├── NoticeService.java │ │ │ ├── OptionsService.java │ │ │ ├── PageService.java │ │ │ ├── TagService.java │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ │ ├── ArticleServiceImpl.java │ │ │ │ ├── CategoryServiceImpl.java │ │ │ │ ├── CommentServiceImpl.java │ │ │ │ ├── LinkServiceImpl.java │ │ │ │ ├── MenuServiceImpl.java │ │ │ │ ├── NoticeServiceImpl.java │ │ │ │ ├── OptionsServiceImpl.java │ │ │ │ ├── PageServiceImpl.java │ │ │ │ ├── TagServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ │ └── util │ │ │ └── MyUtils.java │ ├── resources │ │ ├── db.properties │ │ ├── log4j.properties │ │ ├── mapper │ │ │ ├── ArticleCategoryRefMapper.xml │ │ │ ├── ArticleMapper.xml │ │ │ ├── ArticleTagRefMapper.xml │ │ │ ├── CategoryMapper.xml │ │ │ ├── CommentMapper.xml │ │ │ ├── LinkMapper.xml │ │ │ ├── MenuMapper.xml │ │ │ ├── NoticeMapper.xml │ │ │ ├── OptionsMapper.xml │ │ │ ├── PageMapper.xml │ │ │ ├── TagMapper.xml │ │ │ └── UserMapper.xml │ │ ├── mybatis │ │ │ └── mybatis-config.xml │ │ └── spring │ │ │ ├── spring-mvc.xml │ │ │ └── spring-mybatis.xml │ └── webapp │ │ ├── WEB-INF │ │ ├── view │ │ │ ├── Admin │ │ │ │ ├── Article │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ ├── insert.jsp │ │ │ │ │ └── search.jsp │ │ │ │ ├── Category │ │ │ │ │ ├── edit.jsp │ │ │ │ │ └── index.jsp │ │ │ │ ├── Comment │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ └── reply.jsp │ │ │ │ ├── Link │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ └── insert.jsp │ │ │ │ ├── Menu │ │ │ │ │ ├── edit.jsp │ │ │ │ │ └── index.jsp │ │ │ │ ├── Notice │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ └── insert.jsp │ │ │ │ ├── Options │ │ │ │ │ └── index.jsp │ │ │ │ ├── Page │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ └── insert.jsp │ │ │ │ ├── Public │ │ │ │ │ ├── framework.jsp │ │ │ │ │ └── paging.jsp │ │ │ │ ├── Tag │ │ │ │ │ ├── edit.jsp │ │ │ │ │ └── index.jsp │ │ │ │ ├── User │ │ │ │ │ ├── edit.jsp │ │ │ │ │ ├── editPwd.jsp │ │ │ │ │ └── profile.jsp │ │ │ │ ├── index.jsp │ │ │ │ └── login.jsp │ │ │ └── Home │ │ │ │ ├── Error │ │ │ │ ├── 404.jsp │ │ │ │ └── 500.jsp │ │ │ │ ├── Page │ │ │ │ ├── applyLink.jsp │ │ │ │ ├── articleDetail.jsp │ │ │ │ ├── articleFile.jsp │ │ │ │ ├── articleListByCategory.jsp │ │ │ │ ├── articleListByTag.jsp │ │ │ │ ├── noticeDetail.jsp │ │ │ │ ├── page.jsp │ │ │ │ ├── search.jsp │ │ │ │ └── siteMap.jsp │ │ │ │ ├── Public │ │ │ │ ├── framework.jsp │ │ │ │ └── part │ │ │ │ │ ├── footer.jsp │ │ │ │ │ ├── header.jsp │ │ │ │ │ ├── paging.jsp │ │ │ │ │ ├── sidebar-1.jsp │ │ │ │ │ ├── sidebar-2.jsp │ │ │ │ │ └── sidebar-3.jsp │ │ │ │ └── index.jsp │ │ └── web.xml │ │ └── resource │ │ └── assets │ │ ├── css │ │ ├── back.css │ │ ├── highlight.css │ │ └── style.css │ │ ├── img │ │ ├── loginBg.jpg │ │ ├── logo.png │ │ └── thumbnail │ │ │ └── random │ │ │ ├── img_0.jpg │ │ │ ├── img_1.jpg │ │ │ ├── img_10.jpg │ │ │ ├── img_11.jpg │ │ │ ├── img_12.jpg │ │ │ ├── img_13.jpg │ │ │ ├── img_14.jpg │ │ │ ├── img_2.jpg │ │ │ ├── img_3.jpg │ │ │ ├── img_4.jpg │ │ │ ├── img_5.jpg │ │ │ ├── img_6.jpg │ │ │ ├── img_7.jpg │ │ │ ├── img_8.jpg │ │ │ └── img_9.jpg │ │ ├── js │ │ ├── back.js │ │ ├── jquery.cookie.js │ │ ├── jquery.min.js │ │ ├── script.js │ │ ├── sticky.js │ │ └── superfish.js │ │ └── plugin │ │ ├── font-awesome │ │ ├── HELP-US-OUT.txt │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── screen-reader.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ ├── layui │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── table.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ ├── layer.js │ │ ├── layui.all.js │ │ ├── layui.js │ │ ├── mobile │ │ │ ├── layer.js │ │ │ └── need │ │ │ │ └── layer.css │ │ └── skin │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ └── login │ │ ├── buttons.min.css │ │ ├── dashicons.min.css │ │ ├── forms.min.css │ │ ├── l10n.min.css │ │ └── login.min.css │ └── test │ ├── back │ ├── BackAdminFunctions.java │ ├── BackArticleFunctions.java │ ├── BackCommentFunctions.java │ ├── BackLinkFunctions.java │ ├── BackLoginAndLogout.java │ ├── BackMenuFunctions.java │ ├── BackNoticeFunctions.java │ ├── BackOptionsFunctions.java │ └── BackPageFunctions.java │ ├── geckodriver.exe │ └── home │ ├── HomeArticleFunction.java │ ├── HomeLinkFunction.java │ ├── HomeLinkFunction1.java │ ├── HomeLinkFunction2.java │ ├── HomeMenuAndSidebarFunction.java │ ├── HomeMenuAndSidebarFunction1.java │ └── HomeNoticeFunction.java ├── LICENSE ├── README.md ├── forest_blog.sql ├── image ├── automatedTest.gif ├── uploads.png ├── warexploded.png ├── 修改文件上传地址.png ├── 前台文章评论区.png ├── 前台查看文章.png ├── 前台首页.jpg ├── 后台修改密码.png ├── 后台修改用户信息.png ├── 后台写文章.png ├── 后台增加站点描述.png ├── 后台增加菜单.png ├── 后台控制台.png ├── 后台查找文章.png ├── 后台查看全部公告.png ├── 后台查看全部分类.png ├── 后台查看全部文章.png ├── 后台查看全部标签.png ├── 后台查看全部链接.png ├── 后台查看全部页面.png ├── 后台查看评论.png ├── 后台添加公告.png ├── 后台添加链接.png ├── 后台添加页面.png ├── 后台登录.png └── 后台设置博主信息.png └── uploads ├── 2019 ├── 8 │ ├── 2017032401571903086bdd06210e07c5f73a9254856c5e(1).jpg │ ├── 2017032401571903086bdd06210e07c5f73a9254856c5e(2).jpg │ ├── 2017032401571903086bdd06210e07c5f73a9254856c5e(3).jpg │ ├── 2017032401571903086bdd06210e07c5f73a9254856c5e(4).jpg │ ├── 2017032401571903086bdd06210e07c5f73a9254856c5e.jpg │ ├── p(1).jpg │ ├── p.jpg │ ├── z(1).jpg │ ├── z.jpg │ ├── 收款码(1).png │ └── 收款码.png ├── 9 │ ├── 20190914130133732.png │ ├── 2019091413023799.png │ ├── 20190914174541164.png │ ├── 20190914174706560.png │ ├── 2019091417532789.png │ ├── 20190914175516362.png │ ├── 20190914201500472.png │ ├── 20190914201536198.png │ ├── 20190914201951167.png │ ├── 20190914202218330.png │ ├── 20190914204049762.png │ ├── 20190914204100691.png │ ├── 20190914204511611.png │ ├── 20190914225927794.png │ ├── 20190914230625582.png │ ├── 20190914230825367.png │ ├── 20190914231507937.png │ ├── 20190915090929630.png │ ├── 20190915091612635.png │ ├── 20190915093359554.png │ ├── 20190915150118238.gif │ ├── 20190918094706198.jpg │ ├── 20190918095247277.jpg │ ├── 20190918095622101.jpg │ ├── 20190918105355884.jpg │ ├── 20190918110117226.jpg │ ├── 20190919213840682.png │ ├── 20190920210412778.png │ ├── 20190922143841757.png │ └── 2019092308193347.jpg └── 10 │ ├── 20191007153621950.png │ ├── 20191007153648208.png │ ├── 2019100715402014.png │ ├── 20191007154127663.png │ ├── 20191007154222212.jpg │ ├── 20191007154459334.png │ ├── 20191007155038568.png │ ├── 2019100715505630.png │ ├── 2019100715512437.jpg │ ├── 20191007155135604.jpg │ ├── 20191007155334244.png │ ├── 20191007155349805.png │ ├── 20191007155410485.png │ ├── 20191007155450773.png │ ├── 20191007155545742.png │ ├── 20191007155723341.png │ ├── 2019100717420134.png │ ├── 2019101011593518.jpg │ └── 20191010115953489.jpg ├── admin.png ├── home.png ├── tomcat.png └── tomcat2.png /.gitignore: -------------------------------------------------------------------------------- 1 | !.mvn/wrapper/maven-wrapper.jar 2 | target/ 3 | ### STS ### 4 | .apt_generated 5 | .classpath 6 | .factorypath 7 | .project 8 | .settings 9 | .springBeans 10 | 11 | ### IntelliJ IDEA ### 12 | .idea 13 | *.iws 14 | *.iml 15 | *.ipr 16 | 17 | ### NetBeans ### 18 | nbproject/private/ 19 | build/ 20 | nbbuild/ 21 | dist/ 22 | nbdist/ 23 | .nb-gradle/ 24 | 25 | #Mac 26 | .DS_Store -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/admin/BackMenuController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.admin; 2 | 3 | import com.ssm.blog.entity.Menu; 4 | import com.ssm.blog.enums.MenuLevel; 5 | import com.ssm.blog.service.MenuService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Controller; 8 | import org.springframework.ui.Model; 9 | import org.springframework.web.bind.annotation.PathVariable; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RequestMethod; 12 | import org.springframework.web.servlet.ModelAndView; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * 设置菜单界面 18 | */ 19 | @Controller 20 | @RequestMapping("/admin/menu") 21 | public class BackMenuController { 22 | 23 | @Autowired 24 | private MenuService menuService; 25 | 26 | /** 27 | * 后台菜单列表显示 28 | * 29 | * @return 30 | */ 31 | @RequestMapping(value = "") 32 | public String menuList(Model model) { 33 | List menuList = menuService.listMenu(); 34 | model.addAttribute("menuList",menuList); 35 | return "Admin/Menu/index"; 36 | } 37 | 38 | /** 39 | * 添加菜单内容提交 40 | * 41 | * @param menu 42 | * @return 43 | */ 44 | @RequestMapping(value = "/insertSubmit",method = RequestMethod.POST) 45 | public String insertMenuSubmit(Menu menu) { 46 | if(menu.getMenuOrder() == null) { 47 | menu.setMenuOrder(MenuLevel.TOP_MENU.getValue()); 48 | } 49 | menuService.insertMenu(menu); 50 | return "redirect:/admin/menu"; 51 | } 52 | 53 | /** 54 | * 删除菜单内容 55 | * 56 | * @param id 57 | * @return 58 | */ 59 | @RequestMapping(value = "/delete/{id}") 60 | public String deleteMenu(@PathVariable("id") Integer id) { 61 | menuService.deleteMenu(id); 62 | return "redirect:/admin/menu"; 63 | } 64 | 65 | /** 66 | * 编辑菜单内容显示 67 | * 68 | * @param id 69 | * @return 70 | */ 71 | @RequestMapping(value = "/edit/{id}") 72 | public ModelAndView editMenuView(@PathVariable("id") Integer id) { 73 | ModelAndView modelAndView = new ModelAndView(); 74 | 75 | Menu menu = menuService.getMenuById(id); 76 | modelAndView.addObject("menu",menu); 77 | 78 | List menuList = menuService.listMenu(); 79 | modelAndView.addObject("menuList",menuList); 80 | 81 | modelAndView.setViewName("Admin/Menu/edit"); 82 | return modelAndView; 83 | } 84 | 85 | 86 | /** 87 | * 编辑菜单内容提交 88 | * 89 | * @param menu 90 | * @return 91 | */ 92 | @RequestMapping(value = "/editSubmit",method = RequestMethod.POST) 93 | public String editMenuSubmit(Menu menu) { 94 | menuService.updateMenu(menu); 95 | return "redirect:/admin/menu"; 96 | } 97 | 98 | 99 | 100 | } 101 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/admin/BackOptionsController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.admin; 2 | 3 | import com.ssm.blog.entity.Options; 4 | import com.ssm.blog.service.OptionsService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.servlet.ModelAndView; 10 | 11 | 12 | 13 | @Controller 14 | @RequestMapping("/admin/options") 15 | public class BackOptionsController { 16 | 17 | @Autowired 18 | private OptionsService optionsService; 19 | 20 | 21 | /** 22 | * 基本信息显示 23 | * 24 | * @return 25 | */ 26 | @RequestMapping(value = "") 27 | public ModelAndView index() { 28 | ModelAndView modelAndView = new ModelAndView(); 29 | Options option = optionsService.getOptions(); 30 | modelAndView.addObject("option",option); 31 | 32 | modelAndView.setViewName("Admin/Options/index"); 33 | return modelAndView; 34 | } 35 | 36 | /** 37 | * 编辑基本信息显示 38 | * 39 | * @return 40 | */ 41 | @RequestMapping(value = "/edit") 42 | public ModelAndView editOptionView() { 43 | ModelAndView modelAndView = new ModelAndView(); 44 | Options option = optionsService.getOptions(); 45 | modelAndView.addObject("option",option); 46 | 47 | modelAndView.setViewName("Admin/Options/edit"); 48 | return modelAndView; 49 | } 50 | 51 | /** 52 | * 编辑基本信息提交 53 | * 54 | * @param options 55 | * @return 56 | */ 57 | @RequestMapping(value = "/editSubmit",method = RequestMethod.POST) 58 | public String editOptionSubmit(Options options) { 59 | //如果记录不存在,那就新建 60 | Options optionsCustom = optionsService.getOptions(); 61 | if(optionsCustom.getOptionId()==null) { 62 | optionsService.insertOptions(options); 63 | } else { 64 | optionsService.updateOptions(options); 65 | } 66 | return "redirect:/admin/options"; 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/admin/UploadFileController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.admin; 2 | 3 | import com.ssm.blog.dto.JsonResult; 4 | import com.ssm.blog.dto.UploadFileVO; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.web.bind.annotation.*; 7 | import org.springframework.web.multipart.MultipartFile; 8 | 9 | 10 | import java.io.File; 11 | import java.io.IOException; 12 | import java.util.Calendar; 13 | 14 | /** 15 | * 16 | * 后台上传文件controller 17 | */ 18 | @Slf4j 19 | @RestController 20 | @RequestMapping("/admin/upload") 21 | public class UploadFileController { 22 | 23 | /** 24 | * 文件保存目录,物理路径 25 | */ 26 | public final String rootPath = "D:/工作/华迪实习/ForestBlog-master/uploads"; 27 | 28 | public final String allowSuffix = ".bmp.jpg.jpeg.png.gif.pdf.doc.zip.rar.gz"; 29 | 30 | /** 31 | * 上传文件 32 | * 33 | * @param file 34 | * @return 35 | * @throws IOException 36 | */ 37 | @RequestMapping(value = "/img", method = RequestMethod.POST) 38 | public JsonResult uploadFile(@RequestParam("file") MultipartFile file) { 39 | 40 | //1.文件后缀过滤,只允许部分后缀 41 | //文件的完整名称,如spring.jpeg 42 | String filename = file.getOriginalFilename(); 43 | //文件名,如spring 44 | String name = filename.substring(0, filename.indexOf(".")); 45 | //文件后缀,如.jpeg 46 | String suffix = filename.substring(filename.lastIndexOf(".")); 47 | 48 | if (allowSuffix.indexOf(suffix) == -1) { 49 | return new JsonResult().fail("不允许上传该后缀的文件!"); 50 | } 51 | 52 | 53 | //2.创建文件目录 54 | //创建年月文件夹 55 | Calendar date = Calendar.getInstance(); 56 | File dateDirs = new File(date.get(Calendar.YEAR) 57 | + File.separator + (date.get(Calendar.MONTH) + 1)); 58 | 59 | //目标文件 60 | File descFile = new File(rootPath + File.separator + dateDirs + File.separator + filename); 61 | int i = 1; 62 | //若文件存在重命名 63 | String newFilename = filename; 64 | while (descFile.exists()) { 65 | newFilename = name + "(" + i + ")" + suffix; 66 | String parentPath = descFile.getParent(); 67 | descFile = new File(parentPath + File.separator + newFilename); 68 | i++; 69 | } 70 | //判断目标文件所在的目录是否存在 71 | if (!descFile.getParentFile().exists()) { 72 | //如果目标文件所在的目录不存在,则创建父目录 73 | descFile.getParentFile().mkdirs(); 74 | } 75 | 76 | //3.存储文件 77 | //将内存中的数据写入磁盘 78 | try { 79 | file.transferTo(descFile); 80 | } catch (Exception e) { 81 | e.printStackTrace(); 82 | log.error("上传失败,cause:{}", e); 83 | } 84 | //完整的url 85 | String fileUrl = "/uploads/" + dateDirs + "/" + newFilename; 86 | 87 | //4.返回URL 88 | UploadFileVO uploadFileVO = new UploadFileVO(); 89 | uploadFileVO.setTitle(filename); 90 | uploadFileVO.setSrc(fileUrl); 91 | return new JsonResult().ok(uploadFileVO); 92 | } 93 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/home/CategoryController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.home; 2 | 3 | 4 | import com.github.pagehelper.PageInfo; 5 | 6 | import com.ssm.blog.enums.ArticleStatus; 7 | 8 | 9 | import com.ssm.blog.entity.Article; 10 | import com.ssm.blog.entity.Category; 11 | import com.ssm.blog.entity.Tag; 12 | import com.ssm.blog.service.ArticleService; 13 | import com.ssm.blog.service.CategoryService; 14 | import com.ssm.blog.service.TagService; 15 | import org.springframework.beans.factory.annotation.Autowired; 16 | import org.springframework.stereotype.Controller; 17 | import org.springframework.ui.Model; 18 | import org.springframework.web.bind.annotation.*; 19 | 20 | import java.util.HashMap; 21 | import java.util.List; 22 | 23 | 24 | /** 25 | * 文章分类目录的controller 26 | * 27 | */ 28 | @Controller 29 | public class CategoryController { 30 | 31 | @Autowired 32 | private CategoryService categoryService; 33 | 34 | @Autowired 35 | private ArticleService articleService; 36 | 37 | @Autowired 38 | private TagService tagService; 39 | 40 | /** 41 | * 根据分类查询文章 42 | * 43 | * @param cateId 分类ID 44 | * @return 模板 45 | */ 46 | @RequestMapping("/category/{cateId}") 47 | public String getArticleListByCategory(@PathVariable("cateId") Integer cateId, 48 | @RequestParam(required = false, defaultValue = "1") Integer pageIndex, 49 | @RequestParam(required = false, defaultValue = "10") Integer pageSize, 50 | Model model) { 51 | 52 | //该分类信息 53 | Category category = categoryService.getCategoryById(cateId); 54 | if (category == null) { 55 | return "redirect:/404"; 56 | } 57 | model.addAttribute("category", category); 58 | 59 | //文章列表 60 | HashMap criteria = new HashMap<>(2); 61 | criteria.put("categoryId", cateId); 62 | criteria.put("status", ArticleStatus.PUBLISH.getValue()); 63 | PageInfo
articlePageInfo = articleService.pageArticle(pageIndex, pageSize, criteria); 64 | model.addAttribute("pageInfo", articlePageInfo); 65 | 66 | //侧边栏 67 | //标签列表显示 68 | List allTagList = tagService.listTag(); 69 | model.addAttribute("allTagList", allTagList); 70 | //获得随机文章 71 | List
randomArticleList = articleService.listRandomArticle(8); 72 | model.addAttribute("randomArticleList", randomArticleList); 73 | //获得热评文章 74 | List
mostCommentArticleList = articleService.listArticleByCommentCount(8); 75 | model.addAttribute("mostCommentArticleList", mostCommentArticleList); 76 | model.addAttribute("pageUrlPrefix", "/category/"+pageIndex+"?pageIndex"); 77 | return "Home/Page/articleListByCategory"; 78 | } 79 | 80 | 81 | } 82 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/home/CommentController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.home; 2 | 3 | import cn.hutool.http.HtmlUtil; 4 | import com.ssm.blog.dto.JsonResult; 5 | import com.ssm.blog.entity.Article; 6 | import com.ssm.blog.entity.Comment; 7 | import com.ssm.blog.enums.ArticleStatus; 8 | import com.ssm.blog.enums.Role; 9 | import com.ssm.blog.service.ArticleService; 10 | import com.ssm.blog.service.CommentService; 11 | import com.ssm.blog.util.MyUtils; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.stereotype.Controller; 14 | import org.springframework.web.bind.annotation.RequestMapping; 15 | import org.springframework.web.bind.annotation.RequestMethod; 16 | import org.springframework.web.bind.annotation.RestController; 17 | 18 | import javax.servlet.http.HttpServletRequest; 19 | import java.util.Date; 20 | 21 | /** 22 | * 文章评论的Controller 23 | */ 24 | 25 | @Controller 26 | @RestController 27 | public class CommentController { 28 | @Autowired 29 | private CommentService commentService; 30 | 31 | @Autowired 32 | private ArticleService articleService; 33 | 34 | /** 35 | * '添加评论 36 | * 37 | * @param request 38 | * @param comment 39 | */ 40 | @RequestMapping(value = "/comment", method = {RequestMethod.POST}) 41 | public JsonResult insertComment(HttpServletRequest request, Comment comment) { 42 | //添加评论 43 | comment.setCommentCreateTime(new Date()); 44 | comment.setCommentIp(MyUtils.getIpAddr(request)); 45 | if (request.getSession().getAttribute("user") != null) { 46 | comment.setCommentRole(Role.ADMIN.getValue()); 47 | } else { 48 | comment.setCommentRole(Role.VISITOR.getValue()); 49 | } 50 | comment.setCommentAuthorAvatar(MyUtils.getGravatar(comment.getCommentAuthorEmail())); 51 | 52 | //过滤字符,防止XSS攻击 53 | comment.setCommentContent(HtmlUtil.escape(comment.getCommentContent())); 54 | comment.setCommentAuthorName(HtmlUtil.escape(comment.getCommentAuthorName())); 55 | comment.setCommentAuthorEmail(HtmlUtil.escape(comment.getCommentAuthorEmail())); 56 | comment.setCommentAuthorUrl(HtmlUtil.escape(comment.getCommentAuthorUrl())); 57 | try { 58 | commentService.insertComment(comment); 59 | //更新文章的评论数 60 | Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), comment.getCommentArticleId()); 61 | articleService.updateCommentCount(article.getArticleId()); 62 | } catch (Exception e) { 63 | e.printStackTrace(); 64 | return new JsonResult().fail(); 65 | } 66 | return new JsonResult().ok(); 67 | } 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/home/LinkController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.home; 2 | 3 | import com.ssm.blog.entity.Article; 4 | import com.ssm.blog.entity.Link; 5 | import com.ssm.blog.enums.LinkStatus; 6 | import com.ssm.blog.service.ArticleService; 7 | import com.ssm.blog.service.LinkService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.ui.Model; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestMethod; 13 | import org.springframework.web.bind.annotation.ResponseBody; 14 | 15 | import java.util.Date; 16 | import java.util.List; 17 | 18 | /** 19 | *侧栏中热评文章的Controller 20 | */ 21 | @Controller 22 | public class LinkController { 23 | @Autowired 24 | private LinkService linkService; 25 | 26 | @Autowired 27 | private ArticleService articleService; 28 | 29 | @RequestMapping("/applyLink") 30 | public String applyLinkView(Model model) { 31 | //侧边栏显示 32 | //获得热评文章 33 | List
mostCommentArticleList = articleService.listArticleByCommentCount(8); 34 | model.addAttribute("mostCommentArticleList", mostCommentArticleList); 35 | return "Home/Page/applyLink"; 36 | } 37 | 38 | 39 | @RequestMapping(value = "/applyLinkSubmit",method = {RequestMethod.POST}) 40 | @ResponseBody 41 | public void applyLinkSubmit(Link link) { 42 | link.setLinkStatus(LinkStatus.HIDDEN.getValue()); 43 | link.setLinkCreateTime(new Date()); 44 | link.setLinkUpdateTime(new Date()); 45 | linkService.insertLink(link); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/home/NoticeController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.home; 2 | 3 | import com.ssm.blog.entity.Article; 4 | import com.ssm.blog.entity.Notice; 5 | import com.ssm.blog.service.ArticleService; 6 | import com.ssm.blog.service.NoticeService; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.ui.Model; 10 | import org.springframework.web.bind.annotation.PathVariable; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 公告详情的Controller 17 | */ 18 | @Controller 19 | public class NoticeController { 20 | 21 | @Autowired 22 | private NoticeService noticeService; 23 | 24 | @Autowired 25 | private ArticleService articleService; 26 | 27 | /** 28 | * 公告详情页显示 29 | * 30 | * @param noticeId 31 | * @return 32 | */ 33 | @RequestMapping(value = "/notice/{noticeId}") 34 | public String NoticeDetailView(@PathVariable("noticeId") Integer noticeId, 35 | Model model) { 36 | //公告内容和信息显示 37 | Notice notice = noticeService.getNoticeById(noticeId); 38 | model.addAttribute("notice",notice); 39 | 40 | //侧边栏显示 41 | //获得热评文章 42 | List
mostCommentArticleList = articleService.listArticleByCommentCount(8); 43 | model.addAttribute("mostCommentArticleList", mostCommentArticleList); 44 | return "Home/Page/noticeDetail"; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/controller/home/TagController.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.controller.home; 2 | 3 | import com.github.pagehelper.PageInfo; 4 | import com.ssm.blog.entity.Article; 5 | import com.ssm.blog.entity.Tag; 6 | import com.ssm.blog.enums.ArticleStatus; 7 | 8 | 9 | import com.ssm.blog.service.ArticleService; 10 | import com.ssm.blog.service.TagService; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.stereotype.Controller; 13 | import org.springframework.ui.Model; 14 | import org.springframework.web.bind.annotation.*; 15 | 16 | import java.util.HashMap; 17 | import java.util.List; 18 | 19 | /** 20 | * 标签的控制器 21 | */ 22 | @Controller 23 | public class TagController { 24 | 25 | @Autowired 26 | private TagService tagService; 27 | 28 | @Autowired 29 | private ArticleService articleService; 30 | 31 | /** 32 | * 根据标签查询文章 33 | * 34 | * @param tagId 标签ID 35 | * @return 模板 36 | */ 37 | @RequestMapping("/tag/{tagId}") 38 | public String getArticleListByTag(@PathVariable("tagId") Integer tagId, 39 | @RequestParam(required = false, defaultValue = "1") Integer pageIndex, 40 | @RequestParam(required = false, defaultValue = "10") Integer pageSize, 41 | Model model) { 42 | //该标签信息 43 | Tag tag = tagService.getTagById(tagId); 44 | if (tag == null) { 45 | return "redirect:/404"; 46 | } 47 | model.addAttribute("tag", tag); 48 | 49 | //文章列表 50 | HashMap criteria = new HashMap<>(2); 51 | criteria.put("tagId", tagId); 52 | criteria.put("status", ArticleStatus.PUBLISH.getValue()); 53 | PageInfo
articlePageInfo = articleService.pageArticle(pageIndex, pageSize, criteria); 54 | model.addAttribute("pageInfo", articlePageInfo); 55 | 56 | //侧边栏 57 | //标签列表显示 58 | List allTagList = tagService.listTag(); 59 | model.addAttribute("allTagList", allTagList); 60 | //获得随机文章 61 | List
randomArticleList = articleService.listRandomArticle(8); 62 | model.addAttribute("randomArticleList", randomArticleList); 63 | //获得热评文章 64 | List
mostCommentArticleList = articleService.listArticleByCommentCount(8); 65 | model.addAttribute("mostCommentArticleList", mostCommentArticleList); 66 | model.addAttribute("pageUrlPrefix", "/tag?pageIndex"); 67 | return "Home/Page/articleListByTag"; 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/dto/ArticleParam.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 文章数据传输对象 9 | */ 10 | @Data 11 | public class ArticleParam { 12 | 13 | private Integer articleId; 14 | 15 | private String articleTitle; 16 | 17 | private String articleContent; 18 | 19 | private Integer articleParentCategoryId; 20 | 21 | private Integer articleChildCategoryId; 22 | 23 | private Integer articleOrder; 24 | 25 | private Integer articleStatus; 26 | 27 | private List articleTagIds; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/dto/JsonResult.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * Json数据传输对象 7 | */ 8 | @Data 9 | public class JsonResult { 10 | 11 | 12 | /** 13 | * 错误码 14 | */ 15 | private Integer code; 16 | 17 | /** 18 | * 提示信息 19 | */ 20 | private String msg; 21 | 22 | /** 23 | * 返回的具体内容 24 | */ 25 | private T data; 26 | 27 | 28 | public JsonResult(Integer code, String msg, T data) { 29 | this.code = code; 30 | this.msg = msg; 31 | this.data = data; 32 | } 33 | 34 | public JsonResult() { 35 | } 36 | 37 | 38 | public JsonResult fail() { 39 | return new JsonResult(1, "操作失败", null); 40 | } 41 | 42 | public JsonResult fail(String msg) { 43 | return new JsonResult(1, msg, null); 44 | } 45 | 46 | public JsonResult ok() { 47 | return new JsonResult(0, "操作成功", null); 48 | } 49 | 50 | 51 | public JsonResult ok(T data) { 52 | return new JsonResult(0, "操作成功", data); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/dto/Response.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.dto; 2 | 3 | /** 4 | * response数据传输对象 5 | */ 6 | public class Response { 7 | 8 | private Boolean success; 9 | 10 | private String message; 11 | 12 | private T data; 13 | 14 | public Response() { 15 | } 16 | 17 | public Response(Boolean success) { 18 | this.success = success; 19 | } 20 | 21 | public Response(Boolean success, String message) { 22 | this.success = success; 23 | this.message = message; 24 | } 25 | 26 | public Response(Boolean success, String message, T data) { 27 | this.success = success; 28 | this.message = message; 29 | this.data = data; 30 | } 31 | 32 | public static Response yes() { 33 | return new Response(true, "操作成功"); 34 | } 35 | 36 | public static Response yes(T data) { 37 | return new Response(true, "操作成功", data); 38 | } 39 | 40 | 41 | public static Response no() { 42 | return new Response(false, "操作失败"); 43 | } 44 | 45 | public static Response no(String message) { 46 | return new Response(false, message); 47 | } 48 | 49 | public Boolean isSuccess() { 50 | return success; 51 | } 52 | 53 | public void setSuccess(Boolean success) { 54 | this.success = success; 55 | } 56 | 57 | public String getMessage() { 58 | return message; 59 | } 60 | 61 | public void setMessage(String message) { 62 | this.message = message; 63 | } 64 | 65 | public T getData() { 66 | return data; 67 | } 68 | 69 | public void setData(T data) { 70 | this.data = data; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/dto/ResultVO.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * result数据传输对象 7 | */ 8 | 9 | @Data 10 | public class ResultVO { 11 | 12 | /** 13 | * 错误码 14 | */ 15 | private Integer code; 16 | 17 | /** 18 | * 提示信息 19 | */ 20 | private String msg; 21 | 22 | /** 23 | * 返回的具体内容 24 | */ 25 | private T data; 26 | 27 | 28 | public ResultVO(Integer code, String msg, T data) { 29 | this.code = code; 30 | this.msg = msg; 31 | this.data = data; 32 | } 33 | 34 | public ResultVO() { 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/dto/UploadFileVO.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 文件传输对象 7 | */ 8 | @Data 9 | public class UploadFileVO { 10 | 11 | private String src; 12 | 13 | private String title; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Article.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * 文章实体类 11 | */ 12 | @Data 13 | public class Article implements Serializable{ 14 | 15 | private static final long serialVersionUID = 5207865247400761539L; 16 | 17 | private Integer articleId; 18 | 19 | private Integer articleUserId; 20 | 21 | private String articleTitle; 22 | 23 | private Integer articleViewCount; 24 | 25 | private Integer articleCommentCount; 26 | 27 | private Integer articleLikeCount; 28 | 29 | private Date articleCreateTime; 30 | 31 | private Date articleUpdateTime; 32 | 33 | private Integer articleIsComment; 34 | 35 | private Integer articleStatus; 36 | 37 | private Integer articleOrder; 38 | 39 | private String articleContent; 40 | 41 | private String articleSummary; 42 | 43 | private User user; 44 | 45 | private List tagList; 46 | 47 | private List categoryList; 48 | 49 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/ArticleCategoryRef.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 文章分类关联表 9 | * 10 | * 11 | */ 12 | @Data 13 | public class ArticleCategoryRef implements Serializable{ 14 | 15 | private static final long serialVersionUID = -6809206515467725995L; 16 | 17 | private Integer articleId; 18 | 19 | private Integer categoryId; 20 | 21 | public ArticleCategoryRef() { 22 | } 23 | 24 | public ArticleCategoryRef(Integer articleId, Integer categoryId) { 25 | this.articleId = articleId; 26 | this.categoryId = categoryId; 27 | } 28 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/ArticleTagRef.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 文章和标签关联 9 | * 10 | */ 11 | @Data 12 | public class ArticleTagRef implements Serializable { 13 | private static final long serialVersionUID = -5816783232020910492L; 14 | 15 | private Integer articleId; 16 | 17 | private Integer tagId; 18 | 19 | public ArticleTagRef() { 20 | } 21 | 22 | public ArticleTagRef(Integer articleId, Integer tagId) { 23 | this.articleId = articleId; 24 | this.tagId = tagId; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Category.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 分类实体类 10 | */ 11 | @Data 12 | public class Category implements Serializable { 13 | 14 | private static final long serialVersionUID = 6687286913317513141L; 15 | 16 | private Integer categoryId; 17 | 18 | private Integer categoryPid; 19 | 20 | private String categoryName; 21 | 22 | private String categoryDescription; 23 | 24 | private Integer categoryOrder; 25 | 26 | private String categoryIcon; 27 | 28 | /** 29 | * 文章数量(非数据库字段) 30 | */ 31 | private Integer articleCount; 32 | 33 | public Category(Integer categoryId, Integer categoryPid, String categoryName, String categoryDescription, Integer categoryOrder, String categoryIcon,Integer articleCount) { 34 | this.categoryId = categoryId; 35 | this.categoryPid = categoryPid; 36 | this.categoryName = categoryName; 37 | this.categoryDescription = categoryDescription; 38 | this.categoryOrder = categoryOrder; 39 | this.categoryIcon = categoryIcon; 40 | this.articleCount = articleCount; 41 | } 42 | 43 | public Category(Integer categoryId, String categoryName) { 44 | this.categoryId = categoryId; 45 | this.categoryName = categoryName; 46 | } 47 | 48 | public Category(Integer categoryId) { 49 | this.categoryId = categoryId; 50 | } 51 | 52 | /** 53 | * 未分类 54 | * 55 | * @return 分类 56 | */ 57 | public static Category Default() { 58 | return new Category(100000000, "未分类"); 59 | } 60 | 61 | 62 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Comment.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | 8 | /** 9 | * 文章评论 10 | * 11 | */ 12 | @Data 13 | public class Comment implements Serializable{ 14 | 15 | private static final long serialVersionUID = -1038897351672911219L; 16 | private Integer commentId; 17 | 18 | private Integer commentPid; 19 | 20 | private String commentPname; 21 | 22 | private Integer commentArticleId; 23 | 24 | private String commentAuthorName; 25 | 26 | private String commentAuthorEmail; 27 | 28 | private String commentAuthorUrl; 29 | 30 | private String commentAuthorAvatar; 31 | 32 | private String commentContent; 33 | 34 | private String commentAgent; 35 | 36 | private String commentIp; 37 | 38 | private Date commentCreateTime; 39 | 40 | /** 41 | * 角色(管理员1,访客0) 42 | */ 43 | private Integer commentRole; 44 | 45 | /** 46 | * 非数据库字段 47 | */ 48 | private Article article; 49 | 50 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Link.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | 8 | /** 9 | * 链接实体类 10 | */ 11 | @Data 12 | public class Link implements Serializable{ 13 | 14 | 15 | private static final long serialVersionUID = -259829372268790508L; 16 | 17 | private Integer linkId; 18 | 19 | private String linkUrl; 20 | 21 | private String linkName; 22 | 23 | private String linkImage; 24 | 25 | private String linkDescription; 26 | 27 | private String linkOwnerNickname; 28 | 29 | private String linkOwnerContact; 30 | 31 | private Date linkUpdateTime; 32 | 33 | private Date linkCreateTime; 34 | 35 | private Integer linkOrder; 36 | 37 | private Integer linkStatus; 38 | 39 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Menu.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 菜单实体类 9 | */ 10 | @Data 11 | public class Menu implements Serializable { 12 | private static final long serialVersionUID = 489914127235951698L; 13 | private Integer menuId; 14 | 15 | private String menuName; 16 | 17 | private String menuUrl; 18 | 19 | private Integer menuLevel; 20 | 21 | private String menuIcon; 22 | 23 | private Integer menuOrder; 24 | 25 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Notice.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | 8 | /** 9 | * 公告实体类 10 | */ 11 | @Data 12 | public class Notice implements Serializable{ 13 | 14 | private static final long serialVersionUID = -4901560494243593100L; 15 | private Integer noticeId; 16 | 17 | private String noticeTitle; 18 | 19 | private String noticeContent; 20 | 21 | private Date noticeCreateTime; 22 | 23 | private Date noticeUpdateTime; 24 | 25 | private Integer noticeStatus; 26 | 27 | private Integer noticeOrder; 28 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Options.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 9 | */ 10 | @Data 11 | public class Options implements Serializable{ 12 | private static final long serialVersionUID = -776792869602511933L; 13 | private Integer optionId; 14 | 15 | private String optionSiteTitle; 16 | 17 | private String optionSiteDescrption; 18 | 19 | private String optionMetaDescrption; 20 | 21 | private String optionMetaKeyword; 22 | 23 | private String optionAboutsiteAvatar; 24 | 25 | private String optionAboutsiteTitle; 26 | 27 | private String optionAboutsiteContent; 28 | 29 | private String optionAboutsiteWechat; 30 | 31 | private String optionAboutsiteQq; 32 | 33 | private String optionAboutsiteGithub; 34 | 35 | private String optionAboutsiteWeibo; 36 | 37 | private String optionTongji; 38 | 39 | private Integer optionStatus; 40 | 41 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Page.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | 8 | /** 9 | * 页面实体类 10 | */ 11 | @Data 12 | public class Page implements Serializable{ 13 | 14 | private static final long serialVersionUID = 3927496662110298634L; 15 | private Integer pageId; 16 | 17 | private String pageKey; 18 | 19 | private String pageTitle; 20 | 21 | private String pageContent; 22 | 23 | private Date pageCreateTime; 24 | 25 | private Date pageUpdateTime; 26 | 27 | private Integer pageViewCount; 28 | 29 | private Integer pageCommentCount; 30 | 31 | private Integer pageStatus; 32 | 33 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/Tag.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 标签实体类 9 | */ 10 | @Data 11 | public class Tag implements Serializable{ 12 | private static final long serialVersionUID = 605449151900057035L; 13 | private Integer tagId; 14 | 15 | private String tagName; 16 | 17 | private String tagDescription; 18 | 19 | /** 20 | * 文章数量(不是数据库字段) 21 | */ 22 | private Integer articleCount; 23 | 24 | public Tag() { 25 | } 26 | 27 | public Tag(Integer tagId) { 28 | this.tagId = tagId; 29 | } 30 | 31 | public Tag(Integer tagId, String tagName, String tagDescription, Integer articleCount) { 32 | this.tagId = tagId; 33 | this.tagName = tagName; 34 | this.tagDescription = tagDescription; 35 | this.articleCount = articleCount; 36 | } 37 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Date; 7 | 8 | /** 9 | * 用户实体类 10 | */ 11 | @Data 12 | public class User implements Serializable{ 13 | private static final long serialVersionUID = -4415517704211731385L; 14 | private Integer userId; 15 | 16 | private String userName; 17 | 18 | private String userPass; 19 | 20 | private String userNickname; 21 | 22 | private String userEmail; 23 | 24 | private String userUrl; 25 | 26 | private String userAvatar; 27 | 28 | private String userLastLoginIp; 29 | 30 | private Date userRegisterTime; 31 | 32 | private Date userLastLoginTime; 33 | 34 | private Integer userStatus; 35 | 36 | /** 37 | * 文章数量(不是数据库字段) 38 | */ 39 | private Integer articleCount; 40 | 41 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/ArticleCommentStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 文章评论状态 5 | */ 6 | public enum ArticleCommentStatus { 7 | 8 | ALLOW(1, "允许"), 9 | NOT_ALLOW(0, "不允许"); 10 | 11 | private Integer value; 12 | 13 | private String message; 14 | 15 | ArticleCommentStatus(Integer value, String message) { 16 | this.value = value; 17 | this.message = message; 18 | } 19 | 20 | public Integer getValue() { 21 | return value; 22 | } 23 | 24 | public void setValue(Integer value) { 25 | this.value = value; 26 | } 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/ArticleStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 文章状态 5 | */ 6 | public enum ArticleStatus { 7 | 8 | PUBLISH(1, "已发布"), 9 | DRAFT(0, "草稿"); 10 | 11 | private Integer value; 12 | 13 | private String message; 14 | 15 | ArticleStatus(Integer value, String message) { 16 | this.value = value; 17 | this.message = message; 18 | } 19 | 20 | public Integer getValue() { 21 | return value; 22 | } 23 | 24 | public void setValue(Integer value) { 25 | this.value = value; 26 | } 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/CategoryStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 分类状态 7 | */ 8 | 9 | public enum CategoryStatus { 10 | 11 | NORMAL(1, "正常"), 12 | HIDDEN(0, "隐藏"); 13 | 14 | private Integer value; 15 | 16 | private String message; 17 | 18 | CategoryStatus(Integer value, String message) { 19 | this.value = value; 20 | this.message = message; 21 | } 22 | 23 | public Integer getValue() { 24 | return value; 25 | } 26 | 27 | public void setValue(Integer value) { 28 | this.value = value; 29 | } 30 | 31 | public String getMessage() { 32 | return message; 33 | } 34 | 35 | public void setMessage(String message) { 36 | this.message = message; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/LinkStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 链接状态 5 | */ 6 | public enum LinkStatus { 7 | 8 | NORMAL(1, "显示"), 9 | HIDDEN(0, "隐藏"); 10 | 11 | private Integer value; 12 | 13 | private String message; 14 | 15 | LinkStatus(Integer value, String message) { 16 | this.value = value; 17 | this.message = message; 18 | } 19 | 20 | public Integer getValue() { 21 | return value; 22 | } 23 | 24 | public void setValue(Integer value) { 25 | this.value = value; 26 | } 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/MenuLevel.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 5 | */ 6 | 7 | public enum MenuLevel { 8 | 9 | TOP_MENU(1, "顶部菜单"), 10 | MAIN_MENU(2, "主体菜单"); 11 | 12 | private Integer value; 13 | 14 | private String message; 15 | 16 | MenuLevel(Integer value, String message) { 17 | this.value = value; 18 | this.message = message; 19 | } 20 | 21 | public Integer getValue() { 22 | return value; 23 | } 24 | 25 | public void setValue(Integer value) { 26 | this.value = value; 27 | } 28 | 29 | public String getMessage() { 30 | return message; 31 | } 32 | 33 | public void setMessage(String message) { 34 | this.message = message; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/NoticeStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 公告状态 5 | */ 6 | public enum NoticeStatus { 7 | 8 | NORMAL(1, "显示"), 9 | HIDDEN(0, "隐藏"); 10 | 11 | private Integer value; 12 | 13 | private String message; 14 | 15 | NoticeStatus(Integer value, String message) { 16 | this.value = value; 17 | this.message = message; 18 | } 19 | 20 | public Integer getValue() { 21 | return value; 22 | } 23 | 24 | public void setValue(Integer value) { 25 | this.value = value; 26 | } 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/PageStatus.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 5 | */ 6 | 7 | public enum PageStatus { 8 | 9 | NORMAL(1, "显示"), 10 | HIDDEN(0, "隐藏"); 11 | 12 | private Integer value; 13 | 14 | private String message; 15 | 16 | PageStatus(Integer value, String message) { 17 | this.value = value; 18 | this.message = message; 19 | } 20 | 21 | public Integer getValue() { 22 | return value; 23 | } 24 | 25 | public void setValue(Integer value) { 26 | this.value = value; 27 | } 28 | 29 | public String getMessage() { 30 | return message; 31 | } 32 | 33 | public void setMessage(String message) { 34 | this.message = message; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/enums/Role.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.enums; 2 | 3 | /** 4 | * 5 | */ 6 | 7 | public enum Role { 8 | 9 | ADMIN(1, "博主"), 10 | VISITOR(0, "访客"); 11 | 12 | private Integer value; 13 | 14 | private String message; 15 | 16 | Role(Integer value, String message) { 17 | this.value = value; 18 | this.message = message; 19 | } 20 | 21 | public Integer getValue() { 22 | return value; 23 | } 24 | 25 | public void setValue(Integer value) { 26 | this.value = value; 27 | } 28 | 29 | public String getMessage() { 30 | return message; 31 | } 32 | 33 | public void setMessage(String message) { 34 | this.message = message; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/interceptor/SecurityInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.interceptor; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.servlet.HandlerInterceptor; 5 | import org.springframework.web.servlet.ModelAndView; 6 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | import java.io.IOException; 11 | 12 | 13 | /** 14 | * 权限interceptor 15 | */ 16 | @Component 17 | public class SecurityInterceptor extends HandlerInterceptorAdapter { 18 | 19 | @Override 20 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws IOException { 21 | //这里可以根据session的用户来判断角色的权限,根据权限来转发不同的页面 22 | if(request.getSession().getAttribute("user") == null) { 23 | response.sendRedirect("/login"); 24 | return false; 25 | } 26 | return true; 27 | } 28 | 29 | @Override 30 | public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) { 31 | 32 | } 33 | 34 | @Override 35 | public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { 36 | 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/ArticleCategoryRefMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | 4 | import com.ssm.blog.entity.ArticleCategoryRef; 5 | import com.ssm.blog.entity.Category; 6 | import org.apache.ibatis.annotations.Mapper; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 文章分类关联表Mapper 12 | * 13 | */ 14 | @Mapper 15 | public interface ArticleCategoryRefMapper { 16 | 17 | /** 18 | * 添加文章和分类关联记录 19 | * @param record 关联对象 20 | * @return 影响行数 21 | */ 22 | int insert(ArticleCategoryRef record); 23 | 24 | /** 25 | * 根据分类ID删除记录 26 | * @param categoryId 分类ID 27 | * @return 影响行数 28 | */ 29 | int deleteByCategoryId(Integer categoryId); 30 | 31 | /** 32 | * 根据文章ID删除记录 33 | * @param articleId 文章ID 34 | * @return 影响行数 35 | */ 36 | int deleteByArticleId(Integer articleId); 37 | 38 | /** 39 | * 根据分类ID统计文章数 40 | * @param categoryId 分类ID 41 | * @return 文章数量 42 | */ 43 | int countArticleByCategoryId(Integer categoryId); 44 | 45 | 46 | /** 47 | * 根据文章ID查询分类ID 48 | * 49 | * @param articleId 文章ID 50 | * @return 分类ID列表 51 | */ 52 | List selectCategoryIdByArticleId(Integer articleId); 53 | 54 | /** 55 | * 根据分类ID查询文章ID 56 | * 57 | * @param categoryId 分类ID 58 | * @return 文章ID列表 59 | */ 60 | List selectArticleIdByCategoryId(Integer categoryId); 61 | 62 | /** 63 | * 根据文章ID获得分类列表 64 | * 65 | * @param articleId 文章ID 66 | * @return 分类列表 67 | */ 68 | List listCategoryByArticleId(Integer articleId); 69 | 70 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/ArticleTagRefMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | 4 | import com.ssm.blog.entity.ArticleTagRef; 5 | import com.ssm.blog.entity.Tag; 6 | import org.apache.ibatis.annotations.Mapper; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 文章标签关联表Mapper 12 | * 13 | */ 14 | @Mapper 15 | public interface ArticleTagRefMapper { 16 | 17 | /** 18 | * 添加文章和标签关联记录 19 | * @param record 关联对象 20 | * @return 影响行数 21 | */ 22 | int insert(ArticleTagRef record); 23 | 24 | /** 25 | * 根据标签ID删除记录 26 | * @param tagId 标签ID 27 | * @return 影响行数 28 | */ 29 | int deleteByTagId(Integer tagId); 30 | 31 | /** 32 | * 根据文章ID删除记录 33 | * @param articleId 文章ID 34 | * @return 影响行数 35 | */ 36 | int deleteByArticleId(Integer articleId); 37 | 38 | /** 39 | * 根据标签ID统计文章数 40 | * @param tagId 标签ID 41 | * @return 文章数量 42 | */ 43 | int countArticleByTagId(Integer tagId); 44 | 45 | /** 46 | * 根据文章获得标签列表 47 | * 48 | * @param articleId 文章ID 49 | * @return 标签列表 50 | */ 51 | List listTagByArticleId(Integer articleId); 52 | 53 | 54 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/CategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Category; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 文章分类mapper 12 | */ 13 | @Mapper 14 | public interface CategoryMapper { 15 | 16 | 17 | /** 18 | * 添加 19 | * 20 | * @param category 分类 21 | * @return 影响行数 22 | */ 23 | int insert(Category category); 24 | 25 | 26 | /** 27 | * 更新 28 | * 29 | * @param category 分类 30 | * @return 影响行数 31 | */ 32 | int update(Category category); 33 | 34 | /** 35 | * 根据分类id获得分类信息 36 | * 37 | * @param id ID 38 | * @return 分类 39 | */ 40 | Category getCategoryById(Integer id); 41 | 42 | 43 | /** 44 | * 删除分类 45 | * 46 | * @param id 文章ID 47 | */ 48 | int deleteCategory(Integer id); 49 | 50 | /** 51 | * 查询分类总数 52 | * 53 | * @return 数量 54 | */ 55 | Integer countCategory(); 56 | 57 | /** 58 | * 获得分类列表 59 | * 60 | * @return 列表 61 | */ 62 | List listCategory(); 63 | 64 | /** 65 | * 根据父分类找子分类 66 | * 67 | * @param id 分类ID 68 | * @return 列表 69 | */ 70 | List findChildCategory(@Param(value = "id") Integer id); 71 | 72 | /** 73 | * 根据标签名获取标签 74 | * 75 | * @param name 名称 76 | * @return 分类 77 | */ 78 | Category getCategoryByName(String name); 79 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/CommentMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Comment; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | @Mapper 10 | public interface CommentMapper { 11 | 12 | /** 13 | * 根据ID删除 14 | * 15 | * @param commentId 评论ID 16 | * @return 影响行数 17 | */ 18 | int deleteById(Integer commentId); 19 | 20 | /** 21 | * 添加 22 | * 23 | * @param comment 评论 24 | * @return 影响行数 25 | */ 26 | int insert(Comment comment); 27 | 28 | /** 29 | * 根据ID查询 30 | * 31 | * @param commentId 评论ID 32 | * @return 评论 33 | */ 34 | Comment getCommentById(Integer commentId); 35 | 36 | /** 37 | * 更新 38 | * 39 | * @param comment 评论 40 | * @return 影响行数 41 | */ 42 | int update(Comment comment); 43 | 44 | /** 45 | * 根据文章id获取评论列表 46 | * 47 | * @param id ID 48 | * @return 列表 49 | */ 50 | List listCommentByArticleId(@Param(value = "id") Integer id); 51 | 52 | 53 | /** 54 | * 获得评论列表 55 | * 56 | * @return 列表 57 | */ 58 | List listComment(); 59 | 60 | /** 61 | * 统计评论数 62 | * 63 | * @return 数量 64 | */ 65 | Integer countComment(); 66 | 67 | /** 68 | * 获得最近评论 69 | * 70 | * @param limit 查询数量 71 | * @return 列表 72 | */ 73 | List listRecentComment(@Param(value = "limit") Integer limit); 74 | 75 | /** 76 | * 获得评论的子评论 77 | * 78 | * @param id 评论ID 79 | * @return 列表 80 | */ 81 | List listChildComment(@Param(value = "id") Integer id); 82 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/LinkMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Link; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 链接mapper 11 | */ 12 | @Mapper 13 | public interface LinkMapper { 14 | 15 | /** 16 | * 删除 17 | * @param linkId 链接ID 18 | * @return 影响行数 19 | */ 20 | int deleteById(Integer linkId); 21 | 22 | /** 23 | * 添加 24 | * 25 | * @param link 链接 26 | * @return 影响行数 27 | */ 28 | int insert(Link link); 29 | 30 | /** 31 | * 根据ID查询 32 | * 33 | * @param linkId 链接ID 34 | * @return 影响行数 35 | */ 36 | Link getLinkById(Integer linkId); 37 | 38 | /** 39 | * 更新 40 | * 41 | * @param link 链接ID 42 | * @return 影响行数 43 | */ 44 | int update(Link link); 45 | 46 | /** 47 | * 获得链接总数 48 | * 49 | * @param status 状态 50 | * @return 数量 51 | */ 52 | Integer countLink(@Param(value = "status") Integer status); 53 | 54 | /** 55 | * 获得链接列表 56 | * 57 | * @param status 状态 58 | * @return 列表 59 | */ 60 | List listLink(@Param(value = "status") Integer status); 61 | 62 | /** 63 | * 根据linkName查询 64 | * 65 | * @param linkName 链接ID 66 | * @return 影响行数 67 | */ 68 | Link getLinkByLinkName(@Param(value = "linkName") String linkName); 69 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/MenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Menu; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 菜单mapper 9 | */ 10 | public interface MenuMapper { 11 | 12 | /** 13 | * 删除 14 | * 15 | * @param menuId 菜单ID 16 | * @return 影响行数 17 | */ 18 | int deleteById(Integer menuId); 19 | 20 | /** 21 | * 添加 22 | * @param menu 菜单 23 | * @return 影响行数 24 | */ 25 | int insert(Menu menu); 26 | 27 | /** 28 | * 根据ID查询 29 | * 30 | * @param menuId 菜单ID 31 | * @return 菜单 32 | */ 33 | Menu getMenuById(Integer menuId); 34 | 35 | /** 36 | * 更新 37 | * 38 | * @param menu 菜单 39 | * @return 影响行数 40 | */ 41 | int update(Menu menu); 42 | 43 | /** 44 | * 获得菜单列表 45 | * 46 | * @return 列表 47 | */ 48 | List listMenu() ; 49 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/NoticeMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Notice; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 公告mapper 11 | */ 12 | @Mapper 13 | public interface NoticeMapper { 14 | 15 | /** 16 | * 根据ID删除 17 | * 18 | * @param noticeId 公告ID 19 | * @return 影响行数 20 | */ 21 | int deleteById(Integer noticeId); 22 | 23 | /** 24 | * 添加 25 | * 26 | * @param notice 公告 27 | * @return 影响行数 28 | */ 29 | int insert(Notice notice); 30 | 31 | /** 32 | * 根据ID查询 33 | * 34 | * @param noticeId 公告ID 35 | * @return 公告 36 | */ 37 | Notice getNoticeById(Integer noticeId); 38 | 39 | /** 40 | * 获得公告列表 41 | * 42 | * @param notice 公告 43 | * @return 影响行数 44 | */ 45 | int update(Notice notice); 46 | 47 | /** 48 | * 获得公告列表 49 | * 50 | * @param notice 公告 51 | * @return 影响行数 52 | */ 53 | int updateByPrimaryKey(Notice notice); 54 | 55 | /** 56 | * 获得公告总数 57 | * 58 | * @param status 状态 59 | * @return 影响行数 60 | */ 61 | Integer countNotice(@Param(value = "status") Integer status); 62 | 63 | /** 64 | * 获得公告列表 65 | * 66 | * @param status 状态 67 | * @return 公告列表 68 | */ 69 | List listNotice(@Param(value = "status") Integer status); 70 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/OptionsMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Options; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | /** 7 | * 选项设置mapper 8 | */ 9 | @Mapper 10 | public interface OptionsMapper { 11 | 12 | /** 13 | * 根据ID删除 14 | * @param optionId 系统设置ID 15 | * @return 影响行数 16 | */ 17 | int deleteById(Integer optionId); 18 | 19 | /** 20 | * 添加 21 | * @param options 系统设置 22 | * @return 影响行数 23 | */ 24 | int insert(Options options); 25 | 26 | /** 27 | * 根据ID查询 28 | * 29 | * @param optionId 系统设置ID 30 | * @return 系统设置 31 | */ 32 | Options getOptionsById(Integer optionId); 33 | 34 | /** 35 | * 更新 36 | * 37 | * @param options 系统信息 38 | * @return 影响行数 39 | */ 40 | int update(Options options); 41 | 42 | /** 43 | * 获得记录 44 | * 45 | * @return 系统信息 46 | */ 47 | Options getOptions(); 48 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/PageMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Page; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 页面mapper 11 | */ 12 | @Mapper 13 | public interface PageMapper { 14 | /** 15 | * 根据ID删除 16 | * 17 | * @param pageId 页面ID 18 | * @return 影响行数 19 | */ 20 | int deleteById(Integer pageId); 21 | 22 | /** 23 | * 添加 24 | * 25 | * @param page 页面 26 | * @return 影响行数 27 | */ 28 | int insert(Page page); 29 | 30 | /** 31 | * 根据ID查询 32 | * 33 | * @param pageId 页面ID 34 | * @return 页面 35 | */ 36 | Page getPageById(Integer pageId); 37 | 38 | /** 39 | * 更新 40 | * 41 | * @param page 页面 42 | * @return 影响行数 43 | */ 44 | int update(Page page); 45 | 46 | /** 47 | * 获得页面列表 48 | * 49 | * @param status 状态 50 | * @return 页面列表 51 | */ 52 | List listPage(@Param(value = "status") Integer status); 53 | 54 | /** 55 | * 根据key获得页面 56 | * 57 | * @param status 状态 58 | * @param key 别名 59 | * @return 页面 60 | */ 61 | Page getPageByKey(@Param(value = "status") Integer status, 62 | @Param(value = "key") String key); 63 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/TagMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.Tag; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 标签mapper 10 | */ 11 | @Mapper 12 | public interface TagMapper { 13 | 14 | /** 15 | * 根据ID删除 16 | * 17 | * @param tagId 标签ID 18 | * @return 影响行数 19 | */ 20 | int deleteById(Integer tagId); 21 | 22 | /** 23 | * 添加 24 | * 25 | * @param tag 标签 26 | * @return 影响行数 27 | */ 28 | int insert(Tag tag); 29 | 30 | /** 31 | * 根据ID查询 32 | * 33 | * @param tagId 标签ID 34 | * @return 标签 35 | */ 36 | Tag getTagById(Integer tagId); 37 | 38 | /** 39 | * 更新 40 | * @param tag 标签 41 | * @return 影响行数 42 | */ 43 | int update(Tag tag); 44 | 45 | /** 46 | * 获得标签总数 47 | * 48 | * @return 数量 49 | */ 50 | Integer countTag() ; 51 | 52 | /** 53 | * 获得标签列表 54 | * 55 | * @return 列表 56 | */ 57 | List listTag() ; 58 | 59 | 60 | /** 61 | * 根据标签名获取标签 62 | * 63 | * @param name 名称 64 | * @return 标签 65 | */ 66 | Tag getTagByName(String name) ; 67 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.mapper; 2 | 3 | import com.ssm.blog.entity.User; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | 8 | 9 | @Mapper 10 | public interface UserMapper { 11 | 12 | 13 | 14 | /** 15 | * 根据ID查询 16 | * 17 | * @param userId 用户ID 18 | * @return 用户 19 | */ 20 | User getUserById(Integer userId); 21 | 22 | /** 23 | * 更新 24 | * 25 | * @param user 用户 26 | * @return 影响行数 27 | */ 28 | int update(User user); 29 | 30 | /** 31 | * 更新密码 32 | * 33 | * @param user 用户 34 | * @return 影响行数 35 | */ 36 | int updatePwd(User user); 37 | 38 | /** 39 | * 根据用户名或Email获得用户 40 | * 41 | * @param str 用户名或Email 42 | * @return 用户 43 | */ 44 | User getUserByNameOrEmail(String str) ; 45 | 46 | /** 47 | * 根据用户名查用户 48 | * 49 | * @param name 用户名 50 | * @return 用户 51 | */ 52 | User getUserByName(String name) ; 53 | 54 | /** 55 | * 根据Email查询用户 56 | * 57 | * @param email 邮箱 58 | * @return 用户 59 | */ 60 | User getUserByEmail(String email) ; 61 | 62 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/CategoryService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | 4 | import com.ssm.blog.entity.Category; 5 | 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 分类Service 11 | */ 12 | public interface CategoryService { 13 | /** 14 | * 获得分类总数 15 | * 16 | * @return 17 | */ 18 | Integer countCategory(); 19 | 20 | 21 | /** 22 | * 获得分类列表 23 | * 24 | * @return 分类列表 25 | */ 26 | List listCategory(); 27 | 28 | /** 29 | * 获得分类列表 30 | * 31 | * @return 分类列表 32 | */ 33 | List listCategoryWithCount(); 34 | 35 | /** 36 | * 删除分类 37 | * 38 | * @param id ID 39 | */ 40 | 41 | void deleteCategory(Integer id); 42 | 43 | /** 44 | * 根据id查询分类信息 45 | * 46 | * @param id ID 47 | * @return 分类 48 | */ 49 | Category getCategoryById(Integer id); 50 | 51 | /** 52 | * 添加分类 53 | * 54 | * @param category 分类 55 | * @return 分类 56 | */ 57 | Category insertCategory(Category category); 58 | 59 | /** 60 | * 更新分类 61 | * 62 | * @param category 分类 63 | */ 64 | void updateCategory(Category category); 65 | 66 | /** 67 | * 根据分类名获取分类 68 | * 69 | * @param name 名称 70 | * @return 分类 71 | */ 72 | Category getCategoryByName(String name); 73 | 74 | 75 | } 76 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/CommentService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.github.pagehelper.PageInfo; 4 | import com.ssm.blog.entity.Comment; 5 | import org.springframework.stereotype.Service; 6 | 7 | import java.util.List; 8 | 9 | /* 10 | 评论 11 | */ 12 | @Service 13 | public interface CommentService { 14 | 15 | /** 16 | * 添加评论 17 | * 18 | * @param comment 评论 19 | */ 20 | void insertComment(Comment comment); 21 | 22 | /** 23 | * 根据文章id获取评论列表 24 | * 25 | * @param articleId 文章ID 26 | * @return 列表 27 | */ 28 | List listCommentByArticleId(Integer articleId); 29 | 30 | /** 31 | * 根据id获取评论 32 | * 33 | * @param id 34 | * @return 35 | */ 36 | Comment getCommentById(Integer id); 37 | 38 | 39 | /** 40 | * 获取所有评论列表 41 | * 42 | * @param pageIndex 第几页开始 43 | * @param pageSize 一页显示数量 44 | * @return 列表 45 | */ 46 | PageInfo listCommentByPage( 47 | Integer pageIndex, 48 | Integer pageSize); 49 | 50 | /** 51 | * 获得评论列表 52 | * 53 | * @return 列表 54 | */ 55 | List listComment(); 56 | 57 | 58 | /** 59 | * 删除评论 60 | * 61 | * @param id ID 62 | */ 63 | void deleteComment(Integer id); 64 | 65 | /** 66 | * 修改评论 67 | * 68 | * @param comment 评论 69 | */ 70 | void updateComment(Comment comment); 71 | 72 | /** 73 | * 统计评论数 74 | * 75 | * @return 数量 76 | */ 77 | Integer countComment(); 78 | 79 | /** 80 | * 获得最近评论 81 | * 82 | * @param limit 查询数量 83 | * @return 列表 84 | */ 85 | List listRecentComment(Integer limit); 86 | 87 | /** 88 | * 获得评论的子评论 89 | * 90 | * @param id 评论ID 91 | * @return 列表 92 | */ 93 | List listChildComment(Integer id); 94 | 95 | 96 | } 97 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/LinkService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Link; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 9 | * 链接Service 10 | */ 11 | public interface LinkService { 12 | 13 | /** 14 | * 获得链接总数 15 | * 16 | * @param status 状态 17 | * @return 数量 18 | */ 19 | Integer countLink(Integer status); 20 | 21 | /** 22 | * 获得链接列表 23 | * 24 | * @param status 状态 25 | * @return 链接列表 26 | */ 27 | List listLink(Integer status); 28 | 29 | /** 30 | * 添加链接 31 | * 32 | * @param link 链接 33 | */ 34 | void insertLink(Link link); 35 | 36 | /** 37 | * 删除链接 38 | * 39 | * @param id 链接ID 40 | */ 41 | void deleteLink(Integer id); 42 | 43 | /** 44 | * 更新链接 45 | * 46 | * @param link 链接 47 | */ 48 | void updateLink(Link link); 49 | 50 | /** 51 | * 根据id查询链接 52 | * 53 | * @param id 链接ID 54 | * @return 链接 55 | */ 56 | Link getLinkById(Integer id); 57 | 58 | /** 59 | * 根据linkName查询链接 60 | * 61 | * @param linName 链接名 62 | * @return 链接 63 | */ 64 | Link getLinkByLinkName(String linkName); 65 | 66 | } 67 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/MenuService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Menu; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 菜单服务 9 | */ 10 | public interface MenuService { 11 | /** 12 | * 获得菜单列表 13 | * 14 | * @return 列表 15 | */ 16 | List listMenu() ; 17 | 18 | /** 19 | * 添加菜单项目 20 | * 21 | * @param menu 菜单 22 | */ 23 | Menu insertMenu(Menu menu) ; 24 | 25 | /** 26 | * 删除菜单项目 27 | * 28 | * @param id 菜单ID 29 | */ 30 | void deleteMenu(Integer id) ; 31 | 32 | /** 33 | * 更新菜单项目 34 | * 35 | * @param menu 菜单 36 | */ 37 | void updateMenu(Menu menu) ; 38 | 39 | /** 40 | * 根据id获得菜单项目信息 41 | * 42 | * @param id 菜单ID 43 | * @return 菜单 44 | */ 45 | Menu getMenuById(Integer id) ; 46 | } 47 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/NoticeService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Notice; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 公告Service 9 | */ 10 | public interface NoticeService { 11 | 12 | 13 | /** 14 | * 获得公告列表 15 | * 16 | * @param status 状态 17 | * @return 列表 18 | */ 19 | List listNotice(Integer status); 20 | 21 | /** 22 | * 添加公告 23 | * 24 | * @param notice 公告 25 | */ 26 | void insertNotice(Notice notice); 27 | 28 | /** 29 | * 删除公告 30 | * 31 | * @param id 32 | */ 33 | void deleteNotice(Integer id); 34 | 35 | /** 36 | * 更新公告 37 | * 38 | * @param notice 39 | */ 40 | void updateNotice(Notice notice); 41 | 42 | /** 43 | * 根据id查询公告 44 | * 45 | * @param id ID 46 | * @return 公告 47 | */ 48 | Notice getNoticeById(Integer id); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/OptionsService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Options; 4 | 5 | 6 | /** 7 | * 8 | * 设置选项管理 9 | */ 10 | public interface OptionsService { 11 | /** 12 | * 获得基本信息 13 | * 14 | * @return 系统设置 15 | */ 16 | Options getOptions(); 17 | 18 | /** 19 | * 新建基本信息 20 | * 21 | * @param options 系统设置 22 | */ 23 | void insertOptions(Options options); 24 | 25 | /** 26 | * 更新基本信息 27 | * 28 | * @param options 系统设置 29 | */ 30 | void updateOptions(Options options); 31 | } 32 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/PageService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Page; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 页面Service 9 | */ 10 | public interface PageService { 11 | /** 12 | * 获得页面列表 13 | * 14 | * @param status 状态 15 | * @return 列表 16 | */ 17 | List listPage(Integer status); 18 | 19 | /** 20 | * 根据页面key获得页面 21 | * 22 | * @param status 状态 23 | * @param key 别名 24 | * @return 页面 25 | */ 26 | Page getPageByKey(Integer status, String key); 27 | 28 | /** 29 | * 根据id获取页面 30 | * 31 | * @param id 页面ID 32 | * @return 页面 33 | */ 34 | Page getPageById(Integer id); 35 | 36 | /** 37 | * 添加页面 38 | * 39 | * @param page 页面 40 | */ 41 | void insertPage(Page page); 42 | 43 | /** 44 | * 删除页面 45 | * 46 | * @param id 页面ID 47 | */ 48 | void deletePage(Integer id); 49 | 50 | /** 51 | * 编辑页面 52 | * 53 | * @param page 分页 54 | */ 55 | void updatePage(Page page); 56 | } 57 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/TagService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.Tag; 4 | 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 10 | * 标签Service 11 | */ 12 | public interface TagService { 13 | 14 | /** 15 | * 获得标签总数 16 | * 17 | * @return 数量 18 | */ 19 | Integer countTag() ; 20 | 21 | /** 22 | * 获得标签列表 23 | * 24 | * @return 标签列表 25 | */ 26 | List listTag() ; 27 | 28 | /** 29 | * 获得标签列表 30 | * 31 | * @return 标签列表 32 | */ 33 | List listTagWithCount() ; 34 | 35 | /** 36 | * 根据id获得标签信息 37 | * 38 | * @param id 标签ID 39 | * @return 标签 40 | */ 41 | Tag getTagById(Integer id) ; 42 | 43 | /** 44 | * 添加标签 45 | * 46 | * @param tag 标签 47 | * @return 标签 48 | */ 49 | Tag insertTag(Tag tag) ; 50 | 51 | /** 52 | * 修改标签 53 | * 54 | * @param tag 标签 55 | */ 56 | void updateTag(Tag tag) ; 57 | 58 | /** 59 | * 删除标签 60 | * 61 | * @param id 标签iD 62 | */ 63 | void deleteTag(Integer id) ; 64 | 65 | /** 66 | * 根据标签名获取标签 67 | * 68 | * @param name 标签名称 69 | * @return 标签 70 | */ 71 | Tag getTagByName(String name) ; 72 | 73 | /** 74 | * 根据文章ID获得标签 75 | * 76 | * @param articleId 文章ID 77 | * @return 标签列表 78 | */ 79 | List listTagByArticleId(Integer articleId); 80 | 81 | } 82 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service; 2 | 3 | import com.ssm.blog.entity.User; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface UserService { 9 | 10 | 11 | /** 12 | * 根据id查询用户信息 13 | * 14 | * @param id 用户ID 15 | * @return 用户 16 | */ 17 | User getUserById(Integer id); 18 | 19 | /** 20 | * 修改用户信息 21 | * 22 | * @param user 用户 23 | */ 24 | void updateUser(User user); 25 | 26 | /** 27 | * 修改用户密码 28 | * 29 | * @param user 用户 30 | */ 31 | void updateUserPwd(User user); 32 | 33 | /** 34 | * 根据用户名和邮箱查询用户 35 | * 36 | * @param str 用户名或Email 37 | * @return 用户 38 | */ 39 | User getUserByNameOrEmail(String str); 40 | 41 | /** 42 | * 根据用户名查询用户 43 | * 44 | * @param name 用户名 45 | * @return 用户 46 | */ 47 | User getUserByName(String name); 48 | 49 | /** 50 | * 根据邮箱查询用户 51 | * 52 | * @param email Email 53 | * @return 用户 54 | */ 55 | User getUserByEmail(String email); 56 | } 57 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/LinkServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.entity.Link; 4 | import com.ssm.blog.mapper.LinkMapper; 5 | import com.ssm.blog.service.LinkService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 链接Service实现 14 | * 15 | */ 16 | @Service 17 | public class LinkServiceImpl implements LinkService { 18 | 19 | @Autowired(required = false) 20 | private LinkMapper linkMapper; 21 | 22 | @Override 23 | public Integer countLink(Integer status) { 24 | return linkMapper.countLink(status); 25 | } 26 | 27 | @Override 28 | public List listLink(Integer status) { 29 | return linkMapper.listLink(status); 30 | } 31 | 32 | @Override 33 | public void insertLink(Link link) { 34 | linkMapper.insert(link); 35 | } 36 | 37 | @Override 38 | public void deleteLink(Integer id) { 39 | linkMapper.deleteById(id); 40 | } 41 | 42 | @Override 43 | public void updateLink(Link link) { 44 | linkMapper.update(link); 45 | } 46 | 47 | @Override 48 | public Link getLinkById(Integer id) { 49 | return linkMapper.getLinkById(id); 50 | } 51 | 52 | @Override 53 | public Link getLinkByLinkName(String linkName) { return linkMapper.getLinkByLinkName(linkName);} 54 | 55 | } 56 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/MenuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.entity.Menu; 4 | import com.ssm.blog.mapper.MenuMapper; 5 | import com.ssm.blog.service.MenuService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | 8 | import org.springframework.stereotype.Service; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 菜单管理 14 | */ 15 | @Service 16 | public class MenuServiceImpl implements MenuService { 17 | 18 | 19 | @Autowired(required = false) 20 | private MenuMapper menuMapper; 21 | 22 | @Override 23 | public List listMenu() { 24 | List menuList = menuMapper.listMenu(); 25 | return menuList; 26 | } 27 | 28 | @Override 29 | public Menu insertMenu(Menu menu) { 30 | menuMapper.insert(menu); 31 | return menu; 32 | } 33 | 34 | @Override 35 | public void deleteMenu(Integer id) { 36 | menuMapper.deleteById(id); 37 | } 38 | 39 | @Override 40 | public void updateMenu(Menu menu) { 41 | menuMapper.update(menu); 42 | } 43 | 44 | @Override 45 | public Menu getMenuById(Integer id) { 46 | return menuMapper.getMenuById(id); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/NoticeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.entity.Notice; 4 | import com.ssm.blog.mapper.NoticeMapper; 5 | import com.ssm.blog.service.NoticeService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | 8 | import org.springframework.stereotype.Service; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 公告Service实现 14 | */ 15 | @Service 16 | public class NoticeServiceImpl implements NoticeService { 17 | 18 | @Autowired(required = false) 19 | private NoticeMapper noticeMapper; 20 | 21 | @Override 22 | public List listNotice(Integer status) { 23 | return noticeMapper.listNotice(status); 24 | } 25 | 26 | @Override 27 | public void insertNotice(Notice notice) { 28 | noticeMapper.insert(notice); 29 | } 30 | 31 | @Override 32 | public void deleteNotice(Integer id) { 33 | noticeMapper.deleteById(id); 34 | } 35 | 36 | @Override 37 | public void updateNotice(Notice notice) { 38 | noticeMapper.update(notice); 39 | } 40 | 41 | @Override 42 | public Notice getNoticeById(Integer id) { 43 | return noticeMapper.getNoticeById(id); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/OptionsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.entity.Options; 4 | import com.ssm.blog.mapper.OptionsMapper; 5 | import com.ssm.blog.service.OptionsService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.cache.annotation.CacheEvict; 8 | import org.springframework.cache.annotation.Cacheable; 9 | import org.springframework.stereotype.Service; 10 | 11 | 12 | @Service 13 | public class OptionsServiceImpl implements OptionsService { 14 | 15 | 16 | @Autowired(required = false) 17 | private OptionsMapper optionsMapper; 18 | 19 | @Override 20 | @Cacheable(value = "default", key = "'options'") 21 | public Options getOptions() { 22 | return optionsMapper.getOptions(); 23 | } 24 | 25 | @Override 26 | @CacheEvict(value = "default", key = "'options'") 27 | public void insertOptions(Options options) { 28 | optionsMapper.insert(options); 29 | } 30 | 31 | @Override 32 | @CacheEvict(value = "default", key = "'options'") 33 | public void updateOptions(Options options) { 34 | optionsMapper.update(options); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/PageServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.entity.Page; 4 | import com.ssm.blog.mapper.PageMapper; 5 | import com.ssm.blog.service.PageService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 页面Service实现 14 | */ 15 | @Service 16 | public class PageServiceImpl implements PageService { 17 | 18 | @Autowired(required = false) 19 | private PageMapper pageMapper; 20 | 21 | @Override 22 | public Page getPageByKey(Integer status, String key) { 23 | return pageMapper.getPageByKey(status, key); 24 | } 25 | 26 | @Override 27 | public Page getPageById(Integer id) { 28 | return pageMapper.getPageById(id); 29 | } 30 | 31 | @Override 32 | public List listPage(Integer status) { 33 | return pageMapper.listPage(status); 34 | } 35 | 36 | 37 | @Override 38 | public void insertPage(Page page) { 39 | pageMapper.insert(page); 40 | } 41 | 42 | @Override 43 | public void deletePage(Integer id) { 44 | pageMapper.deleteById(id); 45 | } 46 | 47 | @Override 48 | public void updatePage(Page page) { 49 | pageMapper.update(page); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.service.impl; 2 | 3 | import com.ssm.blog.mapper.ArticleMapper; 4 | import com.ssm.blog.mapper.UserMapper; 5 | import com.ssm.blog.entity.User; 6 | import com.ssm.blog.service.UserService; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Service; 9 | 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | /** 14 | * 用户管理 15 | */ 16 | @Service 17 | public class UserServiceImpl implements UserService { 18 | 19 | @Autowired(required = false) 20 | private UserMapper userMapper; 21 | 22 | @Autowired(required = false) 23 | private ArticleMapper articleMapper; 24 | 25 | 26 | @Override 27 | public User getUserById(Integer id) { 28 | return userMapper.getUserById(id); 29 | } 30 | 31 | @Override 32 | public void updateUser(User user) { 33 | userMapper.update(user); 34 | } 35 | 36 | @Override 37 | public void updateUserPwd(User user) { userMapper.updatePwd(user); } 38 | 39 | @Override 40 | public User getUserByNameOrEmail(String str) { 41 | return userMapper.getUserByNameOrEmail(str); 42 | } 43 | 44 | @Override 45 | public User getUserByName(String name) { 46 | return userMapper.getUserByName(name); 47 | } 48 | 49 | @Override 50 | public User getUserByEmail(String email) { 51 | return userMapper.getUserByEmail(email); 52 | } 53 | 54 | 55 | } 56 | -------------------------------------------------------------------------------- /ForestBlog/src/main/java/com/ssm/blog/util/MyUtils.java: -------------------------------------------------------------------------------- 1 | package com.ssm.blog.util; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import java.security.MessageDigest; 5 | import java.security.NoSuchAlgorithmException; 6 | 7 | /** 8 | * 常用的方法 9 | */ 10 | public class MyUtils { 11 | 12 | /** 13 | * 获得IP地址 14 | * 15 | * @param request 16 | * @return 17 | */ 18 | public static String getIpAddr(HttpServletRequest request) { 19 | String ipAddress = request.getHeader("x-forwarded-for"); 20 | if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 21 | ipAddress = request.getHeader("Proxy-Client-IP"); 22 | } 23 | if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 24 | ipAddress = request.getHeader("WL-Proxy-Client-IP"); 25 | } 26 | if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 27 | ipAddress = request.getRemoteAddr(); 28 | } 29 | //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 30 | if (ipAddress != null && ipAddress.length() > 15) { 31 | if (ipAddress.indexOf(",") > 0) { 32 | ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); 33 | } 34 | } 35 | return ipAddress; 36 | } 37 | 38 | 39 | /** 40 | * 获得Md5加密 41 | * 42 | * @param str 原字符串 43 | * @return 加密后的字符串 44 | */ 45 | public static String strToMd5(String str) { 46 | String md5Str = null; 47 | if (str != null && str.length() != 0) { 48 | try { 49 | MessageDigest md = MessageDigest.getInstance("MD5"); 50 | md.update(str.getBytes()); 51 | byte b[] = md.digest(); 52 | 53 | int i; 54 | StringBuffer buf = new StringBuffer(""); 55 | for (int offset = 0; offset < b.length; offset++) { 56 | i = b[offset]; 57 | if (i < 0) { 58 | i += 256; 59 | } 60 | if (i < 16) { 61 | buf.append("0"); 62 | } 63 | buf.append(Integer.toHexString(i)); 64 | } 65 | //32位 66 | md5Str = buf.toString(); 67 | //16位 68 | //md5Str = buf.toString().substring(8, 24); 69 | } catch (NoSuchAlgorithmException e) { 70 | e.printStackTrace(); 71 | } 72 | } 73 | return md5Str; 74 | } 75 | 76 | /** 77 | * 根据email获取gravatar头像 78 | * 79 | * @param email Email 80 | * @return 头像URL 81 | */ 82 | public static String getGravatar(String email) { 83 | String emailMd5 = strToMd5(email); 84 | //设置图片大小32px 85 | String avatar = "http://cn.gravatar.com/avatar/" + emailMd5 + "?s=128&d=identicon&r=PG"; 86 | return avatar; 87 | } 88 | 89 | } -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | #MySQL 2 | mysql.url=jdbc:mysql://localhost:3306/forest_blog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 3 | mysql.username=root 4 | mysql.password=123456 5 | -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Configure logging for testing: optionally with log file 2 | log4j.rootLogger=WARN, stdout, logfile 3 | 4 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 7 | 8 | log4j.appender.logfile=org.apache.log4j.FileAppender 9 | log4j.appender.logfile.File=target/ForestBlog.log 10 | log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 11 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/mapper/ArticleCategoryRefMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | article_category_ref 10 | 11 | 12 | insert into 13 | 14 | (article_id, category_id) 15 | values (#{articleId}, #{categoryId}) 16 | 17 | 18 | 19 | delete from 20 | 21 | where category_id = #{value} 22 | 23 | 24 | 25 | delete from 26 | 27 | where article_id = #{value} 28 | 29 | 30 | 35 | 36 | 41 | 42 | 43 | 48 | 49 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/mapper/ArticleTagRefMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | article_tag_ref 10 | 11 | 12 | insert into 13 | (article_id, tag_id) 14 | values (#{articleId}, #{tagId}) 15 | 16 | 17 | 18 | delete from where tag_id = #{value} 19 | 20 | 21 | 22 | delete from where article_id = #{value} 23 | 24 | 25 | 29 | 30 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/mapper/MenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | menu_id, menu_name, menu_url, menu_level, menu_icon, menu_order 14 | 15 | 16 | menu 17 | 18 | 24 | 25 | delete from 26 | where menu_id = #{menuId,jdbcType=INTEGER} 27 | 28 | 29 | insert into 30 | (menu_id, menu_name, menu_url, 31 | menu_level, menu_icon, menu_order) 32 | values (#{menuId,jdbcType=INTEGER}, #{menuName,jdbcType=VARCHAR}, #{menuUrl,jdbcType=VARCHAR}, 33 | #{menuLevel,jdbcType=INTEGER}, #{menuIcon,jdbcType=VARCHAR}, #{menuOrder,jdbcType=INTEGER}) 34 | 35 | 36 | 37 | update 38 | 39 | menu_name = #{menuName,jdbcType=VARCHAR}, 40 | menu_url = #{menuUrl,jdbcType=VARCHAR}, 41 | menu_level = #{menuLevel,jdbcType=INTEGER}, 42 | menu_icon = #{menuIcon,jdbcType=VARCHAR}, 43 | menu_order = #{menuOrder,jdbcType=INTEGER}, 44 | 45 | where menu_id = #{menuId,jdbcType=INTEGER} 46 | 47 | 48 | 49 | 50 | 51 | 57 | -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/mapper/TagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | tag_id, tag_name, tag_description 11 | 12 | 13 | tag 14 | 15 | 21 | 22 | 23 | delete from 24 | where tag_id = #{tagId,jdbcType=INTEGER} 25 | 26 | 27 | 28 | insert into 29 | (tag_name, tag_description) 30 | values (#{tagName,jdbcType=VARCHAR}, #{tagDescription,jdbcType=VARCHAR}) 31 | 32 | 33 | 34 | 35 | update 36 | 37 | 38 | tag_name = #{tagName,jdbcType=VARCHAR}, 39 | 40 | 41 | tag_description = #{tagDescription,jdbcType=VARCHAR} 42 | 43 | 44 | where tag_id = #{tagId,jdbcType=INTEGER} 45 | 46 | 47 | 48 | 53 | 54 | 55 | 58 | 59 | 60 | 68 | -------------------------------------------------------------------------------- /ForestBlog/src/main/resources/mybatis/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/editPwd.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 5 | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 6 | <%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %> 7 | 8 | 9 | - 编辑用户 10 | 11 | 12 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 首页 32 | 修改密码 33 | 34 |
35 |

36 |
38 | 39 |
40 | 41 |
42 | 44 |
45 |
46 |
47 | 48 | 49 |
50 |
51 | 52 | 53 |
54 |
55 |
56 | 57 | 58 |
59 | 60 | 65 | 66 | 67 | 68 | <%@ include file="../Public/framework.jsp" %> 69 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/articleFile.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 5 | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 6 | <%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 文章归档--${options.optionSiteTitle} 18 | 19 | 20 | 21 | <%--面包屑导航 start--%> 22 | 31 | <%--面包屑导航 end--%> 32 | 33 | 34 | 35 | <%--博客主体-左侧正文 start--%> 36 |
37 |
38 | 48 |
49 |
50 |
51 | 52 | 53 | <%--侧边栏 start--%> 54 | 55 | <%@include file="../Public/part/sidebar-3.jsp" %> 56 | 57 | <%--侧边栏 end--%> 58 | <%@ include file="../Public/framework.jsp" %> -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/page.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 5 | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 6 | <%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %> 7 | 8 | 9 | <%--面包屑导航 start--%> 10 | 21 | <%--面包屑导航 end--%> 22 | 23 | 24 | 25 | <%--博客主体-左侧文章正文 start--%> 26 |
27 |
28 |
29 |
30 |

31 | ${page.pageTitle} 32 |

33 |
34 |
35 |
36 | ${page.pageContent} 37 |
38 | 39 |

40 | 41 |
42 | 50 |
    51 |
  • A+
  • 52 |
53 |
54 |
日期: 56 |
57 |
58 |
59 | 60 | 61 |
62 |
63 |
64 | 65 | 66 |
67 | 68 |
69 | <%--博客主体-左侧文章正文end--%> 70 |
71 | <%--侧边栏 start--%> 72 | 73 | <%@include file="../Public/part/sidebar-3.jsp" %> 74 | 75 | <%--侧边栏 end--%> 76 | 77 | <%@ include file="../Public/framework.jsp" %> -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/framework.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 5 | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 6 | <%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | ${options.optionSiteTitle}-${options.optionSiteDescrption} 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 41 | <%@ include file="part/header.jsp" %> 42 |
43 | 44 | 45 | <%@ include file="part/sidebar-1.jsp" %> 46 | 47 |
48 |
49 | 50 | <%@ include file="part/footer.jsp" %> 51 | 52 |
53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/footer.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 博客页脚部分 3 | 包括:页脚部分 4 | --%> 5 | <%@ page language="java" contentType="text/html; charset=UTF-8" 6 | pageEncoding="UTF-8" %> 7 | 8 | <%--页脚 start--%> 9 | 21 | 22 | <%--页脚 end--%> 23 | 24 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/sidebar-3.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 一般用于正文侧边栏: 3 | 包括 搜索,热评文章,所有标签,随机文章 等小工具 4 | --%> 5 | 6 | <%@ page language="java" contentType="text/html; charset=UTF-8" 7 | pageEncoding="UTF-8" %> 8 | <%--博客主体-右侧侧边栏 start--%> 9 | 47 | <%--博客主体-右侧侧边栏 end--%> -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/loginBg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/loginBg.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/logo.png -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_0.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_1.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_10.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_11.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_12.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_13.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_14.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_2.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_3.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_4.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_5.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_6.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_7.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_8.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/img/thumbnail/random/img_9.jpg -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.eot -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/font/iconfont.woff -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/0.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/1.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/10.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/11.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/12.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/13.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/14.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/15.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/16.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/17.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/18.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/19.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/2.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/20.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/21.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/22.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/23.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/24.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/25.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/26.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/27.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/28.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/29.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/3.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/30.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/31.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/32.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/33.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/34.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/35.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/36.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/37.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/38.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/39.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/4.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/40.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/41.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/42.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/43.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/44.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/45.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/46.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/47.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/48.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/49.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/5.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/50.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/51.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/52.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/53.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/54.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/55.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/56.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/57.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/58.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/59.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/6.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/60.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/61.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/62.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/63.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/64.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/65.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/66.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/67.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/68.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/69.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/7.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/70.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/71.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/8.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/images/face/9.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
    '),s=o(["
  • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return r.check?''+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
  • "].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('
    '));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,t={fixbar:function(e){var t,a,i="layui-fixbar",l="layui-fixbar-top",r=o(document),c=o("body");e=o.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var n=[e.bar1,e.bar2,""],u=o(['
      ',e.bar1?'
    • '+n[0]+"
    • ":"",e.bar2?'
    • '+n[1]+"
    • ":"",'
    • '+n[2]+"
    • ","
    "].join("")),s=u.find("."+l),b=function(){var o=r.scrollTop();o>=e.showHeight?t||(s.show(),t=1):t&&(s.hide(),t=0)};o("."+i)[0]||("object"==typeof e.css&&u.css(e.css),c.append(u),b(),u.find("li").on("click",function(){var t=o(this),a=t.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,a)}),r.on("scroll",function(){clearTimeout(a),a=setTimeout(function(){b()},100)}))},countdown:function(e,o,t){var a=this,i="function"==typeof o,l=new Date(e).getTime(),r=new Date(!o||i?(new Date).getTime():o).getTime(),c=l-r,n=[Math.floor(c/864e5),Math.floor(c/36e5)%24,Math.floor(c/6e4)%60,Math.floor(c/1e3)%60];i&&(t=o);var u=setTimeout(function(){a.countdown(e,r+1e3,t)},1e3);return t&&t(c>0?n:[0,0,0,0],o,u),c<=0&&clearTimeout(u),u},timeAgo:function(e,o){var t=(new Date).getTime()-new Date(e).getTime();return t>2592e6?(t=new Date(e).toLocaleString(),o&&(t=t.replace(/\s[\S]+$/g,"")),t):t>=864e5?(t/1e3/60/60/24|0)+"天前":t>=36e5?(t/1e3/60/60|0)+"小时前":t>=18e4?(t/1e3/60|0)+"分钟前":t<0?"未来":"刚刚"}};e("util",t)}); -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/icon-ext.png -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/icon.png -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-0.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-1.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/main/webapp/resource/assets/plugin/layui/skin/default/loading-2.gif -------------------------------------------------------------------------------- /ForestBlog/src/main/webapp/resource/assets/plugin/login/l10n.min.css: -------------------------------------------------------------------------------- 1 | .locale-he-il em,.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-left:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:0}} -------------------------------------------------------------------------------- /ForestBlog/src/test/geckodriver.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/ForestBlog/src/test/geckodriver.exe -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeArticleFunction.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeArticleFunction { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | public String waitForWindow(int timeout) { 35 | try { 36 | Thread.sleep(timeout); 37 | } catch (InterruptedException e) { 38 | e.printStackTrace(); 39 | } 40 | Set whNow = driver.getWindowHandles(); 41 | Set whThen = (Set) vars.get("window_handles"); 42 | if (whNow.size() > whThen.size()) { 43 | whNow.removeAll(whThen); 44 | } 45 | return whNow.iterator().next(); 46 | } 47 | @Test 48 | public void testHomeArticleFunction() throws Exception { 49 | driver.get("http://localhost:8080/"); 50 | driver.manage().window().setSize(new Dimension(1550, 838)); 51 | vars.put("window_handles", driver.getWindowHandles()); 52 | driver.findElement(By.linkText("数据库")).click(); 53 | vars.put("win378", waitForWindow(2000)); 54 | driver.switchTo().window(vars.get("win378").toString()); 55 | driver.findElement(By.linkText("MySQL常用命令语句")).click(); 56 | driver.findElement(By.cssSelector("li:nth-child(1) .font-text")).click(); 57 | driver.findElement(By.linkText("阅读全文")).click(); 58 | driver.findElement(By.cssSelector(".tag-link-129:nth-child(1)")).click(); 59 | driver.findElement(By.linkText("Java中ImageIcon路径问题")).click(); 60 | driver.findElement(By.cssSelector(".favorite")).click(); 61 | } 62 | 63 | public static void main(String args[]){ 64 | String url="http://localhost:8080/"; 65 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 66 | HomeArticleFunction test=new HomeArticleFunction(); 67 | try { 68 | test.setUp(); 69 | test.testHomeArticleFunction(); 70 | test.tearDown(); 71 | }catch(Exception e){ 72 | e.printStackTrace(); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeLinkFunction.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeLinkFunction { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | public String waitForWindow(int timeout) { 35 | try { 36 | Thread.sleep(timeout); 37 | } catch (InterruptedException e) { 38 | e.printStackTrace(); 39 | } 40 | Set whNow = driver.getWindowHandles(); 41 | Set whThen = (Set) vars.get("window_handles"); 42 | if (whNow.size() > whThen.size()) { 43 | whNow.removeAll(whThen); 44 | } 45 | return whNow.iterator().next(); 46 | } 47 | @Test 48 | public void testHomeLinkFunction() throws Exception{ 49 | driver.get("http://localhost:8080/"); 50 | driver.manage().window().setSize(new Dimension(1550, 838)); 51 | driver.findElement(By.cssSelector(".menu-item:nth-child(2) .font-text")).click(); 52 | driver.findElement(By.name("linkName")).click(); 53 | driver.findElement(By.name("linkName")).click(); 54 | driver.findElement(By.cssSelector(".layui-btn")).click(); 55 | driver.findElement(By.name("linkName")).sendKeys("百度"); 56 | driver.findElement(By.cssSelector(".layui-btn")).click(); 57 | driver.findElement(By.name("linkUrl")).click(); 58 | driver.findElement(By.name("linkUrl")).sendKeys("https://www.baidu.com/"); 59 | driver.findElement(By.cssSelector(".layui-btn")).click(); 60 | driver.findElement(By.name("linkDescription")).sendKeys("百度一下,你就知道"); 61 | driver.findElement(By.cssSelector(".layui-btn")).click(); 62 | } 63 | 64 | public static void main(String args[]){ 65 | String url="http://localhost:8080/"; 66 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 67 | HomeLinkFunction test=new HomeLinkFunction(); 68 | try { 69 | test.setUp(); 70 | test.testHomeLinkFunction(); 71 | test.tearDown(); 72 | }catch(Exception e){ 73 | e.printStackTrace(); 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeLinkFunction1.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeLinkFunction1 { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | @Test 35 | public void testHomeLinkFunction1() { 36 | driver.get("http://localhost:8080/"); 37 | driver.manage().window().setSize(new Dimension(1550, 838)); 38 | driver.findElement(By.cssSelector(".menu-item:nth-child(2) .font-text")).click(); 39 | driver.findElement(By.name("linkName")).click(); 40 | driver.findElement(By.cssSelector(".layui-btn")).click(); 41 | driver.findElement(By.name("linkName")).sendKeys("百度"); 42 | driver.findElement(By.cssSelector(".layui-btn")).click(); 43 | driver.findElement(By.name("linkUrl")).sendKeys("https://www.baidu.com/"); 44 | driver.findElement(By.cssSelector(".layui-btn")).click(); 45 | driver.findElement(By.name("linkDescription")).sendKeys("百度一下"); 46 | driver.findElement(By.cssSelector(".layui-btn")).click(); 47 | } 48 | 49 | public static void main(String args[]){ 50 | String url="http://localhost:8080/"; 51 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 52 | HomeLinkFunction1 test=new HomeLinkFunction1(); 53 | try { 54 | test.setUp(); 55 | test.testHomeLinkFunction1(); 56 | test.tearDown(); 57 | }catch(Exception e){ 58 | e.printStackTrace(); 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeLinkFunction2.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeLinkFunction2 { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | public String waitForWindow(int timeout) { 35 | try { 36 | Thread.sleep(timeout); 37 | } catch (InterruptedException e) { 38 | e.printStackTrace(); 39 | } 40 | Set whNow = driver.getWindowHandles(); 41 | Set whThen = (Set) vars.get("window_handles"); 42 | if (whNow.size() > whThen.size()) { 43 | whNow.removeAll(whThen); 44 | } 45 | return whNow.iterator().next(); 46 | } 47 | @Test 48 | public void testHomeLinkFunction2() { 49 | driver.get("http://localhost:8080/"); 50 | driver.manage().window().setSize(new Dimension(1550, 838)); 51 | vars.put("window_handles", driver.getWindowHandles()); 52 | driver.findElement(By.linkText("百度")).click(); 53 | vars.put("win7282", waitForWindow(2000)); 54 | driver.switchTo().window(vars.get("win7282").toString()); 55 | } 56 | 57 | public static void main(String args[]){ 58 | String url="http://localhost:8080/"; 59 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 60 | HomeLinkFunction2 test=new HomeLinkFunction2(); 61 | try { 62 | test.setUp(); 63 | test.testHomeLinkFunction2(); 64 | test.tearDown(); 65 | }catch(Exception e){ 66 | e.printStackTrace(); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeMenuAndSidebarFunction.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeMenuAndSidebarFunction { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | @Test 35 | public void testHomeAndSidebarFunction() throws Exception{ 36 | driver.get("http://localhost:8080/"); 37 | driver.manage().window().setSize(new Dimension(1550, 838)); 38 | driver.findElement(By.cssSelector(".menu-item:nth-child(3) .font-text")).click(); 39 | driver.findElement(By.linkText("测试个人博客系统")).click(); 40 | driver.findElement(By.cssSelector(".menu-item:nth-child(4) .font-text")).click(); 41 | driver.findElement(By.linkText("MySQL常用命令语句")).click(); 42 | driver.findElement(By.cssSelector(".tag-link-129:nth-child(1)")).click(); 43 | driver.findElement(By.linkText("Java中File类的使用")).click(); 44 | } 45 | 46 | public static void main(String args[]){ 47 | String url="http://localhost:8080/"; 48 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 49 | HomeMenuAndSidebarFunction test=new HomeMenuAndSidebarFunction(); 50 | try { 51 | test.setUp(); 52 | test.testHomeAndSidebarFunction(); 53 | test.tearDown(); 54 | }catch(Exception e){ 55 | e.printStackTrace(); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /ForestBlog/src/test/home/HomeNoticeFunction.java: -------------------------------------------------------------------------------- 1 | // Generated by Selenium IDE 2 | import org.junit.Test; 3 | import org.junit.Before; 4 | import org.junit.After; 5 | import static org.junit.Assert.*; 6 | import static org.hamcrest.CoreMatchers.is; 7 | import static org.hamcrest.core.IsNot.not; 8 | import org.openqa.selenium.By; 9 | import org.openqa.selenium.WebDriver; 10 | import org.openqa.selenium.firefox.FirefoxDriver; 11 | import org.openqa.selenium.Dimension; 12 | import org.openqa.selenium.WebElement; 13 | import org.openqa.selenium.interactions.Actions; 14 | import org.openqa.selenium.support.ui.ExpectedConditions; 15 | import org.openqa.selenium.support.ui.WebDriverWait; 16 | import org.openqa.selenium.JavascriptExecutor; 17 | import org.openqa.selenium.Alert; 18 | import org.openqa.selenium.Keys; 19 | import java.util.*; 20 | public class HomeNoticeFunction { 21 | private WebDriver driver; 22 | private Map vars; 23 | JavascriptExecutor js; 24 | @Before 25 | public void setUp() { 26 | driver = new FirefoxDriver(); 27 | js = (JavascriptExecutor) driver; 28 | vars = new HashMap(); 29 | } 30 | @After 31 | public void tearDown() { 32 | driver.quit(); 33 | } 34 | @Test 35 | public void testHomeNoticeFunction() throws Exception { 36 | driver.get("http://localhost:8080/"); 37 | driver.manage().window().setSize(new Dimension(776, 692)); 38 | driver.findElement(By.linkText("这是一个公告测试")).click(); 39 | } 40 | 41 | public static void main(String args[]){ 42 | String url="http://localhost:8080/"; 43 | System.setProperty("webdriver.gecko.driver", "src\\test\\geckodriver.exe"); 44 | HomeNoticeFunction test=new HomeNoticeFunction(); 45 | try { 46 | test.setUp(); 47 | test.testHomeNoticeFunction(); 48 | test.tearDown(); 49 | }catch(Exception e){ 50 | e.printStackTrace(); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 YuhsiHu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /image/automatedTest.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/automatedTest.gif -------------------------------------------------------------------------------- /image/uploads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/uploads.png -------------------------------------------------------------------------------- /image/warexploded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/warexploded.png -------------------------------------------------------------------------------- /image/修改文件上传地址.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/修改文件上传地址.png -------------------------------------------------------------------------------- /image/前台文章评论区.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/前台文章评论区.png -------------------------------------------------------------------------------- /image/前台查看文章.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/前台查看文章.png -------------------------------------------------------------------------------- /image/前台首页.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/前台首页.jpg -------------------------------------------------------------------------------- /image/后台修改密码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台修改密码.png -------------------------------------------------------------------------------- /image/后台修改用户信息.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台修改用户信息.png -------------------------------------------------------------------------------- /image/后台写文章.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台写文章.png -------------------------------------------------------------------------------- /image/后台增加站点描述.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台增加站点描述.png -------------------------------------------------------------------------------- /image/后台增加菜单.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台增加菜单.png -------------------------------------------------------------------------------- /image/后台控制台.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台控制台.png -------------------------------------------------------------------------------- /image/后台查找文章.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查找文章.png -------------------------------------------------------------------------------- /image/后台查看全部公告.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部公告.png -------------------------------------------------------------------------------- /image/后台查看全部分类.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部分类.png -------------------------------------------------------------------------------- /image/后台查看全部文章.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部文章.png -------------------------------------------------------------------------------- /image/后台查看全部标签.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部标签.png -------------------------------------------------------------------------------- /image/后台查看全部链接.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部链接.png -------------------------------------------------------------------------------- /image/后台查看全部页面.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看全部页面.png -------------------------------------------------------------------------------- /image/后台查看评论.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台查看评论.png -------------------------------------------------------------------------------- /image/后台添加公告.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台添加公告.png -------------------------------------------------------------------------------- /image/后台添加链接.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台添加链接.png -------------------------------------------------------------------------------- /image/后台添加页面.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台添加页面.png -------------------------------------------------------------------------------- /image/后台登录.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台登录.png -------------------------------------------------------------------------------- /image/后台设置博主信息.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/image/后台设置博主信息.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007153621950.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007153621950.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007153648208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007153648208.png -------------------------------------------------------------------------------- /uploads/2019/10/2019100715402014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/2019100715402014.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007154127663.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007154127663.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007154222212.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007154222212.jpg -------------------------------------------------------------------------------- /uploads/2019/10/20191007154459334.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007154459334.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155038568.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155038568.png -------------------------------------------------------------------------------- /uploads/2019/10/2019100715505630.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/2019100715505630.png -------------------------------------------------------------------------------- /uploads/2019/10/2019100715512437.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/2019100715512437.jpg -------------------------------------------------------------------------------- /uploads/2019/10/20191007155135604.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155135604.jpg -------------------------------------------------------------------------------- /uploads/2019/10/20191007155334244.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155334244.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155349805.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155349805.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155410485.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155410485.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155450773.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155450773.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155545742.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155545742.png -------------------------------------------------------------------------------- /uploads/2019/10/20191007155723341.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191007155723341.png -------------------------------------------------------------------------------- /uploads/2019/10/2019100717420134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/2019100717420134.png -------------------------------------------------------------------------------- /uploads/2019/10/2019101011593518.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/2019101011593518.jpg -------------------------------------------------------------------------------- /uploads/2019/10/20191010115953489.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/10/20191010115953489.jpg -------------------------------------------------------------------------------- /uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(1).jpg -------------------------------------------------------------------------------- /uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(2).jpg -------------------------------------------------------------------------------- /uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(3).jpg -------------------------------------------------------------------------------- /uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e(4).jpg -------------------------------------------------------------------------------- /uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/2017032401571903086bdd06210e07c5f73a9254856c5e.jpg -------------------------------------------------------------------------------- /uploads/2019/8/p(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/p(1).jpg -------------------------------------------------------------------------------- /uploads/2019/8/p.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/p.jpg -------------------------------------------------------------------------------- /uploads/2019/8/z(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/z(1).jpg -------------------------------------------------------------------------------- /uploads/2019/8/z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/z.jpg -------------------------------------------------------------------------------- /uploads/2019/8/收款码(1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/收款码(1).png -------------------------------------------------------------------------------- /uploads/2019/8/收款码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/8/收款码.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914130133732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914130133732.png -------------------------------------------------------------------------------- /uploads/2019/9/2019091413023799.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/2019091413023799.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914174541164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914174541164.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914174706560.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914174706560.png -------------------------------------------------------------------------------- /uploads/2019/9/2019091417532789.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/2019091417532789.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914175516362.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914175516362.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914201500472.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914201500472.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914201536198.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914201536198.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914201951167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914201951167.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914202218330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914202218330.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914204049762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914204049762.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914204100691.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914204100691.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914204511611.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914204511611.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914225927794.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914225927794.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914230625582.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914230625582.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914230825367.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914230825367.png -------------------------------------------------------------------------------- /uploads/2019/9/20190914231507937.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190914231507937.png -------------------------------------------------------------------------------- /uploads/2019/9/20190915090929630.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190915090929630.png -------------------------------------------------------------------------------- /uploads/2019/9/20190915091612635.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190915091612635.png -------------------------------------------------------------------------------- /uploads/2019/9/20190915093359554.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190915093359554.png -------------------------------------------------------------------------------- /uploads/2019/9/20190915150118238.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190915150118238.gif -------------------------------------------------------------------------------- /uploads/2019/9/20190918094706198.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190918094706198.jpg -------------------------------------------------------------------------------- /uploads/2019/9/20190918095247277.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190918095247277.jpg -------------------------------------------------------------------------------- /uploads/2019/9/20190918095622101.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190918095622101.jpg -------------------------------------------------------------------------------- /uploads/2019/9/20190918105355884.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190918105355884.jpg -------------------------------------------------------------------------------- /uploads/2019/9/20190918110117226.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190918110117226.jpg -------------------------------------------------------------------------------- /uploads/2019/9/20190919213840682.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190919213840682.png -------------------------------------------------------------------------------- /uploads/2019/9/20190920210412778.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190920210412778.png -------------------------------------------------------------------------------- /uploads/2019/9/20190922143841757.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/20190922143841757.png -------------------------------------------------------------------------------- /uploads/2019/9/2019092308193347.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/2019/9/2019092308193347.jpg -------------------------------------------------------------------------------- /uploads/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/admin.png -------------------------------------------------------------------------------- /uploads/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/home.png -------------------------------------------------------------------------------- /uploads/tomcat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/tomcat.png -------------------------------------------------------------------------------- /uploads/tomcat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuhsiHu/SSM-Blog/f44319c48d3762e993429978b89633119d06af17/uploads/tomcat2.png --------------------------------------------------------------------------------