基于模版的内容网站开发

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 对于内容网站形成于上个世纪九十年代,Web1.0时代开发的网站大多数都是基于内容网站,比如新闻类。开发这类的网站可以采用ASP、JSP、PHP技术,但是基于这类开发出来的网站,内容都是在阅读的时候实时的从数据库中读取的,对于搜索引擎网站,比如百度、Google的排行榜上排名往往很低,只有做成静态的HTML,才可以被搜索引擎加大排名。本文以一个内容发布网站来介绍基于模版的内容网站开发。

   对于内容网站形成于上个世纪九十年代,Web1.0时代开发的网站大多数都是基于内容网站,比如新闻类。开发这类的网站可以采用ASP、JSP、PHP技术,但是基于这类开发出来的网站,内容都是在阅读的时候实时的从数据库中读取的,对于搜索引擎网站,比如百度、Google的排行榜上排名往往很低,只有做成静态的HTML,才可以被搜索引擎加大排名。本文以一个内容发布网站来介绍基于模版的内容网站开发。

1.建立数据库

代码语言:javascript

复制

create database sec;
use sec
create table paper(
   id INT NOT NULL AUTO_INCREMENT,
   title VARCHAR(200) NOT NULL,
   content TEXT NOT NULL,
   PRIMARY KEY (id)
)AUTO_INCREMENT = 71;

系统很简单,就两个字段title文章标题,content文章内容,由于系统改造,以前的文章不收入现有数据库,所以编号从71开始。

2.建立后台数据收集系统

用Tomcat + jsp开发

输入页面:index.html

代码语言:javascript

复制

<!DOCTYPE HTML>
<html>
<head>
<title>文件输入</title>
 <meta
http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<body>
<form action="index.jsp" method="post" >
<p>文件标题:<input type="text"
name="title" maxlength="200"></p>
<p>文件内容:<br><textarea
id="content" name="content" rows="30"
cols="100"></textarea></p>
<p><input type="submit" value="提交"></p>
</form>
</body>

将内容存储到数据库中

index.jsp

代码语言:javascript

复制

<%@ page contentType="text/html;charset=utf-8" %>
<%@ page language="java" %>
<%@ page import="java.sql.*"
%>
<%@ page
  import="com.jerry.MySQLAccess" %>
<%
//设置字体
request.setCharacterEncoding("UTF-8");
//获取标题
String title = request.getParameter("title");
//获取内容
String content = request.getParameter("content");
//建立MySQLAccess对象
MySQLAccess mysql = new MySQLAccess();
try {
  //建立数据库连接
  Connection conn = mysql.connect();
  //把插入内容放入字符串数组内
  String[] value = {title, content};
  //插入数据库
  mysql.insert(conn,value);
  //断开链接
  mysql.disconnect(conn);
} catch (SQLException e1) {
  e1.printStackTrace();
}
%>
<!DOCTYPE HTML>
<html>
<head>
<title>文件输入</title>
 <meta
http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<body>
 输入成功
</body>
</html>

3. Bean端开发

MySQLAccess对象通过Eclipse开发

pom.xml

代码语言:javascript

复制

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jerry</groupId>
<artifactId>MySQL</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
 <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>9.0.0</version>
 </dependency>
</dependencies>
</project>

版本用最新的9.0.0,由于下载速度很慢,可以通过浏览器从https://repo.maven.apache.org/maven2/下载,下载完毕放在.m2的相应目录下。

代码语言:javascript

复制

package com.jerry;
           
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
           
public class MySQLAccess {
       private static final String url = "jdbc:mysql://localhost:3306/sec";
       private static final String user = "root";
       private static final String password = "123456";
       private static Statement stmt = null;
       private static ResultSet rs;
    
        //建立链接
       public Connection connect() throws SQLException  {    
              try {
                  //新版本改为"com.mysql.cj.jdbc.Driver"
                  Class.forName("com.mysql.cj.jdbc.Driver"); 
                  Connection conn = DriverManager.getConnection(url, user, password);
                  stmt = conn.createStatement();
                  return conn;
              } catch (ClassNotFoundException e) {
                  System.out.println("JDBC 驱动未找到: " + e.getMessage());
              } catch (SQLException e) {
                  System.out.println("数据库连接失败: " + e.getMessage());
              }
                  return null;
              }
       
        //断开连接
       public void disconnect(Connection conn) {
              try {
                     if (rs != null) {
                            rs.close();
                     }
                     stmt.close();    
               conn.close();
              }catch (Exception e) {
            e.printStackTrace();
            }
       }
       
       //插入数据
       public boolean insert(Connection conn,String[] value) throws SQLException {
              String insertString = "INSERT INTO paper (title, content) VALUES (?, ?);";
              try { 
                   PreparedStatement pstmt= conn.prepareStatement(insertString);
                    // 设置参数
                    pstmt.setString(1, value[0]);
                    pstmt.setString(2, value[1]);           
                    // 执行插入操作
                    int affectedRows = pstmt.executeUpdate();
                    if (affectedRows == 1) {
                         return true;
                    }else {    
                         return false; 
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                  return false;
      }
       
        //查询数据
       public ResultSet query(String Query) throws SQLException {
              ResultSet rs = stmt.executeQuery(Query);
              return rs;
       }
       
       //打印查询数据
      public void print(ResultSet rs) throws SQLException {
              while (rs.next()) {
                  System.out.println(rs.getString("columnname"));
              }
       }
}

由于包名为com.jerry,在Tomcat使用,将MySQLAccess.class放在%TOMECAT_HOME%\webapps\sec\WEB-INF\classes\com\jerry目录下。

4.开发模版替换程序

准备模版文件:

 index_web.html:WEB首页,展示文件标题。

 index_phone.html:手机首页,展示文件标题。

 class_web.html:WEB首页,展示文件所有标题。

 class_ phone.html:手机首页,展示文件所有标题。

 content_ phone.html:WEB页,显示具体文件内容。

 content_web.html:WEB页,显示具体文件内容。

把这些文件放在项目主目录.\source\下

RepeatFile.java

代码语言:javascript

复制

package com.jerry;
           
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileWriter;
           
import java.sql.Connection;    
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
           
public class RepeatFile {
       private static FileInputStream fileInputStream = null;
       private static InputStreamReader inputStreamReader = null;
       
       //获取模版文件
       public BufferedReader getFile(String myFile) {
              try {
                     File file = new File(myFile);
                     fileInputStream = new FileInputStream(file);
                     inputStreamReader = new InputStreamReader(fileInputStream);
                     BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                     return bufferedReader;
              } catch (FileNotFoundException e) {
            System.out.println("文件未找到: " + e.getMessage());
              }
              return null;
       }    
       
       //读取模版文件
       public void readFile(BufferedReader bufferedReader) throws IOException {
              String line;
              while ((line = bufferedReader.readLine()) != null) {
                 System.out.println(line);
              }
       }
       //关闭模版文件
       public void closeFile(BufferedReader bufferedReader) throws IOException {
              bufferedReader.close();
              inputStreamReader.close();
              fileInputStream.close();
       }
           
        //替换HTML特殊字符,也为了防止XSS注入
       public String repleatHTML(String sourceString) {
              sourceString = sourceString.replaceAll("<", "<");
              sourceString = sourceString.replaceAll(">", ">");
              sourceString = sourceString.replaceAll(" ", " ");    
              sourceString = sourceString.replaceAll("\t", "    ");
              sourceString = sourceString.replaceAll("\n", "          ");
              sourceString = sourceString.replaceAll("\"", """);
              sourceString = sourceString.replaceAll("’", "'");
              return sourceString;
       }
           
       //替换文件
       public void reapeFile(BufferedReader bufferedReader,String File) throws IOException {
              //初始化变量
              //存储读取到的当前行
              String line;
              //标题替换后的字符串
              String replacement1 = "";
              //内容替换后的字符串
              String replacement2 = "";
              //建立MySQLAccess对象变量
              MySQLAccess mysql = new MySQLAccess();
              try {
                     //SQL查询语句    
                     String Query = "select id,title,content from paper";
                     //查询结果
                     ResultSet rs=mysql.query(Query);
                     //获得记录个数
                     ResultSetMetaData metaData = rs.getMetaData();
                     int number = metaData.getColumnCount();
                     //初始化将查询记录放入字符串数组
                     // id字符串数组
                      String[] id = new String[number];
                      //标题字符串数组
                      String[] title = new String[number];
                      //内容字符串数组
                      String[] content = new String[number];
                      int i = 0;
                     //替换后的目标文件
                      String destFile="";
                      //遍历查询记录
                     while (rs.next()) {
                            //将查询记录放入字符串数组内
                            id[i] = rs.getString("id");
                            title[i] = repleatHTML(rs.getString("title"));
                            content[i] = repleatHTML(rs.getString("content"));    
                            //根据模版文件名,选择目标文件名和替换内容                        
                            switch(File) {
                            case(".\\source\\index_web.html"):
                            {
                               destFile = ".\\web\\index.html";
                               replacement1 += "<a href=\"class/c"+id[i]+".html\"target=\"_blank\">《"+title[i]+"》</a>";
                               break;
                            }
                            case(".\\source\\index_phone.html"):
                            {
                               destFile = ".\\phone\\index.html";
                               replacement1 += "<a href=\"class/c"+id[i]+".html\">《"+title[i]+"》</a><br>";
                               break;
                            }
                            case(".\\source\\class_web.html"):
                            {
                               destFile = ".\\web\\class.html";
                               replacement1 += "<li><a href=\"../class/c"+id[i]+".html\" target=\"_blank\">《"+title[i]+"》;</a></li>";
                               break;
                            }
                            case(".\\source\\class_phone.html"):
                            {
                               destFile = ".\\phone\\class.html";
                               replacement1 += "<li><a href=\"class/c"+id[i]+".html\">《"+title[i]+"》</a></li>";
                               break;
                             }
                            case(".\\source\\content_web.html"):
                            {
                               destFile = ".\\web\\c"+id[i]+".html";
                               replacement1 = title[i];
                               replacement2 = content[i];
                               break;
                            }
                            case(".\\source\\content_phone.html"):
                            {
                               destFile = ".\\phone\\c"+id[i]+".html";
                               replacement1 = title[i];
                               replacement2 = content[i];
                                break;
                            }
                            default:System.out.print("源文件名不正确");
                            }
                            i++;
                     }
                     //替换结果文件放入result,进行叠加
                     String result="";
                    while ((line = bufferedReader.readLine()) != null) {        
                        //将当前读取行的最后加上回车
                        line = line+"\n";
                        //标题的替换标识符
                        String regex1 = "###1";
                        //内容的替换标识符
                        String regex2 = "###2";
                        //进行正则替换标题
                        line = line.replaceAll(regex1, replacement1);
                        //进行正则替换内容
                        result = result+line.replaceAll(regex2, replacement2);
                    }      
                    //将替换后的内容写入目标文件
                    //打开目标文件
                    try (FileWriter writer = new FileWriter(destFile)) {
                        //写入目标文件
                        writer.write(result);
                        //关闭目标文件
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                 } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
  
       //处理文件
       public void dealFile(String File) throws IOException {
          //获取模本文件的bufferedReader 
          BufferedReader bufferedReader= getFile(File);
          //获取模本文件
          getFile(File);
          //根据模本文件形成目标文件
          reapeFile(bufferedReader,File);
          //关闭模本文件
          closeFile(bufferedReader);
        }
       //主函数
       public static void main(String[] args) throws SQLException {
          try {
            //建立MySQLAccess对象变量
            MySQLAccess mysql = new MySQLAccess();
            //建立RepeatFile()对象变量
            RepeatFile rf = new RepeatFile();
            //建立数据库连接
            Connection conn = mysql.connect();
            //将要处理的模版文件名放在字符串数组内
            String[] Files= {"index_web.html","index_phone.html","class_web.html","class_phone.html","content_web.html","content_phone.html"};
            //遍历要处理的模版文件名的字符串数组
            for (int i = 0; i < Files.length; i++) {
                //统一加上目录
                String file = ".\\source\\"+Files[i];
                //处理文件
                rf.dealFile(file);
            }
            //断开链接
            mysql.disconnect(conn);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("生成成功");
    }
}

现在数据库中有两条数据

模版文件

某个模版文件中的替换标识

代码语言:javascript

复制

<li><a href="../class/c63.html"
target="_blank">《探索式软件测试》</a></li>
<li><a
href="../class/c66.html" target="_blank">《JMeter从入门到精通》</a></li>
<li><a
href="../class/c33.html" target="_blank">《APP软件专项测试》</a></li>
###1

形成的Web文件

形成的手机文件

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
前端开发
如何选择网站模版?网站模版建站优势。
本文介绍了为什么越来越多用户选择使用成熟的网站模版,而不是建站公司。推荐PageAdmin CMS网站模版,其界面友好、主题高质量且有品牌知名度。
64 25
|
8天前
|
运维 SEO
如何选择PageAdmin网站模版制作网站?
使用PageAdmin CMS网站模板,用户可以节省时间和成本、提升专业设计和布局、提供多样选择、自定义和响应式设计、SEO优化和技术支持。
|
1月前
|
搜索推荐 UED 索引
如何选择网站模版创建网站?
PageAdmin CMS作为老牌的网站模版开发厂商,拥有一个丰富的网站模版库,里面有各大行业的企业、有政府、有学校、有资讯类网站模版,为各大的用户提供选择的资源。
|
1月前
|
搜索推荐 大数据
如何选择网站模版建站系统创建网站?
网站模版网站建站系统快速搭建网站已经成为大家习惯性的建站方式,在发达的互联网时代,不管是企业、政务单位、学校还是个人团体,拥有一个有代表性的官网尤其重要。那么如何从无到有,从零基础开始设计和制作网站,需要借助一些网站模版和建站系统来完成。
|
1月前
|
移动开发 数据可视化 定位技术
免费网站模版下载如何选择免费网站模版?
免费模版拥有诸多优势,包括节省成本、缩短建站时间、降低技术门槛。PageAdmin网站模版包含丰富行业模版,符合H5响应式标准和SEO要求。该模版库拥有多个客户案例,口碑好,稳定更新支持。
|
1月前
|
SQL 缓存 安全
如何使用PageAdmin网站模版搭建网站?
PageAdmin是一套拥有开发十几年的网站管理系统,专门为客户提供快速搭建网站的CMS。本CMS提供几千套的网站模版给用户选择,广泛用于企业、政府、学校和各大资讯平台。提供信息发布、信息审批、会员管理、权限设置等功能集合。随着政策变动,PageAdmin除了能过等保外,新版本还支持国产化部署。数据库能用:SQL Server数据库、MYSQL数据库、达梦数据库、人大金仓数据库。服务器支持麒麟操作系统部署。各个网站模版采用响应式设计、缓存策略和安全防护等方面的实现细节,从而在实践中学习并提高 企业级应用开发能力。
|
1月前
|
SEO
如何使用免费网站模版搭建网站。
在互联网深入到各大网民时代,单位官网已经成为各大单位在互联网上的门牌,企业官网在互联网上能展示企业的品牌、产品、还有互动功能,甚至能增加单位在互联网上的营销效应,对于中小企业来说,传统的建站方式开发时间长,开发成本高,对比之下,免费网站模版成为了一种基础的建站方式。本文今天给大家介绍一下免费网站模版建站的步骤
|
3月前
|
前端开发 UED 开发者
如何选择适合的网站模版来制作网站?
选择合适的网站模板对于建站初学者来说是一项重要的任务。一个好的网站模板可以帮助你快速搭建出一个美观、功能完善的网站,提高用户体验和网站的流量。
|
小程序
12个游戏模版
这里是我制作的一些游戏模版,有些是完整的游戏项目,有些是示例 demo,它们或者可以帮助你学习某种类型的游戏制作,或者可以直接当做一个游戏原型来进行继续开发。
113 0
建网站怎么选合适的网站模版
建立网站怎么选合适的网站模板?相信各位新手站长一定在各种网站模版中纠结很久,近年来比较流行的网站模版基本上是PageAdminCMS、Wordpress、Discuz、ShopEx、emlog等,这些不同的网站模板各有侧重,下面就来介绍几个流行的网站模版。
7323 0