一、任务简介:

  开发简单的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. jQuery_02之元素操作及事件绑定

    1.操作元素之属性: ①attr读:$("selector").attr("属性名"):=>getAttribute("属性名"):改 ...

  2. rabbitMQ第四篇:远程调用

    前言:前面我们讲解的都是本地服务器,现在如果需要远程计算机上运行一个函数,等待结果.这就是一个不同的故事了,这种模式通常被称为远程过程调用或者RPC. 本章教程我们使用RabbitMQ搭建一个RPC系 ...

  3. Form的enctype="multipart/form-data"作用

    <form class="form-horizontal" role="form" method="post" action=&quo ...

  4. 被废了的display:box弹性盒模型

    这几天在研究弹性布局,看书中写的是display:box,结果在chrome浏览器中是正常的,想着移动端大部分浏览器也是webkit内核的应该也没啥问题,结果确实没问题,但仔细一看,高度呢?好吧,严重 ...

  5. JS之模板技术(aui / artTemplate)

    artTemplate是个好东西啊,一个开源的js前端模板引擎,使用简单,渲染效率特别的高. 我经常使用这个技术来在前端动态生成新闻列表,排行榜,历史记录等需要在前端列表显示的信息. 下面是artTe ...

  6. mongodb简介与增删该查

    一.简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 将数据存储为一个文档,数据 ...

  7. Android 软件开发之如何使用Eclipse Debug调试程序详解及Eclipse常用快捷键(转)

    1.在程序中添加一个断点如果所示:在Eclipse中添加了一个程序断点 在Eclipse中一共有三种添加断点的方法 第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将 ...

  8. Android反编译(二)之反编译XML资源文件

    Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具  apktool http ...

  9. Linux下通过源码编译安装程序

    本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...

  10. 也来玩玩 javascript对象深拷贝,浅拷贝

    经常看到讨论c#深拷贝,浅拷贝的博客,最近js写的比较多, 所以也来玩玩js的对象拷贝. 下面是维基百科对深浅拷贝的解释: 浅拷贝 One method of copying an object is ...