基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创

看多了各种各样的新闻网站,总想着写一个属于自己的新闻网站,不需要多美观,够用就行。

系统已经开发完有一段时间,一直没时间写一篇文章,说明一下思路,现在写一点吧,希望可以帮助得到有需要的人。

首先先花个几个小时,把整体业务功能梳理一下(系统需要实现哪些功能),其次确定系统开发框架,再次根据业务功能初步确定表结构(实际开发过程中,需要根据具体实现修改表结构字段之类的),最后,页面开发接口对接。

业务梳理:

系统初步确定读者和管理员两个角色,读者可以查看新闻,可以对新闻进行点赞和评论和收藏。

读者可以升级为作者,作者可以发布新闻,发布之后,通过管理员审核,新闻就可以供读者查看了。

管理员,可以进行新闻分类管理、新闻管理、评论管理、公告管理、友情链接管理、系统用户管理(用户管理、读者申请作者管理)。

VIP功能,有一些新闻文章,需要VIP权限才可以查看。

另外还有一个比较重要的功能,考虑到管理员不可能一个个去新增新闻,为了提高效率,这里开发了一个新闻爬取的功能,这里使用jsoup去作页面爬取,为什么选他呢?比较方便和轻量级吧。方便主要体现在处理html文本标签数据上。

功能梳理差不多就完成了。

框架确定:

一直习惯了开发使用ssm框架,ssm是spring+springmvc+mybatis三个框架的整合,spring是一个容器框架,springmvc是一个mvc框架,负责处理前端请求和页面响应,mybatis是一个数据持久化框架,对数据进行增删改查。

表结构设计:

今日头条表结构
名称 表名 备注
用户表 xy_user 分为管理员和用户,用户又分为是否VIP
新闻类别 xy_type 比如国际新闻、社会新闻、经济新闻
新闻管理 xy_news 新闻管理,可以设置vip可读
读者申请作者表 xy_apply 读者申请作者,管理员进行审批
新闻评论表 xy_comment 读者新闻评论
读者收藏表 xy_favor 读者收藏新闻
读者点赞表 xy_praise 读者点赞表

友情链接表

xy_link

友情链接 

最后想了一下,在加个公告表吧,xy_notice,管理员发布公告啥的。

表机构基本就定型了,最后就是页面了。

页面设计:

前台页面:首页

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第1张图片

新闻列表:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第2张图片

新闻详情:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第3张图片

点赞收藏:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第4张图片

评论:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第5张图片

个人中心所有功能:右上角

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第6张图片

会员中心,申请VIP

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第7张图片

写手申请作者:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第8张图片

我的评论: 

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第9张图片

前台功能基本演示完成,下面是后台界面,列几个比较重要的吧。

新闻分类爬取:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第10张图片

新闻管理:

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第11张图片

用户管理:(包含用户管理和读者申请作者管理)

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第12张图片

基于spring+springmvc+mybatis(SSM)框架开发的今日头条新闻网站 - 原创_第13张图片

页面设计基本就这样了。

下面列出一部分新闻爬取的代码吧:

String source = type.getSpiderSource();
            //首先请求一次,新闻总页数
            String html = HttpClientUtils.get(source);
            Document document = Jsoup.parse(html);
            Elements elements = document.select("div#displaypagenum a");
            int size = elements.size();
            //最后一页
            Element lastPage = elements.get(size - 2);
            int totalPage = Integer.parseInt(lastPage.text());
            String pageUrl;
            for(int i = 1; i <= totalPage; i++){
                if(i == 1){
                    pageUrl = source;
                }else{
                    pageUrl = source.substring(0,source.lastIndexOf(".")) + "_" + i + ".htm";
                }
                Document newsDocument = Jsoup.parse(HttpClientUtils.get(pageUrl));
                Elements els = newsDocument.select("div.m-lists h3 a");
                if(els.size() > 0){
                    for(Element el : els){
                        try {
                            String newsLink = el.attr("href");
                            Document newInfoDocument = Jsoup.parse(HttpClientUtils.get(newsLink));
                            String newsTitle = newInfoDocument.select("h2[id=article_title]").text();
                            if(StringUtils.isEmpty(newsTitle)){
                                continue;
                            }
                            Element newContentDocument = newInfoDocument.select("div[id=content]").first();
                            //新闻html文本
                            String content = newContentDocument.html();
                            if(StringUtils.isEmpty(content)){
                                continue;
                            }
                            News news = new News();
                            news.setTitle(newsTitle);
                            String img = HtmlUtils.getImgURL(content);
                            //如果文章内容中不含图片,则从static/images目录下随机一张图片作为封面
                            if(StringUtils.isEmpty(img)){
                                Random random = new Random();
                                int num = random.nextInt(5);
                                img = "/static/images/cover_"+num+".jpg";
                            }
                            news.setCover(img);
                            news.setTypeId(type.getId());
                            news.setContent(content);
                            news.setContentTxt(newContentDocument.text());
                            news.setSource(1);
                            news.setComments(0);
                            news.setClicks(0);
                            news.setPraises(0);
                            news.setFavors(0);
                            news.setUserId(0);
                            news.setStatus(1);
                            news.setPower(0);
                            Date date = new Date();
                            news.setCreateTime(date);
                            news.setUpdateTime(date);
                            newsMapper.insert(news);
                        }catch (Exception e){
                            //继续爬取,不因报错而终止
                            continue;
                        }
                    }
                }
            }

整个系统基本就这样开发完成了,希望可以帮助到有需要的人,源码获取地址:

http://www.xiaoniucr.com/project/view/318.html

这个版本其实本人开发的最后一个升级版本,之前在还有一个没有带爬虫的版本,和一个没有读者和VIP的版本。

本系统由本人纯手工敲打完成,请勿盗版,最后欢迎大家一起交流。

你可能感兴趣的:(javaweb源码分享,ssm框架,java资源分享,jquery,爬虫,java,intellij,idea,mysql)