一、任务简介:

  开发简单的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. cordova添加platform

    cordova添加platform 一般需要指定版本的 cordova platform add android@4.1

  2. 手机页面的 HTML<meta> 标签使用与说明

    name="viewport" 设置窗口(网页可绘制的区域) width="device-width" 应用宽与屏幕的宽一样的 (height同width) i ...

  3. 引入CSS文件的@import与link的权重分析

    我很少在CSS用到@import这个标签,最近看到一句话“link方式的样式的权重 高于@import的权重”,感觉不太对,@import只是一个引入外部文件而已,怎么会有高于link的权重呢?于是我 ...

  4. 有jQuery背景,该如何用AngularJS编程思想?

    "我可以熟练使用jQuery进行客户端应用的开发,但是现在我希望开始使用Angular.js.哪位能描述一下这个过程中必要的模式变化吗?希望您的答案能够围绕下面这些具体的问题: 1. 我如何 ...

  5. js 获得radio的值

    var tmp = document.getElementsByName("foodtype"); for(var i=0; i<tmp.length; ++i) if(tm ...

  6. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder

    /* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...

  7. 研究 研究而已 java和.net的HashSet对比

    各位看官,,我不是在引发战争,,我只是想知道事情的真想,我源之于,一段代码我需要实现C#和java的两个版本功能,才发现这一个对比.讨论问题的实质,为什么会出现这样的问题.java和C#都很优秀.请大 ...

  8. linux中不小心将rpm命令卸载了,怎么恢复?

    今天在搭建mysql的集群服务时,安装mysql集群服务前,先卸载原来mysql的软件包,不小心将rpm的命令也给卸载掉了,这下惨了,什么也做不了了.在google了翻了好多个页面,甚至官网也看了,没 ...

  9. Android Studio快捷键每日一练(3)

    原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-3/ 23.启停用断点 苹果:Cmd+F8    Wi ...

  10. 用Qt写软件系列五:一个安全防护软件的制作(1)

    引言 又有许久没有更新了.Qt,我心爱的Qt,为了找工作不得不抛弃一段时间,业余时间来学一学了.本来计划要写一系列关于Qt组件美化的博文,但是写了几篇之后就没坚持下去了.技术上倒是问题不大,主要是时间 ...