java cms 在线安装原理及详细步骤

2019-03-26 13:00|来源: 领悟书生

现在开源的web项目都带有自动安装的功能,它的原理就是把项目的web.xml等配置文件放在一个目录下(install/config),新创建一个web.xml来进行安装,包括项目的配置信息、数据库的相关配置(jdbc.properties)及初始化数据、然后再把配置文件及web.xml拷贝到相应的目录。项目如下图:


1.把项目的配置文件放在一个目录下
我这里有web.xml和springmvc的配置文件(study-servlet.xml)这两个配置文件,把他先放在install/config目录下


2.创建一个新的web.xml文件,引导安装

web.xml的代码如下:

<servlet>
    <servlet-name>Install</servlet-name>
    <servlet-class>com.naxsu.cms.InstallServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Install</servlet-name>
    <url-pattern>/install/install_setup.svl</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>install.html</welcome-file>
</welcome-file-list>


3.创建install.html
这个html文件,会自动跳到install/index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache,must-revalidate"/>
<meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT"/> 
<meta http-equiv="expires" content="0"/>
<meta http-equiv="refresh" content="0;URL=install/index.html"/>
<title>CMS安装</title>
</head>
<body>
    您还没有安装JEECMS,将自动跳转到安装页面。<br/>
    如果您的浏览器长时间没有反应,请直接点击<a href="install/index.html">CMS安装</a>。
</body>
</html>


4.创建许可协议html文件:install/index.html

主要代码如下:

<form id="license_form" action="install_params.jsp" method="post">
    <input type="checkbox" id="license_agree" name="license_agree"/>
    我已经阅读并同意此协议
    <input type="button" class="btn" value="下一步 >"/>
</form>


5.许可协议后,进入install_params.jsp,配置一些参数信息


这里的代码比较简单,就是input表单,给一些默认值就可以了


域名、部署路径和端口号这里是获取的默认值,代码如下:

域名:<input name="domain" type="text" class="input" value="<%=request.getServerName()%>"/>
部署路径:<input name="cxtPath" type="text" class="input" value="<%=request.getContextPath()%>"/>
端口号:<input name="port" type="text" class="input" value="<%=request.getServerPort()%>"/>

一定要注意一下,要把数据库和初始化数据库的文件路径给传过去
<input type="hidden" name="dbFileName" value="/install/db/db.sql"/>
<input type="hidden" name="initFileName" value="/install/db/init.sql"/>


6.提交表单,进行安装InstallServlet.java

在这里就直接贴代码了,代码很简单:

package com.naxsu.cms;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class InstallServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doPost(HttpServletRequest request,
    HttpServletResponse response) throws            
        ServletException, IOException {
     
        String dbHost = request.getParameter("dbHost");
    String dbPort = request.getParameter("dbPort");
    String dbName = request.getParameter("dbName");
    String dbUser = request.getParameter("dbUser");
    String dbPassword = request.getParameter("dbPassword");
 
    String isCreateDb = request.getParameter("isCreateDb");
    String isCreateTable = request.getParameter("isCreateTable");
    String isInitData = request.getParameter("isInitData");
    String domain = request.getParameter("domain");
    String cxtPath = request.getParameter("cxtPath");
    String port = request.getParameter("port");
 
    String dbFileName = request.getParameter("dbFileName");
    String initFileName = request.getParameter("initFileName");
    String dbXmlFileName = "/WEB-INF/config/jdbc.properties";
    String webXmlFrom = "/install/config/web.xml";
    String webXmlTo = "/WEB-INF/web.xml";
         
    try {
        // 创建数据库
        if ("true".equals(isCreateDb)) {
            Install.createDb(dbHost, dbPort, dbName, dbUser, dbPassword);
        } else {
            Install.changeDbCharset(dbHost, dbPort, dbName, dbUser,dbPassword);
        }
        // 创建表
        if ("true".equals(isCreateTable)) {
            String sqlPath = getServletContext().getRealPath(dbFileName);
            List<String> sqlList = Install.readSql(sqlPath);
            Install.createTable(dbHost, dbPort, dbName, dbUser, dbPassword,sqlList);
        }
        // 初始化数据
        if ("true".equals(isInitData)) {
            String initPath = getServletContext().getRealPath(initFileName);
            List<String> initList = Install.readSql(initPath);
            Install.createTable(dbHost, dbPort, dbName, dbUser, dbPassword,initList);
        }
        // 处理数据库配置文件
        String dbXmlPath = getServletContext().getRealPath(dbXmlFileName);
        Install.dbXml(dbXmlPath, dbHost, dbPort, dbName, dbUser,dbPassword);
        // 处理web.xml
        String webXmlFromPath = getServletContext().getRealPath(webXmlFrom);
        String webXmlToPath = getServletContext().getRealPath(webXmlTo);
        Install.webXml(webXmlFromPath, webXmlToPath);
    } catch (Exception e) {
        throw new ServletException("install failed!", e);
    }
    RequestDispatcher dispatcher = request
        .getRequestDispatcher("/install/install_setup.jsp");
    dispatcher.forward(request, response);
    }
}

Install.java

package com.naxsu.cms;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
 
/**
 * 安装类
 */
public class Install {
    public static void dbXml(String fileName, String dbHost, String dbPort,
        String dbName, String dbUser, String dbPassword) throws Exception {
        String s = FileUtils.readFileToString(new File(fileName));
        s = StringUtils.replace(s, "DB_HOST", dbHost);
        s = StringUtils.replace(s, "DB_PORT", dbPort);
        s = StringUtils.replace(s, "DB_NAME", dbName);
        s = StringUtils.replace(s, "DB_USER", dbUser);
        s = StringUtils.replace(s, "DB_PASSWORD", dbPassword);
        FileUtils.writeStringToFile(new File(fileName), s);
    }
 
    public static Connection getConn(String dbHost, String dbPort,
        String dbName, String dbUser, String dbPassword) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
     
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String connStr = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" 
            + dbName+ "?user=" + dbUser + "&password=" + dbPassword
            + "&characterEncoding=utf8";
        Connection conn = DriverManager.getConnection(connStr);
        return conn;
    }
 
    public static void webXml(String fromFile, String toFile) throws Exception {
        FileUtils.copyFile(new File(fromFile), new File(toFile));
    }
 
    /**
     * 创建数据库
     * 
     * @param dbHost
     * @param dbName
     * @param dbPort
     * @param dbUser
     * @param dbPassword
     * @throws Exception
     */
    public static void createDb(String dbHost, String dbPort, String dbName,
        String dbUser, String dbPassword) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String connStr = "jdbc:mysql://" + dbHost + ":" + dbPort + "?user="
            + dbUser + "&password=" + dbPassword
            + "&characterEncoding=UTF8";
        Connection conn = DriverManager.getConnection(connStr);
        Statement stat = conn.createStatement();
        String sql = "drop database if exists " + dbName;
        stat.execute(sql);
        sql = "create database " + dbName + " CHARACTER SET UTF8";
        stat.execute(sql);
        stat.close();
        conn.close();
    }
 
    public static void changeDbCharset(String dbHost, String dbPort,
        String dbName, String dbUser, String dbPassword) throws Exception {
        Connection conn = getConn(dbHost, dbPort, dbName, dbUser, dbPassword);
        Statement stat = conn.createStatement();
        String sql = "ALTER DATABASE " + dbName + " CHARACTER SET UTF8";
        stat.execute(sql);
        stat.close();
        conn.close();
    }
 
    /**
     * 创建表
     * 
     * @param dbHost
     * @param dbName
     * @param dbPort
     * @param dbUser
     * @param dbPassword
     * @param sqlList
     * @throws Exception
     */
    public static void createTable(String dbHost, String dbPort, String dbName,
        String dbUser, String dbPassword, List<String> sqlList)
        throws Exception {
        Connection conn = getConn(dbHost, dbPort, dbName, dbUser, dbPassword);
        Statement stat = conn.createStatement();
        for (String dllsql : sqlList) {
            System.out.println(dllsql);
            stat.execute(dllsql);
        }
        stat.close();
        conn.close();
    }
 
    /**
     * 读取sql语句。“/*”开头为注释,“;”为sql结束。
     * 
     * @param fileName
     *            sql文件地址
     * @return list of sql
     * @throws Exception
     */
    public static List<String> readSql(String fileName) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(
            new FileInputStream(fileName), "UTF-8"));
        List<String> sqlList = new ArrayList<String>();
        StringBuilder sqlSb = new StringBuilder();
        String s = null;
        while ((s = br.readLine()) != null) {
            if (s.startsWith("/*") || s.startsWith("#")
                || StringUtils.isBlank(s)) {
                continue;
            }
            if (s.endsWith(";")) {
                sqlSb.append(s);
                sqlSb.setLength(sqlSb.length() - 1);
                sqlList.add(sqlSb.toString());
                sqlSb.setLength(0);
            } else {
                sqlSb.append(s);
            }
        }
        br.close();
        return sqlList;
    }
}


7.安装成功



本文链接:java cms 在线安装原理及详细步骤,转载请注明出处

相关问答

更多
  • 直接双击安装就可以了,装完以后配置系统环境变量,选中"我的电脑"右击后选属性-->>高级-->>环境变量新建环境变量,Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。 JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\X ...
  • 安装JDK....然后配置JDK1.6的系统环境.....你下载一个“JDK1.6”..记得你要配置JDK1.6的系统环境 配置环境:首先右键点我的电脑。打开属性。然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量里需要设置三个属性“java_home”、“path”、“classpath”,其中在没安装过jdk的环境下,path属性是本来存在的。而java_home和classpath是不存在的。 首先点“新建”,然后在变量名写上java_home,顾名其意该变量的含义就是java的安装路径, ...
  • java cms[2022-03-04]

    CMS是什么? CMS是Content Management System的缩写,意位“内容管理系统”。内容管理系统是一种位于Web前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。 内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”还包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到互联网中的信息。 一个内容管理系统通常有几个要素:文档模板、脚本语言或标记语言、与数据库集成。内容的包含物右内嵌入页面的特殊标记控制。这些标记对 ...
  • 确实是这样,每次留言后自动生成一次html,留言一般都有分页,所以自动生成,并不浪费什么性能。
  • cms的Java版本目前有一些比较成熟的开源系统,比如jeecms,可以上网去找找看. 但相比而言,dedecms可能会更成熟更稳定一些.不过是PHP的.^____^
  • 如果不管是哪个CMS都出错的话,可能php,mysql的问题, 建议使用AMP套件, LAMP的话,ubuntu server不错,ubuntu linux集成了apache,mysql,php WAMP套件也不少,appserv很好,XAMPP,easyphp貌似也不错, 我用的是appserv(php+apache+mysql+phpmyadmin) + windows xp 安装discuz,phpbb,phpwind,mediawiki都没出错, 或者是你自己的操作问题, appserv官方站点 h ...
  • 你的MySQL配置似乎没问题。 您必须记住,最重要的是所有配置都需要在repository.xml文件中正确。 一旦第一次初始化存储库,就会从repository.xml文件中生成/提取workspace.xml 。 因此,如果您在为MySQL设置正确之前部署了Hippo,则可能在目录中有一个旧的workspace.xml,这会导致使用H2数据库。 您链接到的第一篇文章包含一个名为“使存储库使用此配置文件”的部分。 如果您想使用自己的配置而不是利用H2数据库的内置配置,这一点非常重要。 如果您不提供此系统属 ...
  • 首先,我可以断言,这是一个完全合理的问题,因为CMS Web技术的重要性,它运行着WWW的很大一部分,并且被许多Java感知的人正确地询问,因为所有的许多(仍然受欢迎)基于PHP的系统,如Drupal,Wordpress和Joomla,包括: 无法很好地与图形统一建模语言(UML)工程集成 大量使用自由泳字符串作为哈希数组键(而不是作为系统范围的共享预定义字符串常量),将数据结构作为难以置信的惯例,以hashmaps的形式进行掩埋,并将所有的“Don” t重复自己(DRY)原则,而不是使用面向对象的可重用封 ...
  • http://prismic.io是一个CMS SaaS / PaaS后端,可以很好地集成到Play中。 你是什么意思Play不支持freemarker? Play可以使用任何可以在Java中使用的模板引擎,使用Play中的freemarker是微不足道的。 http://prismic.io is a CMS SaaS/PaaS backend that integrates into Play nicely. What do you mean Play doesn't support freemarke ...
  • 好吧,让我们来详细了解一下。 首先我会注意到,所有时间似乎都是用户,而不是sys,所以主要的嫌疑人是JVM和应用程序。 GC是在旧版本触发的。 容量为12582912K的8617524K的占用率。 堆使用总量为17105967K,大小为23907584K。 初始标记大约需要5秒。 3519696.386: [GC [1 CMS-initial-mark: 8617524K(12582912K)] 17105967K(23907584K), 4.9369140 secs] [Times: user=4.94 ...