zoukankan      html  css  js  c++  java
  • 对静态配置变量持久化的一种解决方案

     

    以前的方式(getResourceAsStream)

    直接读取资源文件

    public class CreateVvvvid {

        public static Map<String, AtomicInteger> vvvvidCreateMap = new HashMap<String, AtomicInteger>();

        static {

            // 获取数据库配置文件

            java.util.Properties properties = PropertiesUtil.getProperties(

                    CreateVvvvid.class.getResourceAsStream("/config/database.properties"));

     

            int maxVvvvid = 0;

            Connection conn = null;

            

            try {

                /**

                 * 读取数据库连接参数

                 */

                String driverName = (String) properties.get("database.driverClassName");

                String url = (String) properties.get("database.url");

                String root = (String) properties.get("database.username");

                String pwd = (String) properties.get("database.password");

     

                /**

                 * 初始化数据库连接,获取当前vvvvid最大值

                 */

                Class.forName(driverName);

                conn = DriverManager.getConnection(url, root, pwd);

                Statement stat = conn.createStatement();

                String sql = "SELECT MAX(vvvvid) AS vvvvid FROM tt_user WHERE vvvvid Like '25%'";

                ResultSet rst = stat.executeQuery(sql);

                while (rst.next()) {

                    maxVvvvid = rst.getInt("vvvvid");

                }

                int max=0;

                // 如果找不到vvvvid则从0开始增涨

                if (0 != maxVvvvid) {

                    //如果非零则截取字符,初始化自增长类

                    String maxVvvvid1 = String.valueOf(maxVvvvid);

                    //等进一步完善????????

                    maxVvvvid1 = maxVvvvid1.substring(maxVvvvid1.indexOf('555 + 1);

                    max = Integer.parseInt(maxVvvvid1);

                }

                vvvvidCreateMap.put("1", new AtomicInteger(max+1));

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                //关闭连接

                try {

                    conn.close();

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

            }

        }

    }

     

    property文件读写工具

    public class PropertiesUtil {

    /**

    * 获取Properties对象(默认为utf-8字符编码)

    * @param filePath 件路径

    * @return

    */

    public static Properties getProperties(String filePath) {

    return getProperties(filePath, "utf-8");

    }

     

    /**

    * 获取Properties对象(默认为utf-8字符编码)

    * @author wei.luo

    * @param in 输入流

    * @return

    */

    public static Properties getProperties(InputStream in) {

            f(in == null){

                eturn null;

            

        // 定义properties对象

    Properties props = new Properties();

        // 加载properties文件

    try {

                props.load(new InputStreamReader(in,"utf-8"));

            } catch (IOException e) {

                e.printStackTrace();

            }

    return props;

    }

     

    /**

    * 获取Properties对象

    * @param filePath 件路径

    * @param encoding 符编码

    * @return

    */

    public static Properties getProperties(String filePath, String encoding) {

    // 定义properties对象

    Properties props = new Properties();

    try {

    // 判断文件是否存在,如果不存在则创建文件

    File file = new File(filePath);

    File dirFile = new File(file.getParent());

    if (!dirFile.exists()) {

    dirFile.mkdirs();

    }

    if (!file.exists()) {

    file.createNewFile();

    }

    Reader rd = new InputStreamReader(new FileInputStream(file),

    encoding);

    // 加载properties文件

    props.load(rd);

    rd.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    return props;

    }

    /**

    * 获取key对应的value 默认为utf-8

    * @param filePath

    * @param name

    * @return

    */

    public static String readValue(String filePath,String name){

    return readValue(filePath,"utf-8", name);

    }

    /**

    * 获取key对应的value

    * @param filePath

    * @param encoding

    * @param name

    * @return

    */

    public static String readValue(String filePath,String encoding,String name){

    Properties props=getProperties(filePath,encoding);

    return props.getProperty(name);

    }

     

    /**

    * 写资源文件(默认为utf-8编码)

    * @param filePath 文件路径

    * @param name 名称

    * @param value

    */

    public static void write(String filePath, String name, String value) {

    write(filePath, "utf-8", name, value);

    }

     

    /**

    * property文件

    * @param filePath 文件路径

    * @param encoding 文件编码

    * @param name 名称

    * @param value

    */

    public static void write(String filePath, String encoding, String name,

    String value) {

    try {

    Properties props = getProperties(filePath, encoding);

    props.setProperty(name, value);

    Writer osw = new OutputStreamWriter(new FileOutputStream(filePath),

    encoding);

    // 以适合使用load方法加载到Properties表中的格式,将此Properties表中的属性列表(键和元素对)写入输出流

    // props.store(fos, "Update '" + parameterName + "' value");

    props.store(osw, "");

    osw.close();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

     

    /**

    * 读取properties的全部信息

    * @param filePath

    */

    public static HashMap readAll(String filePath) {

    return readAll(filePath, "utf-8");

    }

     

    /**

    * 读取properties的全部信息

    * @param filePath 文件路径

    * @param encoding 字符编码

    */

    public static HashMap readAll(String filePath, String encoding) {

    HashMap map = new HashMap();

    Properties props = getProperties(filePath, encoding);

     

    // 获取所有的key,放入枚举类型中

    Enumeration en = props.propertyNames();

    // 遍历枚举,根据key取出value

    while (en.hasMoreElements()) {

    String key = (String) en.nextElement();

    String property = props.getProperty(key);

    // 将值放入key

    map.put(key, property);

    }

    return map;

    }

     

    public static void main(String[] args) {

    String filePath = "D://aaaa.properties";

    String name = "testaaaa";

    String parameterValue = "测试!!!";

    Object []obs={"ee","ff"};

     

    // write(filePath, name, parameterValue);

    System.out.println(MessageFormat.format (readValue(filePath,name), obs));

    }

    }

     

    应用单例的方式

    属性文件(pathConfig.properties)

    lis.interface = http://aaaaa.vvvv.com/lis

    listenok = true

    listlistenok = true

     

    property.path = WEB-INF/classes/config/properties/pathConfig.properties

    parent.path = E:/workspaces3/vvvv/WebRoot/files

    bak.parent.path = E:/workspaces3/vvvv/WebRoot/files

    upload.child.path = upload

    channel.pic.child.path = upload/old

    channel.newpic.child.path = upload/new

    channel.bigpic.child.path = upload/big

     

    music.pic.child.path = upload

     

    zip.child.path = zip

    zip.publish.child.path =freeListHtml

    music.down.pic.path =music/images

     

     

    properties文件的映射类(pathConfig.java)

    /**

    * @className:PathConfig.java

    * @classDescription:从属性文件中获取各种路径

    * @author:wei.luo

    * @createTime:2012-3-23

    */

    public class PathConfig {

     

        /**

         * 初始给properties文件的路径赋值

         */

        //public static String PROPFILE_PATH = "../webapps/ayyc/WEB-INF/classes/config/properties/pathConfig.properties";

        public static String PROPFILE_PATH = "WEB-INF/classes/config/properties/pathConfig.properties";

        /**

         * 存放pathConfig.properties中的属性

         */

        private Properties props=null;

        

        /**

         * 试听下载地址

         */

        public static String LIS_INTERFACE="http://aaaaa.vvvv.com/lis";

        

        /**

         * 默认试听服务器ok

         */

        public static String LISTENOK = "true" ;

        

        /**

         * 榜单列表页试听

         */

        public static String LISTLISTENOK = "true" ;    

        

        /**

         * 前端访问首页

         */

        public static String MOBILEINDEX="http://aaaaaaa. vvvv.com/mobile/index.html#a=gqxq" ;

        

        /**

         * 分离的文件的父目录的绝对地址

         */

        public static String PARENT_PATH=null;

        

        /**

         * 备份的分离的文件的父目录的绝对地址

         */

        public static String BAK_PARENT_PATH=null;

        

        /**

         * upload文件夹

         */

        public static String UPLOAD_CHILD_PATH="upload";

        

        /**

         * 频道内置图片的的存放路径

         */

        public static String CHANNEL_PIC_CHILD_PATH="upload/old";

        /**

         * 频道小图片的存放路径

         */

        public static String CHANNEL_NEWPIC_CHILD_PATH="upload/new";

        /**

         * 频道大图片的存放路径

         */

        public static String CHANNEL_BIGPIC_CHILD_PATH="upload/big";

        /**

         * 歌曲图片的存放路径

         */

        public static String MUSIC_PIC_CHILD_PATH="upload";

        /**

         * zip文件的存放路径

         */

        public static String ZIP_CHILD_PATH="zip";

        

        /**

         * zip文件的发布地址

         */

        public static String ZIP_PUBLISH_CHILD_PATH="freeListHtml";

        

        /**

         * 下载的music图片存放地址

         */

        public static String MUSIC_DOWN_PIC_PATH="music/images";

        

        /**

         * PathConfig对象

         */

        private static PathConfig pathconfig=null;

        

        /**

         * 把构造方法私有化

         * @param path    properties文件的物理路径

         */

        private PathConfig(String path){

            props=PropertiesUtil.getProperties(path, "utf-8");

            if(props!=null){

                setFileValue("PROPFILE_PATH","property.path");

                setFileValue("LISTENOK","listenok");

                setFileValue("LISTLISTENOK","listlistenok");

                setFileValue("MOBILEINDEX","mobileindex");

                setFileValue("LIS_INTERFACE","lis.interface");

                setFileValue("PARENT_PATH","parent.path");

                setFileValue("BAK_PARENT_PATH","bak.parent.path");

                setFileValue("UPLOAD_CHILD_PATH","upload.child.path");

                setFileValue("CHANNEL_PIC_CHILD_PATH","channel.pic.child.path");

                setFileValue("CHANNEL_NEWPIC_CHILD_PATH","channel.newpic.child.path");

                setFileValue("CHANNEL_BIGPIC_CHILD_PATH","channel.bigpic.child.path");

                setFileValue("MUSIC_PIC_CHILD_PATH","music.pic.child.path");

                setFileValue("ZIP_CHILD_PATH","zip.child.path");

                setFileValue("ZIP_PUBLISH_CHILD_PATH","zip.publish.child.path");

                setFileValue("MUSIC_DOWN_PIC_PATH","music.down.pic.path");

            }

        }

     

        /**

         * 给类的各个属性设值

         * @author wei.luo

         * @createTime 2012-3-31

         * @param fieldName 类属性名

         * @param namePath 路径的key

         */

        private void setFileValue(String fieldName,String namePath) {

            String property_path=props.getProperty(namePath);

            if(StringUtils.isNotBlank(property_path)){

                //fieldName=property_path;

                try {

                    Field field=PathConfig.class.getField(fieldName);

                    field.set(String.class, property_path);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        }

        

        /**

         * 从属性文件中读取keyvalue,初始化PathConfig

         * @author wei.luo

         * @createTime 2012-3-24

         * @param path properties文件的物理路径

         */

        public static synchronized void initPathConfig(String path){

            if(pathconfig==null){

                pathconfig = new PathConfig(path);

            }

        }

        /**

         * 销毁pathconfig对象

         * @author wei.luo

         * @createTime 2012-3-31

         */

        public static void destroy(){

            if(pathconfig!=null){

                pathconfig=null;

            }

        }

        

    }

     

    属性控制类(pathConfigController.java)

    /**

    * @className:PathConfigController.java

    * @classDescription:路径配置管理

    * @author:wei.luo

    * @createTime:2012-3-24下午09:19:32

    */

    @Controller

    @RequestMapping("/vvvv/pathConfig")

    public class PathConfigController extends BaseController{

        

        /**

         * 注入commonService

         */

        @Autowired

        private ICommonService commonService;

        

        /**

         * 显示配置属性列表

         * @author wei.luo

         * @createTime 2012-3-30

         * @param request request请求参数

         * @param response response请求参数

         * @param model 模型

         * @return 返回列表页面

         */

        @RequestMapping(value = "/list")

        public String list(HttpServletRequest request, HttpServletResponse response,Model model) {

            //销毁单例

            PathConfig.destroy();

            //初始化配置信息

            String propFilePath=this.getRealPath(request, PathConfig.PROPFILE_PATH);

            //初始化单例

            PathConfig.initPathConfig(propFilePath);

            Map<String, String> pathConfigMap = this.commonService.getFields2(PathConfig.class);

            Map<String,String> parentPathMap=new HashMap<String,String>();

            Map<String,String> childPathMap=new HashMap<String,String>();

            Map<String,String> otherConfigMap=new HashMap<String,String>();

            for(String key:pathConfigMap.keySet()){

                if(key.contains("PARENT")){

                    parentPathMap.put(key, pathConfigMap.get(key));

                }

                else if(key.contains("CHILD")){

                    childPathMap.put(key, pathConfigMap.get(key));

                }

                else{

                    otherConfigMap.put(key,pathConfigMap.get(key));

                }

            }

            model.addAttribute("parentPathMap", parentPathMap);

            model.addAttribute("childPathMap", childPathMap);

            model.addAttribute("otherConfigMap", otherConfigMap);

            //String currentPage = request.getRequestURI().toString();

            //request.getSession().setAttribute("currentPage", currentPage);

            return "manage/systemManage/listConfig.jsp";

        }

        

        /**

         * 编辑配置属性

         * @author wei.luo

         * @createTime 2012-3-30

         * @param request request请求参数

         * @param response response请求参数

         * @param model

         * @param config 配置

         * @return 返回列表页面

         */

        @RequestMapping(value="/edit")

        public String editPathConfig(HttpServletRequest request, HttpServletResponse response,

            Model model,String config/*,@PathVariable("config") String config*/) {

            Assert.notNull(config, "No config specified");

            if(StringUtils.isBlank(config) || request==null || response==null){

    //            String currentPage = (String) this.getSessionAttribute(request, "currentPage");

    //            this.sendRedirect(response, currentPage);

                return this.list(request,response,model);

            }

            config=StringUtils.substringBetween(config, "[", "]");

            String configKey = config.split("@")[0];

            String configValue = config.split("@")[1];

            model.addAttribute("configKey", configKey);

            model.addAttribute("configValue", configValue);

            return "manage/systemManage/editConfig.jsp";

        }

        

        /**

         * 跳到添加配置属性页

         * @author wei.luo

         * @createTime 2012-3-30

         * @param request request请求

         * @param response    response请求

         * @param model    模型

         * @return 跳转到添加页面

         */

        @RequestMapping(value="/toAdd")

        public String addPathConfig(HttpServletRequest request, HttpServletResponse response,Model model){

            return "manage/systemManage/addConfig.jsp";

        }

        

        /**

         * 添加配置

         * @author wei.luo

         * @createTime 2012-3-31

         * @param request    request请求参数

         * @param response    response 请求参数

         * @param model    模型

         * @param configKey    

         * @param configValue    

         * @return    返回列表页面

         */

        @RequestMapping(value = "/add")

        public String addConfig(HttpServletRequest request, HttpServletResponse response,

                Model model, String configKey,String configValue) {

    //        if(StringUtils.isNotBlank(configKey) && StringUtils.isNotBlank(configValue) && request!=null && response!=null){

    //            try {

    //                String propsPath=PathConfig.PROPFILE_PATH;

    //                PathConfig.destroy();

    //                PathConfig.initPathConfig(PathConfig.PROPFILE_PATH);

    //                //--动态创建静态属性-------

    //                

    //                

    //                PropertiesUtil.write(propsPath, configKey,configValue);

    //            }catch (Exception e) {

    //                e.printStackTrace();

    //            }

    //        }

            return this.list(request,response,model);

        }

          

          

        

        /**

         * 修改配置属性

         * 注意要添加对properties文件的修改

         * @author wei.luo

         * @createTime 2012-3-30

         * @param request    request请求参数

         * @param response    response请求参数

         * @param model     模型

         * @param configKey

         * @param configValue

         * @return 返回列表页面

         */

        @RequestMapping(value = "/alter")

        public String changePathConfig(HttpServletRequest request, HttpServletResponse response,

                Model model, String configKey,String configValue) {

            List<String> messageList = new ArrayList<String>();

            if(StringUtils.isNotBlank(configKey) && StringUtils.isNotBlank(configValue) && request!=null && response!=null){

                String oldConfigValue = this.commonService.getFieldValue(PathConfig.class, configKey);

                String inDir=oldConfigValue+"/";

                String outDir=configValue+"/";

                try {

                    if("PARENT_PATH".equals(configKey)){

                        FileUtil.copy(inDir, outDir);

                    }

                    else if(configKey.contains("CHILD_PATH")){

                        FileUtil.copy(PathConfig.PARENT_PATH+"/"+inDir,PathConfig.PARENT_PATH+"/"+outDir );

                    }

                } catch (Exception e) {

                    String message="拷贝"+inDir+"目录下文件到"+outDir+"目录下失败";

                    messageList.add(message);

                    e.printStackTrace();

                }

                //修改类中的static属性值

                this.commonService.changeFields(PathConfig.class, configKey,configValue);

                //修改properties文件中的属性值

                String propertyPath=this.getRealPath(request, PathConfig.PROPFILE_PATH);

                configKey=configKey.toLowerCase().replace("_", ".");

                PropertiesUtil.write(propertyPath, configKey, configValue);

                //重新销毁再加载

                PathConfig.destroy();

                PathConfig.initPathConfig(propertyPath);

                //request.getRequestDispatcher("manage/pathConfig/list.do").forward(request, response);

                

            }

            request.setAttribute("messageList", messageList);

            return this.list(request,response,model);

        }

        

        /**

         * 将路径切到tomcat容器

         * @author wei.luo

         * @createTime 2012-4-7

         * @param request    request请求

         * @param response    response请求

         * @param model    模型

         * @return 返回列表页

         */

        @RequestMapping(value = "/switch2tomcat")

        public String switch2tomcat(HttpServletRequest request, HttpServletResponse response,Model model){

            List<String> messageList = new ArrayList<String>();

            String parentKey = "PARENT_PATH";

            String bakParentKey = "BAK_PARENT_PATH";

            String oldConfigValue = this.commonService.getFieldValue(PathConfig.class, parentKey);

            String webRootPath=this.getRealPath(request, "");

            if(oldConfigValue.equals(webRootPath)){

                return this.list(request,response,model);

            }

            //更新配置类中的属性

            this.commonService.changeFields(PathConfig.class, bakParentKey,webRootPath);

            this.commonService.changeFields(PathConfig.class, parentKey,webRootPath);

            //把分离的文件拷到tomcat容器的webRoot目录下

            try {

                FileUtil.copy(oldConfigValue,webRootPath );

            } catch (Exception e) {

                String message="拷贝"+oldConfigValue+""+webRootPath+"下失败!";

                messageList.add(message);

                e.printStackTrace();

            }

            //获得properties属性文件的路径,并设置属性值

            String propertyPath=this.getRealPath(request, PathConfig.PROPFILE_PATH);

            parentKey=parentKey.toLowerCase().replace("_", ".");

            bakParentKey=bakParentKey.toLowerCase().replace("_", ".");

            PropertiesUtil.write(propertyPath,parentKey, webRootPath);

            PropertiesUtil.write(propertyPath,bakParentKey, oldConfigValue);

            //重新销毁再加载

            PathConfig.destroy();

            PathConfig.initPathConfig(propertyPath);

            request.setAttribute("messageList", messageList);

            return this.list(request,response,model);

        }

        

        /**

         * tomcat容器切回分离目录

         * @author wei.luo

         * @createTime 2012-4-7

         * @param request request请求

         * @param response response请求

         * @param model 模型

         * @return 列表页

         */

        @RequestMapping(value = "/switch2nginx")

        public String switch2nginx(HttpServletRequest request, HttpServletResponse response,Model model){

            List<String> messageList = new ArrayList<String>();

            String key = "PARENT_PATH";

            String tomcatPath = this.getRealPath(request, "");

            String nginxPath = PathConfig.BAK_PARENT_PATH;

            if(tomcatPath.equals(nginxPath)){

                return this.list(request,response,model);

            }

            Map<String, String> pathConfigMap = this.commonService.getFields2(PathConfig.class);

            for(String key1:pathConfigMap.keySet()){

                String inPath=tomcatPath+"/"+pathConfigMap.get(key1)+"/";

                String outPath=nginxPath+"/"+pathConfigMap.get(key1)+"/";

                

                    if(key1.contains("CHILD")){

                        try {

                            FileUtil.copy(inPath, outPath);

                        } catch (IOException e) {

                            String message="拷贝"+inPath+""+outPath+"下失败!";

                            messageList.add(message);

                            e.printStackTrace();

                        }

                        try {

                            FileUtil.delete(inPath);

                        } catch (Exception e) {

                                String message="删除"+inPath+"失败!";

                                messageList.add(message);

                                e.printStackTrace();

                            }

                    }

            }

            //获得properties属性文件的路径

            String propertyPath=this.getRealPath(request, PathConfig.PROPFILE_PATH);

            key=key.toLowerCase().replace("_", ".");

            PropertiesUtil.write(propertyPath,key, nginxPath);

            //重新销毁再加载

            PathConfig.destroy();

            PathConfig.initPathConfig(propertyPath);

            request.setAttribute("messageList", messageList);

            return this.list(request,response,model);

        }

        

    }

     

    页面(javascript & css)

    <STYLE type=text/css>

    {

    FONT-SIZE

    :

    12px

    }

    #operatorTree A {

        COLOR: #566984;

        TEXT-DECORATION: none

    }

     

    .STYLE2 {

        font-size: x-large

    }

    </STYLE>

     

            <style type="text/css" media="all">

    body,div {

        font-size: 12px;

    }

    .rw{background-image: url(${ctx}/images/cs.jpg);}}

    </style>

    ^_^ ^_^ ^_^

    <script type="text/javascript">

    function changeCss(i)

    {

        var cn=document.getElementById("rw"+i).className;

        if(cn!="")

        {

            document.getElementById("rw"+i).setAttribute("oldclass", cn);

        }

        document.getElementById("rw"+i).className="rw"

    }

    function recoverCss(i)

    {

        var old=document.getElementById("rw"+i).setAttribute("oldclass");

        document.getElementById("rw"+i).className="";

        if(old!="")

        {

            document.getElementById("rw"+i).className=old;

        }

        

    }

    </script>

     

    页面(jsp)

    <TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%">

    <TBODY>

    <TR>

    <TD width=10 height=29><IMG src="${ctx }/vvvv/index/Left.files/bg_left_tl.gif"></TD>

    <TD style="FONT-SIZE: 18px; BACKGROUND-IMAGE: url(${ctx }/vvvv/images/bg_left_tc.gif); COLOR: white; FONT-FAMILY: system">路径配置</TD>

    <TD width=10><IMG src="${ctx }/vvvv/index/Left.files/bg_left_tr.gif"></TD>

    </TR>

     

    <TR>

    <TD colspan="3" style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: white" vAlign="top">

    <div style="margin-left:5%;float:left;display:inline-block;"><b><font color="green">父目录(绝对路径)</font></b></div>

    <TABLE class=gridView id=ctl00_ContentPlaceHolder2_GridView1

    style="WIDTH: 100%; BORDER-COLLAPSE: collapse" cellSpacing=0 rules=all

    border=0 >

    <TR >

    <th class="gridViewHeader" scope="col">序号 </th>

    <th class="gridViewHeader" scope="col">key</th>

    <th class="gridviewHeader" scope="col">value</th>

    <th class="gridviewHeader" scope="col">操作</th>

    </TR>

    <c:set var="i" value="1" />

    <c:forEach items="${parentPathMap}" var="pathConfig" varStatus="s">

        <c:if test="${pathConfig.key ne '' && pathConfig.key ne null}" >

                     <tr id="rw${i}" onmouseover="changeCss(${i})" onmouseout="recoverCss(${i})">

                         <td >${i}</td>

                         <td >${pathConfig.key }</td>

                         <td>${pathConfig.value }</td>

                         <td><a href="${ctx}/vvvv/pathConfig/edit.do?config=[${pathConfig.key}@${pathConfig.value }]" >编辑</a> <!-- |

                         <a href="#" onclick="if(confirm( '你确定删除吗? '))location.href='${ctx}/vvvv/pathConfig/delete?configName=${pathConfig.key }';return false;">删除</a> -->

                         </td>

                     </tr>

                     <c:set var="i" value="${i+1}" />

                     </c:if>

                </c:forEach>

                <!-- 结束 -->

    </TABLE>

    </TD>

    </TR>

     

    <TR>

        <TD colspan="3" style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND-COLOR: white">

         <div style="margin-left:5%;float:left;display:inline-block;"><b><font color="green">子目录</font></b></div>

         <TABLE class=gridView id=ctl00_ContentPlaceHolder2_GridView1

         style="WIDTH: 100%; BORDER-COLLAPSE: collapse" cellSpacing=0 rules=all

         border=0 >

         <TR >

         <th class="gridViewHeader" scope="col">序号 </th>

         <th class="gridViewHeader" scope="col">key</th>

         <th class="gridviewHeader" scope="col">value</th>

         <th class="gridviewHeader" scope="col">操作</th>

         </TR>

         <c:set var="j" value="100" />

         <c:forEach items="${childPathMap}" var="pathConfig" varStatus="s">

             <c:if test="${pathConfig.key ne '' && pathConfig.key ne null}" >

                         <tr id="rw${j}" onmouseover="changeCss(${j})" onmouseout="recoverCss(${j})">

                             <td >${j}</td>

                             <td >${pathConfig.key }</td>

                             <td>${pathConfig.value }</td>

                             <td><a href="#" onclick="if(confirm( '你确定要编辑子目录吗?(建议不要编辑子目录) '))location.href='${ctx}/vvvv/pathConfig/edit.do?config=[${pathConfig.key}@${pathConfig.value }]'" >编辑</a> <!-- |

                             <a href="#" onclick="if(confirm( '你确定删除吗? '))location.href='${ctx}/vvvv/pathConfig/delete?configName=${pathConfig.key }';return false;">删除</a> -->

                             </td>

                         </tr>

                         <c:set var="j" value="${j+1}" />

                         </c:if>

                    </c:forEach>

                    <!-- 结束 -->

         </TABLE>

        </TD>

    </TR>

    <TR>

        <TD colspan="3" style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND-COLOR: white">

         <div style="margin-left:5%;float:left;display:inline-block;"><b><font color="green">其它配置</font></b></div>

         <TABLE class=gridView id=ctl00_ContentPlaceHolder2_GridView1

         style="WIDTH: 100%; BORDER-COLLAPSE: collapse" cellSpacing=0 rules=all

         border=0 >

         <TR >

         <th class="gridViewHeader" scope="col">序号 </th>

         <th class="gridViewHeader" scope="col">key</th>

         <th class="gridviewHeader" scope="col">value</th>

         <th class="gridviewHeader" scope="col">操作</th>

         </TR>

         <c:set var="k" value="200" />

         <c:forEach items="${otherConfigMap}" var="pathConfig" varStatus="s">

             <c:if test="${pathConfig.key ne '' && pathConfig.key ne null}" >

                         <tr id="rw${k}" onmouseover="changeCss(${k})" onmouseout="recoverCss(${k})">

                             <td >${k}</td>

                             <td >${pathConfig.key }</td>

                             <td>${pathConfig.value }</td>

                             <td><a href="${ctx}/vvvv/pathConfig/edit.do?config=[${pathConfig.key}@${pathConfig.value }]" >编辑</a> <!-- |

                             <a href="#" onclick="if(confirm( '你确定删除吗? '))location.href='${ctx}/vvvv/pathConfig/delete?configName=${pathConfig.key }';return false;">删除</a> -->

                             </td>

                         </tr>

                         <c:set var="k" value="${k+1}" />

                         </c:if>

                    </c:forEach>

                    <!-- 结束 -->

         </TABLE>

         <p><div style="margin-left:5%;float:right;display:inline-block;"><b><font color="red">

             <input type="button" onclick="if(confirm( '你确定要将分离的文件切到tomcat容器中去吗? '))location.href='${ctx}/vvvv/pathConfig/switch2tomcat.do'"

                  value="将分离的文件切回tomcat容器中"/>

             <input type="button" onclick="if(confirm( '你确定要将tomcat容器中可分离的文件切到nginx指定目录去吗? '))location.href='${ctx}/vvvv/pathConfig/switch2nginx.do'"

                  value="tomcat容器中可分离的文件切到nginx指定目录"/>

         </font></b></div></p>

        </TD>

    </TR>

    <TR>

    <TD width=10><IMG src="${ctx }/vvvv/index/Left.files/bg_left_bl.gif"></TD>

    <TD style="BACKGROUND-IMAGE: url(${ctx }/vvvv/images/bg_left_bc.gif)"></TD>

    <TD width=10><IMG src="${ctx }/vvvv/index/Left.files/bg_left_br.gif"></TD>

    </TR>

    </TBODY>

    </TABLE>

     

    截图一张

  • 相关阅读:
    centos7 yum 安装mariadb
    curl 获取外网IP
    ansible之一:安装与配置
    第一步 django的下载安装
    命名空间的三种引用方式:非限定名称、限定名称、完全限定名称
    重温PHP之快速排序
    PHP实现文件下载的核心代码
    PHP常量定义之define与const对比
    ThinkPHP中I('post.')与create()方法的对比
    重温PHP之选择排序
  • 原文地址:https://www.cnblogs.com/luowei010101/p/2476832.html
Copyright © 2011-2022 走看看