基于仿360小说网站(校园网)的源码设计实现(升级版)

news/2024/5/10 12:41:09/文章来源:https://blog.csdn.net/zz_cl/article/details/88364762

基于博文仿360小说网站的源码设计实现对小说网站的源码更新升级(动漫小说网)。

网站PC电脑端效果截图:

APP手机端效果截图:

            

                    

数据库相关表设计:

主要包含小说id,章节id,类型ID,小说名称,章节名称,作者,缩略图,图片地址,是否推荐:1、是2,、否,小说排序,章节排序,更新时间,更新者,创建时间,创建者,状态:1、连载中,2、已完结,简介描述,按字母分类,是否隐藏:1、隐藏,2、显示,最新章节名称,最新章节id、序卷等等。

小说来源采用jsoup自动爬取。

主要html页面源码:

<% var headContent = { include("/template/novel/includes/header.html"){} }; 
      var bodyContent = { include("/template/novel/includes/header_menu.html"){} %>
<div id="mainContent" class="container">
    <div class="h6_style" style="padding: 0;">
        <ol class="breadcrumb pl-0" style="margin: 0px;">
            <li><a href="${BASE_PATH }home.html">首页</a></li>
            <li><a href="${BASE_PATH }novel/allnovel.html?type_id=${item.type_id }">${novelweb.getNovelType(item.type_id)}</a></li>
            <li class="active">${item.name }</li>
        </ol>
    </div>
    <div class="col-xs-4 col-md-2 pt-10 row">
        <figure class="mb-5 playd panel">
            <% if(!strutil.isEmpty(item.thumbnail)){ %>
            <img src="${BASE_PATH }file_manage/novel/novel_image/${item.thumbnail}"
                alt=""> <% } else { %>
            <img src="${BASE_PATH }static/images/novel/no_image.jpg" alt="">
            <% } %>
        </figure>
        <p class="h-20">${item.name}</p>
    </div>
    <div class="col-xs-8 col-md-10 pt-10">
        <div class="col-xs-12 col-sm-6 col-md-6 padding_0 mb-5 h-20">
            <span>类型:</span> <span>${novelweb.getNovelType(item.type_id)}</span>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 padding_0 mb-5 h-20">
            <span>总字数:</span> <span>${novelweb.formatWordCount(item.word_count)}</span>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 padding_0 mb-5 h-20">
            <span>作者:</span> <span>${item.author}</span>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 padding_0 mb-5 h-20">
            <span>状态:</span> <span>${novelweb.showNovelStatus(item.status)}</span>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 padding_0 mb-5 h-20">
            <span>最新章节:</span> <span><a class="font-blue" href="${BASE_PATH }novel/showchapter?nid=${item.id}&cid=${item.update_chapter_id}">${item.update_chapter_name}</a></span>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 padding_0 mb-5 m_none">
            <div class="panel panel-default">
                    <span>简介:${javaweb.showHTML2(item.remark!'',500,'......')}
                    <br />
                        ${item.name}由Sky动漫小说网收集整理,是${novelweb.getNovelType(item.type_id)}类的小说,是一部不错的作品哦!
                    </span>
            </div>
        </div>
    </div>
    <div class="col-xs-12 col-md-12 padding03 pc_none">
        <div class="panel panel-default">
                    <span id="remarkto">简介:${strutil.subStringTo(item.remark,
                        0, 75)}</span> <span> <a
                        data-toggle="collapse" data-parent="#accordion"
                        id="collapseThreeA" href="#collapseThree" class="color-green">
                            展开<i class="fa fa-caret-down" aria-hidden="true"></i>
                    </a>
                    </span>
                <div id="collapseThree" class="panel-collapse collapse">
                    <span class="">简介:${item.remark} <br />
                        ${item.name}由Sky动漫小说小说网收集整理,是${novelweb.getNovelType(item.type_id)}类的小说,是一部不错的作品哦!
                    </span>
                </div>
            </div>
    </div>
    <div class="col-xs-12 padding03 row">
        <div class="tags" id="">
            <ul>
                <%    for(entry in map){ var key = entry.key,value = entry.value; %>
                    <li class="col-xs-12 font-blue h4 mb-10"><h4 class="widget-title h-title">${entry.value[0].vol}</h4></li>
                    <% for (item2 in value){ %>
                        <li class="col-md-3 col-xs-12 col-sm-4 pr-0">
                            <a href="${BASE_PATH }novel/showchapter.html?cid=${item2.id}&nid=${item.id}" class="badge badge2">${item2.name}</a>
                        </li>
                    <% } } %>
            </ul>
        </div>
    </div>
    <div id="playdiv" class="col-xs-12 padding03 row-rl-10">
        <h4 class="h-title mb-20 ml-7">更多推荐</h4>
        <% for(item in novels){ %>
        <div class="col-md-2 col-xs-4 pb-5 padding0 lazyimg mimg">
            <figure class="mb-10 playd panel">
                <% if(!strutil.isEmpty(item.thumbnail)){ %>
                <a href="${BASE_PATH }novel/${item.id}.html" target="_blank"
                    title="${item.name}">
                <img
                    data-original="${BASE_PATH }file_manage/novel/novel_image/${item.thumbnail}"
                    alt="${item.name}"> <% } else { %>
                <img data-original="${BASE_PATH }static/images/novel/no_image.jpg"
                    alt="${item.name}"> <% } %>
                </a>
            </figure>
            <p class="h-25">
                <a href="${BASE_PATH }novel/${item.id}.html" target="_blank">${item.name}</a>
            </p>
        </div>
        <% } %>
    </div>

</div>
<% include("/template/novel/includes/footer.html"){} %>
<div id="backTop" class="back-top is-hidden-sm-down">
    <i class="fa fa-angle-up" aria-hidden="true"></i>
</div>
<script type="text/javascript">
    $(function() {
        $('#collapseThree')
                .on(
                        'show.bs.collapse',
                        function() {
                            $('#remarkto').hide();
                            $('#collapseThreeA')
                                    .html(
                                            "收起<i class='fa fa-caret-up' aria-hidden='true'></i>");
                        })

        $('#collapseThree')
                .on(
                        'hide.bs.collapse',
                        function() {
                            $('#collapseThreeA')
                                    .html(
                                            "展开<i class='fa fa-caret-down' aria-hidden='true'></i>");
                            $('#remarkto').show();
                        })

    });
</script>

<% }; layout("/pages/template/_layout.html",{head:headContent,body:bodyContent}){} %>

相关java代码:

        String novel_img_Path = "***";
        File novelUploadPath = new File(novel_img_Path);
        if (!novelUploadPath.exists()) {
            novelUploadPath.mkdirs();
        }
        DataLog dataLog = DataLog.dao
                .findFirst("select max(id) as cnt from data_log");
        int log_maxid = (int) (dataLog.get("cnt") == null ? 0 : dataLog
                .get("cnt"));
        String logsource = "";
        int lognovel_cnt_add = 0;
        int lognovel_cnt_update = 0;
        int logchapter_cnt = 0;
        Document docNovel = null;
        int id = n_id;// 小说id
        int cid = c_id;// 章节id
        String type_id = "";// 类型ID
        String name = "";// 小说名称
        String cname = "";// 章节名称
        String author = "";// 作者
        String thumbnail = "";// 缩略图
        String thumbnail_url = "";// 图片地址
        String is_recommend = "2";// 是否推荐:2 否 1 是
        String sort = "";// 小说排序
        String csort = "";// 章节排序
        String update_time = "";// 更新时间
        String update_id = "";// 更新者
        String create_time = "";// 创建时间
        String create_id = "";// 创建者
        String status = "2";// 状态//ra dio/2,连载中,1,已完结
        String remark = "";// 描述
        String zmtype = "";// 按字母分类
        String is_show = "1";// 是否隐藏//ra dio/2,隐藏,1,显示
        String novel_sql = "";// 小说sql
        String chapter_sql = "";// 章节sql
        String txtContent = "";// 章节内容
        String update_chapter_name = "";// 最新章节名称
        String update_chapter_id = "";// 最新章节id;

        sort = nhref.substring(nhref.lastIndexOf("=") + 1,
                            nhref.length());
                    Elements novel_detail = docNovel
                            .select("div#content table td table");
                    Element table1 = novel_detail.get(0);
                    name = table1.select("td table td").get(0).text();
                    type_id = table1.select("tr").get(2).select("td").get(0).text().replaceAll("文库分类:", "");
                    if (type_id.equals("电击文库")) {
                        type_id = "11";
                    }else if (type_id.equals("富士见文库")) {
                        type_id = "12";
                    }else if (type_id.equals("角川文库")) {
                        type_id = "13";
                    }else if (type_id.equals("MF文库J")) {
                        type_id = "14";
                    }else if (type_id.equals("Fami通文库")) {
                        type_id = "15";
                    }else if (type_id.equals("其他文库")) {
                        type_id = "16";
                    }
                    author = table1.select("tr").get(2).select("td").get(1).text().replaceAll("小说作者:", "");
                    status = table1.select("tr").get(2).select("td").get(2).text().replaceAll("文章状态:", "");
                    String word_count = table1.select("tr").get(2).select("td").get(3).text().replaceAll("全文长度:", "").replaceAll("字", "");
                    if (status.equals("已完成")) {
                        status = "1";
                    }else {
                        status = "2";
                    }
                    Element table2 = novel_detail.get(2);
                    thumbnail_url = table2.select("img").get(0).attr("src");
                    id++;
                    try {
                        URL url = new URL(thumbnail_url);
                        HttpURLConnection conn = (HttpURLConnection) url
                                .openConnection();
                        conn.setRequestProperty("User-Agent",
                                "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
                        conn.setRequestMethod("GET");
                        conn.setConnectTimeout(5 * 1000);
                        InputStream inStream = conn.getInputStream();
                        byte[] data = StrUtils.readInputStream(inStream);
                        thumbnail = id + "_no_.jpg";
                        File imageFile = new File(novel_img_Path
                                + thumbnail);
                        FileOutputStream outStream = new FileOutputStream(
                                imageFile);
                        outStream.write(data);
                        outStream.close();
                    } catch (FileNotFoundException e) {
                        thumbnail = "default.jpg";
                    }
                    remark = table2.select("tr td").get(1).text();
                    remark = remark.substring(remark.indexOf("内容简介:")+5, remark.indexOf("主要角色:"));
                    remark = NovelUtils.FilterStr(remark);
                    zmtype = ChinesePinYinTool
                            .hanziToPinyin(StrUtils.FilterStr(name))
                            .toUpperCase().charAt(0)
                            + "";

            log_maxid++;
            logsource = "新增小说成功。共新增" + lognovel_cnt_add + "部小说";
            logsource = logsource.replaceAll("'", "");
            Db.update("insert into data_log values (" + log_maxid
                    + ",'tb_novel','新增数据','" + logsource + "','"
                    + StrUtils.getNow() + "','1');\r\n");
            log_maxid++;
            logsource = "更新小说成功。共更新" + lognovel_cnt_update + "部小说";
            logsource = logsource.replaceAll("'", "");
            Db.update("insert into data_log values (" + log_maxid
                    + ",'tb_novel','更新数据','" + logsource + "','"
                    + StrUtils.getNow() + "','1');\r\n");
            log_maxid++;
            logsource = "新增章节成功。共新增" + logchapter_cnt + "个章节";
            logsource = logsource.replaceAll("'", "");
            Db.update("insert into data_log values (" + log_maxid
                    + ",'tb_novel_chapter','新增数据','" + logsource + "','"
                    + StrUtils.getNow() + "','1');\r\n");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_899869.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动漫网站源码设计与实现

已完成编写的Sky动漫网主页如下 PC电脑端效果截图&#xff1a; APP手机端效果截图&#xff1a; 数据库相关表设计如下&#xff1a; 主要有&#xff1a;动漫主体信息表、视频播放源表、文章资讯表、主题专辑表、经典语录表、图片图集表、评论表等等 信息采集使用jsoup爬取 各…

第二次作业------仿制网站

码云链接&#xff1a;https://gitee.com/eiumc123/12.git 百度云链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ej-JvlRfRYe8KzGje-ULOQ 提取码&#xff1a;fnmv &#xff08;文件中有视频&#xff0c;过大无法上传到码云&#xff0c;所以。。。&#xff09; <…

怎么在树莓派上搭建web网站,并发布到外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

如何为树莓派上的WordPress博客网站配置自己的域名,并且外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

如何在树莓派上搭建网站,并发布上线(1)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(2)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(3)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(4)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 3-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 4-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 5-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何为搭建的网站配置自己的域名 1-2

系列文章 如何为搭建的网站配置自己的域名 1-2如何为搭建的网站配置自己的域名 2-2cpolar内网穿透如何配置自定义域名访问 在之前的系列文章中&#xff0c;我们向大家介绍了如何在本地树莓派上搭建属于自己的网站&#xff0c;并让这个网站能被公众互联网的用户安全访问。虽然这…

如何为搭建的网站配置自己的域名 2-2

系列文章 如何为搭建的网站配置自己的域名 1-2如何为搭建的网站配置自己的域名 2-2cpolar内网穿透如何配置自定义域名访问 上一篇&#xff1a; 如何为搭建的网站配置自己的域名 1-2 在上一篇文章中&#xff0c;我们通过在服务器上设置新的域名&#xff0c;并将新域名的指向引导…

如何在Ubuntu上搭建WordPress网站,并公网可访问 1-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…

如何在Ubuntu上搭建WordPress网站,并公网可访问 2-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…

如何在Ubuntu上搭建WordPress网站,并公网可访问 3-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…

如何在Ubuntu上搭建WordPress网站,并公网可访问 4-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…

如何在Ubuntu上搭建WordPress网站,并公网可访问 5-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…

如何在Ubuntu上搭建WordPress网站,并公网可访问 6-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…