一、任务简介:

  开发简单的CMS。在数据库中创建新闻数据库表news,包含(题目、作者、日期、正文等字段);创建HTML模板文件;读取数据库所有数据的信息,并使用新闻信息

替换模板文件中的占位符,从而每一条新闻生成一个HTML静态页面。

二、具体分析步骤及其代码

1.客户关系系统

2.准备连接使用的变量  以及配置BaseDao

package cn.cms.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class BaseDao {
//将连接需要的信息都设置成该类的静态常量
//驱动字符串
public static final String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//url
public static final String url="jdbc:sqlserver://localhost:1433;DatabaseName=cms"; public static final String username="sa"; //用户名 public static final String password=""; //密码 Connection con;
PreparedStatement stat;
//01.获取连接对象的方法
public Connection getConnection() throws Exception{
//快乐星球
Class.forName(driver);
if(con==null||con.isClosed()){
con= DriverManager.getConnection(url,username,password);
}
return con;
} //02.对所有select语句执行的方法
public ResultSet executeQuery(String sql,Object...objs) throws Exception{
con=getConnection();
stat=con.prepareStatement(sql);
for (int i = ; i < objs.length; i++) {
stat.setObject(i+, objs[i]);
}
return stat.executeQuery();
}
}

3.形成entity

package cn.cms.entity;

public class News {
//ID, TITLE, AUTHOR, CREATETIME, CONTENT
private int ID;//新闻的ID
private String TITLE;//新闻标题
private String AUTHOR;//新闻的作者
private String CREATETIME;//时间
private String CONTENT;//新闻的内容 public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getTITLE() {
return TITLE;
}
public void setTITLE(String tITLE) {
TITLE = tITLE;
}
public String getAUTHOR() {
return AUTHOR;
}
public void setAUTHOR(String aUTHOR) {
AUTHOR = aUTHOR;
}
public String getCREATETIME() {
return CREATETIME;
}
public void setCREATETIME(String cREATETIME) {
CREATETIME = cREATETIME;
}
public String getCONTENT() {
return CONTENT;
}
public void setCONTENT(String cONTENT) {
CONTENT = cONTENT;
} }

4.由于DB端只有一张表News,所以需要在dao层创建一个INewsDao接口

package cn.cms.dao;

import java.util.List;

import cn.cms.entity.News;

public interface NewsDao {
//01.读取所有新闻列表的方法
public List<News> getAllNews() throws Exception; }

5.创建接口的实现类

package cn.cms.dao.impl;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; import org.junit.Test; import cn.cms.dao.BaseDao;
import cn.cms.dao.NewsDao;
import cn.cms.entity.News; public class NewsDaoSQLServerImpl extends BaseDao implements NewsDao {
//单测
@Test
public void testSelect() throws Exception{
List<News> list= getAllNews();
for (News news : list) {
//System.out.print(news.getNewsTilte());
//ID, TITLE, AUTHOR, CREATETIME, CONTENT
System.out.println(news.getTITLE());
System.out.println(news.getAUTHOR());
System.out.println(news.getCREATETIME());
System.out.println(news.getCONTENT());
}
} @Override
public List<News> getAllNews() throws Exception {
List<News> list=new ArrayList<News>();
String sql="select * from NEWS";
//读取器
ResultSet rs = executeQuery(sql);
if(rs!=null){
while(rs.next()){
//如果有数据,数据表中的每条记录对应实体类的一个实例
News news=new News();
//ID, TITLE, AUTHOR, CREATETIME, CONTENT
//news.setID(rs.getInt("ID"));
news.setTITLE(rs.getString("TITLE"));
news.setAUTHOR(rs.getString("AUTHOR"));
news.setCREATETIME(rs.getString("CREATETIME"));
news.setCONTENT(rs.getString("CONTENT"));
list.add(news);
}
}
return list;
} }

6.service中读取dao中的泛型数据

package cn.cms.manager;

import java.util.List;

import cn.cms.dao.NewsDao;
import cn.cms.dao.impl.NewsDaoSQLServerImpl;
import cn.cms.entity.News;
import cn.cms.util.FileIO; public class NewsManager {
public void toHtml() throws Exception{
//读取模板文件内容,返回文件内容的字符串
FileIO fileio=new FileIO();
String templaterstr = fileio.readFile("E:\\news\\news.template");
//读取数据库表,获取新闻列表
NewsDao newsdao=new NewsDaoSQLServerImpl();
List<News> newslist=newsdao.getAllNews();
//替换模板文件,为每一条新闻创建一个HTML文件显示其信息
for (int i = ; i < newslist.size(); i++) {
//获取一条新闻
News news=newslist.get(i);
//使用该条新闻信息替换对应的占位符
String replacestr=new String();
replacestr=templaterstr;
replacestr=replacestr.replace("{title}",news.getTITLE());
replacestr=replacestr.replace("{author}", news.getAUTHOR());
replacestr=replacestr.replace("{createtime}", news.getCREATETIME());
replacestr=replacestr.replace("{content}", news.getCONTENT());
//为该条新闻生成HTML文件
String filePath="E:\\news\\news"+i+".html";
fileio.writeFile(filePath,replacestr);
}
}
}

7.借助工具类读取和写入流

package cn.cms.util;

import java.io.FileReader;

import java.io.FileWriter;

public class FileIO {

        public String readFile(String filePath) throws Exception{
//用字符流读取文本文件 FileReader reader=new FileReader(filePath);
//准备缓冲区
char[] chars=new char[];
int data;
String temp="";
while((data=reader.read(chars))!=-){
//char[] -----------------> String
temp=new String(chars);
System.out.println(temp);
}
return temp;
}
public void writeFile(String filePath,String str) throws Exception{
//字节流的写入
FileWriter writer=new FileWriter(filePath,true);
String word=str;
writer.write(word);
writer.close();
System.out.println("ok!!!");
}
}

8.在准备一个测试类就好了

package cn.cms.test;

import cn.cms.manager.NewsManager;

public class Test {
public static void main(String[] args) throws Exception {
NewsManager num=new NewsManager();
num.toHtml();
} }

HTML的模板

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>{title}</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=gbk">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<table align="center" width="70%" border="">
<tr>
<td width="10%">
<b>标题:</b>
</td>
<td>
{title}
</td>
</tr>
<tr>
<td width="10%">
<b>作者:</b>
</td>
<td>
{author}
</td>
</tr>
<tr>
<td width="10%">
<b>时间:</b>
</td>
<td>
{createTime}
</td>
</tr>
<tr>
<td width="10%">
<b>内容:</b>
</td>
<td>
{content}
</td>
</tr>
</table>
</body>
</html>

总结:模板(template)和数据(Data)的隔离,以及重新整合,对学习

    和理解jsp有很大的帮助。

CMS的更多相关文章

  1. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  2. Kooboo CMS技术文档之五:站点配置管理

    站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...

  3. Kooboo CMS技术文档之二:Kooboo CMS的安装步骤

    在IIS上安装Kooboo CMS Kooboo CMS安装之后 安装的常见问题 1. 在IIS上安装Kooboo CMS Kooboo CMS部署到正式环境相当简单,安装过程是一个普通MVC站点在I ...

  4. Kooboo CMS技术文档之一:Kooboo CMS技术背景

    语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...

  5. Kooboo CMS技术文档之四:Kooboo CMS的站点组成部分

    Kooboo CMS本着功能独立分离的原则,将站点分为三部分组成:用户管理,站点管理和内容数据库管理.各个功能之间既可独立使用,也可以容易组成在一起形成一个完整的系统. 用户管理 管理整个系统内的用户 ...

  6. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  7. zerojs! 造出最好的 CMS 轮子

    zerojs是一个基于nodejs.angularjs.git的CMS.在它之上可以继续开发出博客.论坛.wiki等类似的内容管理型系统. 拥抱开发者和社区 层次清晰,高度解耦.前后端即使分开也都是完 ...

  8. 一个小型的CMS后台管理平台发布啦~

    由于我不太懂怎么把博客园里我上传的文件共享,所以只好先放到百度网盘里了 数据库和发布的网站都放在这里 http://pan.baidu.com/s/1eQw3DOA 有问题请参考以下链接: http: ...

  9. 织梦cms常用标签

    dedecms简介:织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内知名的PHP开源网站管理系统,也是使用用户较多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是 ...

  10. 小猪cms微信二次开发之怎样分页

    $db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...

随机推荐

  1. SQL SERVER 2005/2008 中关于架构的理解(一)

    SQL SERVER 2005/2008 中关于架构的理解(一) 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询, ...

  2. KnockoutJS 3.X API 第三章 计算监控属性(5) 参考手册

    计算监控属性构造参考 计算监控属性可使用以下形式进行构造: ko.computed( evaluator [, targetObject, options] ) - 这种形式是创建一个计算监控属性最常 ...

  3. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  4. 常用的java类型转json的转换类

    公司不准引入json-lib-2.x.jar所以只好自己写了一个基本类型的object转json的类,然后支持8种基本类型和javabean,list,map,array,使用putJSON方法,ke ...

  5. CAS原子锁 高效自旋无锁的正确用法

    "atomic_lock.h" #pragma once #ifndef _atomic_lock_h_include_ #define _atomic_lock_h_includ ...

  6. Windows Server 2012 R2 里面如何安装Net Framework 3.5

    图示 不要慌,和windows是不一样的,没有问题 下一步 默认即可,下一步 这里面的东西以后会装,先不管,我们今天目的是装 net framework 3.5 选一下 正在安装 如果出错了请参考: ...

  7. 【QQ技术】群文件报毒怎样下载?~ 变相绕过QQ复杂检验过程

    刚才又人问我,要是群文件被鉴定为病毒那怎么下载? 我简单说一下吧: 其实qq客户端过滤比较严的,而web段却还是老一套,很多人说出现这个情况其实是腾讯已经把他库里面的文件删了,其实不然 如果源删了,那 ...

  8. SQL Server 2014新特性——基数评估(白皮书阅读笔记)

    基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...

  9. andriod + @的区别

    Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后 ...

  10. OpenJudge1700:八皇后问题 //不属于基本法的基本玩意

    1700:八皇后问题//搜索 总时间限制:  10000ms 内存限制:  65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...