CMS

一、任务简介:

  开发简单的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="1";  //密码    


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 = 0; i < objs.length; i++) {
        stat.setObject(i+1, 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 = 0; 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[1024];
              int data;
              String temp="";
              while((data=reader.read(chars))!=-1){
                  //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="1">
            <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有很大的帮助。   

原文地址:https://www.cnblogs.com/yejiaojiao/p/5468321.html