CMS(content manage system)内容管理系统(第一天)

本文详细介绍了CMS内容管理系统,包括SSI技术、后端环境搭建(使用MongoDB数据库)、Java操作MongoDB以及接口定义。讲解了如何创建站点、模板、页面,以及后端的数据库连接、权限管理和接口实现流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容管理系统

学成在线项目的定义:对各个站点页面的管理,主要管理由于运营而需要经常变动的页面(收费广告轮播图),从而实现根据运营需要快速进行页面开发、上线的需要。

前端静态页面是需要放入NGINX中的,需要在nginx.conf中配置server
SSI包含技术就在这个配置文件中ssi on

#页面预览
upstream cms_server_pool{
    server  127.0.0.1:31001 weight=10;
}

server {
        listen       80;
        #autoindex   on;
        #在windows开发环境下  有可能会访问的时候是403拒绝(会有目录访问权限)
        server_name  www.xuecheng.com;
        ssi on;   
        #nginx 开启SSI包含技术
        ssi_silent_errors   on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #门户
        location / {
            #root   html;
            #如果是一个目录  最后一定要加/  否则到时候访问会出现404的问题
            alias   D:/staticPage/xc-ui-pc-static-portal/;
            index  index.html index.htm;
            #allow all;
        }   
        #页面预览
        location /cms/preview/ {
            proxy_pass  http://cms_server_pool/cms/preview/;
        }
}

配置域名访问地址 C:\Windows\System32\drivers\etc\hosts文件

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
127.0.0.1  www.xuecheng.com

SSI 技术 server side include

定义 :服务器端嵌入

原理 :在页面还没有到达浏览器的时候,通过一些指令,将多个也没面拼凑到一个页面中。

格式

 <!-- 页面头部 -->
    <!--#include virtual="/include/header.html"-->
   

在这里插入图片描述
在这里插入图片描述

CMS管理页面需求

  1. 流程

    • 创建站点(门户 学习中心 就是页面的归属)
    • 创建模板 (更加方便 也是的每个站点视觉效果更加整齐)
    • 创建页面 (填写页面的基本信息 页面名称 页面URL)
    • 页面浏览(页面发布前的一项工作 使用静态化技术 使用模板和数据,保证页面的正确性)
    • 页面发布 (使用计算机技术,将页面发送到所在站点的服务器)
  2. 本项目实现的功能

    1. 页面管理(管理员后天添加、修改、删除页面)
    2. 页面预览(管理员通过预览功能预览)
    3. 页面发布(管理员通过发布功能将页面发布到远程门户服务器)

后端环境搭建

在这里插入图片描述

父工程的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <groupId>com.xuecheng</groupId>
    <artifactId>xc-framework-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
        <tomcat.version>8.5.28</tomcat.version>
        <spring-boot.version>2.0.1.RELEASE</spring-boot.version>
        <springframework.version>5.0.5.RELEASE</springframework.version>
        <mybatis-spring-boot.version>1.3.1</mybatis-spring-boot.version>
        <mybatis.version>3.4.5</mybatis.version>
        <druid.version>1.1.6</druid.version>
        <mysql-connector-java.version>5.1.45</mysql-connector-java.version>


        <commons-io.version>2.6</commons-io.version>
        <org.apache.commons.io.version>1.3.2</org.apache.commons.io.version>
        <commons-fileupload.version>1.3.3</commons-fileupload.version>
        <commons-codec.version>1.10</commons-codec.version>
        <commons-lang3.version>3.6</commons-lang3.version>
        <okhttp.version>3.9.1</okhttp.version>
        <feign-okhttp.version>8.18.0</feign-okhttp.version>
        <lombok.version>1.16.16</lombok.version>
        <springfox-swagger.version>2.7.0</springfox-swagger.version>
        <fastjson.version>1.2.30</fastjson.version>
        <fastdfs-client-java.version>1.27.0.0</fastdfs-client-java.version>
        <mysql-connector-java.version>5.1.40</mysql-connector-java.version>
        <elasticsearch.version>6.2.1</elasticsearch.version>
        <guava.version>24.0-jre</guava.version>
    </properties>
    <!--test-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.netflix.feign</groupId>
                <artifactId>feign-okhttp</artifactId>
                <version>${feign-okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>${org.apache.commons.io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${springfox-swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${springfox-swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>net.oschina.zcx7878</groupId>
                <artifactId>fastdfs-client-java</artifactId>
                <version>${fastdfs-client-java.version}</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
           <!-- &lt;!&ndash; 资源文件拷贝插件 &ndash;&gt;
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>-->
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Mongodb 非关系型数据库(NoSQL)

SQL术语/概念Mongodb属于/概念解释/说明
databasedatabase数据库
tablecollection数据库表、集合
rowdocument数据记录行/文档
Columnfield数据字段/域
indexindex索引
table join不支持连接表连接
primary keyprimary key主键/MongoDB中自动添加一个主键ID
连接数据库的协议以及url格式

在这里插入图片描述

mongoDB的基本用法
操作语法
查询数据库show dbs
创建数据库user 任意名称
删除当前数据库db.dropDatabase()
创建集合(名字,参数)db.createCollection(name,option)
删除集合db.collection.drop()
操作语法
插入文档db.COLLECTION_NAME.insert(json格式数据)
更新文档db.COLLECTION_NAEM.update(查询条件json,更新全部内容json)
$set修改器修改db.COLLECTION_NAME.update({key:value},{$set:{key:value,key:value}},{multi:ture})
删除文档db.COLLECTION_NAME.remove({条件json})
查询全部文档db.COLLECTION_NAME.find()
条件查询db.COLLECTION_NAME.find({json格式条件})
投影查询db.COLLECTION_NAME.find({json条件},{“name”:1,_id:0})----显示name,不显示id

创建用户

  1. use admin
  2. db.createUser({
    user:“root”,
    pwd:“123”,
    roles:[{role:“root”,db:“admin”}]
    })

删除用户
db.dropUser("用户名”)

修改用户
db.updateUser(“用户名”,{[role:"readWriteAnyDatebase,db:“admin”]})

认证启动mongo.exe -u root -p 123 --authenticationDatabase admin

配置验证 mongo.conf
在文件中添加 auth=ture

使用java连接(导入依赖)

在这里插入图片描述
springboot 中使用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

Java测试MongoDB

在这里插入图片描述

根据需求定义接口

  1. 分页查询cms-page下的所有数据
  2. 根据站点ID、 模板ID、页面别名查询页面信息
  3. 接口基于HTTP get 请求,响应json数据在这里插入图片描述
  1. 在基础模块model 下的response 下写 @data 的类 最终的json数据在这里插入图片描述
  2. 在基础模块API西的 cms 下写 CmsPageControllerApi类
    (方法 findList(size ,curent))
  3. 接口返回类型 QueryResponseResult
{
	操作是否成功;-,
	操作代码:-,
	提示信息: -,
	lsit: 数据集合,
	总记录数

}

每一个微服务都是这个流程

接口实行

  1. 创建springboot工程 基于注解开发 继承父工程
    spring boot starter web 进行web开发
    spring boot starter free mark 模板页面
    spring boot starter data mogondb
    spring boot starter amqp 消息队列
    spring boot starter test 单元测试

  2. 补充包结构
    config
    controller
    service
    dao
    ManageCmsApplication.class(注解启动类,扫描所在包下所有注解)

@SpringBootApplication
@EntityScan("com.xuecheng.framework.domain.cms")//扫描实体类
@ComponentScan(basePackages={"com.xuecheng.cms.api"})//扫描接口
@ComponentScan(basePackages={"com.xuecheng.cms"})//扫描本项目下的所有类
public class ManageCmsApplication {
    public static void main(String[] args) {
        SpringApplication.run(ManageCmsApplication.class,args);
    }
}
  1. 配置文件
server:
  port: 31001
spring:
  application:
    name: xc-service-manage-cms
  data:
    mongodb:
      uri:  mongodb://root:123@localhost:27017
      database: xc_cms

控制层

@RestController
@RequestMapping("/cms/page")
public class CmsPageController implements CmsPageControllerApi {

    @Autowired
    PageService pageService;

    @Override
    @GetMapping("/list/{page}/{size}")
    public QueryResponseResult findList(@PathVariable("page") int page, @PathVariable("size")int size, QueryPageRequest queryPageRequest) {

//暂时用静态数据
        //定义queryResult
        QueryResult<CmsPage> queryResult =new QueryResult<>();
        List<CmsPage> list = new ArrayList<>();
        CmsPage cmsPage = new CmsPage();
        cmsPage.setPageName("测试页面");
        list.add(cmsPage);
        queryResult.setList(list);
        queryResult.setTotal(1);

        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS,queryResult);
        return queryResponseResult;*/
        //调用service
      // return pageService.findList(page,size,queryPageRequest);
    }

DAO层 定义一个接口 extends MongoRepository

public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
    //根据页面名称查询
    CmsPage findByPageName(String pageName);
    //根据页面名称、站点Id、页面webpath查询
    CmsPage findByPageNameAndSiteIdAndPageWebPath(String pageName,String siteId,String pageWebPath);
    int countBySiteIdAndPageType(String siteId,String pageType);
    //分页查询
    Page<CmsPage> findSiteIdAndPageType(String siteId,String pageType,Pageable pageable);
}

测试DAO test

@SpringBootTest
@RunWith(SpringRunner.class)
public class test {

    @Autowired
    CmsPageRepository cmsPageRepository;

    @Test
    public void testFindAll(){
        List<CmsPage> all = cmsPageRepository.findAll();
        System.out.println(all);

    }
      //分页查询
    @Test
    public void testFindPage(){
        //分页参数
       int size=10;
       int page=1;
        Pageable pageable = PageRequest.of(page, size);

        Page<CmsPage> all = cmsPageRepository.findAll(pageable);
        System.out.println(all);
    }
    }

service层

@Service
public class PageService {

    @Autowired
    CmsPageRepository cmsPageRepository;


    /**
     * 页面查询方法
     * @param page 页码,从1开始记数
     * @param size 每页记录数
     * @param queryPageRequest 查询条件
     * @return
     */
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest){
        if(queryPageRequest == null){
            queryPageRequest = new QueryPageRequest();
        }
        //自定义条件查询
        //定义条件匹配器
        ExampleMatcher exampleMatcher = ExampleMatcher.matching()
                .withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.contains());
        //条件值对象
        CmsPage cmsPage = new CmsPage();
        //设置条件值(站点id)
        if(StringUtils.isNotEmpty(queryPageRequest.getSiteId())){
            cmsPage.setSiteId(queryPageRequest.getSiteId());
        }
        //设置模板id作为查询条件
        if(StringUtils.isNotEmpty(queryPageRequest.getTemplateId())){
            cmsPage.setTemplateId(queryPageRequest.getTemplateId());
        }
        //设置页面别名作为查询条件
        if(StringUtils.isNotEmpty(queryPageRequest.getPageAliase())){
            cmsPage.setPageAliase(queryPageRequest.getPageAliase());
        }
        //定义条件对象Example
        Example<CmsPage> example = Example.of(cmsPage,exampleMatcher);
        //分页参数
        if(page <=0){
            page = 1;
        }
        page = page -1;
        if(size<=0){
            size = 10;
        }
        Pageable pageable = PageRequest.of(page,size);
        Page<CmsPage> all = cmsPageRepository.findAll(example,pageable);//实现自定义条件查询并且分页查询
        QueryResult queryResult = new QueryResult();
        queryResult.setList(all.getContent());//数据列表
        queryResult.setTotal(all.getTotalElements());//数据总记录数
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS,queryResult);
        return queryResponseResult;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值