最近在修改一个网站。因为网站打开速度很慢。
是用java+jsp+html+mysql开发的
一个jsp对应一个htm,超多的htm页面,jsp里都是业务逻辑。在java类里面几乎看不到业务逻辑
数据都往一个模板类里存的。我想请问下 谁开发过类似的网站。
这个模板类是干什么的?
说下这种开发模式有什么好处?有什么坏处?

解决方案 »

  1.   

    以下是模板类package com.zjseek.util;import java.io.ByteArrayOutputStream;
    import java.sql.Date;
    import java.sql.Timestamp;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;/**
     * 模板类
     */
    public class Template {
        private java.util.Properties dBlocks = new java.util.Properties();    private java.util.Properties parsedBlocks = new java.util.Properties();    public void setBlockContent(String blockName, String content) {
            if (content != null) {
                dBlocks.put(blockName, content);
                String nName = nextDBlockName(blockName);
                while (!(nName == null || "".equals(nName))) {
                    setBlock(blockName, nName);
                    nName = nextDBlockName(blockName);
                }
            }
        }    public void setBlock(String tplName, String blockName) {
            dBlocks.put(blockName,
                    getBlock(dBlocks.getProperty(tplName), blockName));
            dBlocks.put(tplName, replaceBlock(dBlocks.getProperty(tplName),
                    blockName));
            String nName = nextDBlockName(blockName);
            while (!"".equals(nName)) {
                setBlock(blockName, nName);
                nName = nextDBlockName(blockName);
            }
        }    public void loadTemplate(String path, String name) {
            try {
                String fileContent = null;
                try {
                    fileContent = getFileContent(path);
                } catch (java.io.FileNotFoundException e) {
                    System.err.println("\nErr: "
                            + new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
                                    .format(new java.util.Date()) + " ==> \""
                            + path + "\" not found.\n\n");
                } catch (java.io.IOException e) {
                }
                if (fileContent != null) {
                    dBlocks.put(name, fileContent);
                    String nName = nextDBlockName(name);
                    while (!(nName == null || "".equals(nName))) {
                        setBlock(name, nName);
                        nName = nextDBlockName(name);
                    }
                }
            } catch (Exception e) {
                System.err.println("\nErr: "
                        + new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
                                .format(new java.util.Date())
                        + " ==> TextTemplate.loadTemplate(\"" + path + "\",\""
                        + name + "\")\n\n");
            }
        }    public String getVar(String name) {
            String result = dBlocks.getProperty(name);
            return result;
        }    public void setVar(String name, String value) {
            if (value == null)
                value = "";
            parsedBlocks.put(name, value);
        }    public void setVar(String name, String value, String def) {
            if (Common.isEmpty(value))
                value = def;
            parsedBlocks.put(name, value);
        }
        public void setVar(String name, Object o) {
            if (o==null)
                setVar(name,"");
            else
             setVar(name,String.valueOf(o));
        }
        public void setVar(String name, int value) {
    try {
    if (Common.isEmpty(value))
    setVar(name, "");
    else
    setVar(name, String.valueOf(value));
    } catch (Exception e) {
    setVar(name, "");
    }
    }
     
        public void setVar(String name, double value) {
    try {
    if (Common.isEmpty(value))
    setVar(name, "");
    else
    setVar(name, String.valueOf(value));
    } catch (Exception e) {
    setVar(name, "");
    }
    }    public void setVar(String name, long value) {
    try {
    if (Common.isEmpty(value))
    setVar(name, "");
    else
    setVar(name, String.valueOf(value));
    } catch (Exception e) {
    setVar(name, "");
    }
    }    public void setVar(String name, Timestamp value) {
    try {
    if (value != null)
    setVar(name, DateUtils.getDate(value.getTime()));
    else
    setVar(name, "");
    } catch (Exception e) {
    setVar(name, "");
    }
    } public void setVar(String name, Date value) {
    try {
    if (value != null)
    setVar(name, DateUtils.getDate(value.getTime()));
    else
    setVar(name, "");
    } catch (Exception e) {
    setVar(name, "");
    }
    } public void setVar(String name, java.util.Date value) {
    try {
    if (value != null)
    setVar(name, DateUtils.getDate(value.getTime()));
    else
    setVar(name, "");
    } catch (Exception e) {
    setVar(name, "");
    }
    }
        
        
      

  2.   


    public void parse(String tplName, boolean repeat) {
            try {
                if (parsedBlocks.getProperty(tplName) != null) {
                    if (repeat) {
                        parsedBlocks.put(tplName, parsedBlocks.getProperty(tplName)
                                + proceedTpl(dBlocks.getProperty(tplName)));
                        return;
                    } else {
                        parsedBlocks.put(tplName, proceedTpl(dBlocks
                                .getProperty(tplName)));
                    }
                } else {
                    parsedBlocks.put(tplName, proceedTpl(dBlocks
                            .getProperty(tplName)));
                }
            } catch (Exception e) {
                System.err.println("\nErr: "
                        + new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
                                .format(new java.util.Date())
                        + " ==> TextTemplate.parse(" + tplName + "," + repeat
                        + ")\n\n");
                e.printStackTrace(System.err);
                System.err.println("\nparsedBlocks.getProperty(" + tplName
                        + ") => " + parsedBlocks.getProperty(tplName));
                System.err.println("dBlocks.getProperty(" + tplName + ") => "
                        + dBlocks.getProperty(tplName));
            }
        }    public String printVar(String name) {
            return parsedBlocks.getProperty(name);
        }    public String printBefore(String tplName, String blockname) {
            String sAllContent = dBlocks.getProperty(tplName);
            String ret = null;
            if (sAllContent.indexOf("{" + blockname + "}") != -1) {
                ret = sAllContent.substring(0, sAllContent.indexOf("{" + blockname
                        + "}"));
                ret = proceedTpl(ret);
                int index = sAllContent.indexOf("{" + blockname + "}") + 2
                        + blockname.length();
                dBlocks.setProperty(tplName, sAllContent.substring(index));
            }
            return ret;
        }    private String matchProperty(String tTpl) {
            String pat = "\\{(\\S+?)\\}";
            Pattern p = Pattern.compile(pat);
            Matcher m = p.matcher(tTpl);
            StringBuffer sb = new StringBuffer();
            String name = null;
            while (m.find()) {
                name = m.group(1);
                try {
                    if (parsedBlocks.containsKey(name))
                        m.appendReplacement(sb,
                                parsedBlocks.getProperty(name) == null ? ""
                                        : parsedBlocks.getProperty(name)
                                                .replaceAll("\\\\", "\\\\\\\\")
                                                .replaceAll("\\$", "\\\\\\$"));
                    else
                        m.appendReplacement(sb,
                                dBlocks.getProperty(name) == null ? "" : dBlocks
                                        .getProperty(name).replaceAll("\\\\",
                                                "\\\\\\\\").replaceAll("\\$",
                                                "\\\\\\$"));
                } catch (Exception e) {
                    System.out.println("error when replace " + name + " with "
                            + parsedBlocks.getProperty(name));
                    e.printStackTrace();
                }
            }
            m.appendTail(sb);
            return sb.toString();
        }    private String proceedTpl(String tpl) {
            String tTpl = tpl;
            try {
                String pat = "<!-- Begin (\\w+?) -->(.+?)<!-- End (\\w+?) -->";            Pattern p = Pattern.compile(pat, Pattern.DOTALL);
                Matcher m = p.matcher(tTpl);            StringBuffer sb = new StringBuffer();
                String name = null;
                while (m.find()) {
                    name = m.group(1);
                    try {
                        if (parsedBlocks.containsKey(name))
                            m.appendReplacement(sb, parsedBlocks.getProperty(name)
                                    .replaceAll("\\\\", "\\\\\\\\").replaceAll(
                                            "\\$", "\\\\\\$"));
                        else {
                            m.appendReplacement(sb, matchProperty(m.group(2))
                                    .replaceAll("\\\\", "\\\\\\\\").replaceAll(
                                            "\\$", "\\\\\\$"));
                        }
                    } catch (Exception e) {
                        System.out.println("error when replace " + name);
                        e.printStackTrace();
                    }
                }            m.appendTail(sb);            tTpl = sb.toString();            tTpl = matchProperty(tTpl);
            } catch (Exception e) {
                System.err.println("\nErr: "
                        + new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
                                .format(new java.util.Date())
                        + " ==> TextTemplate.proceedTpl(tpl)\n\n");
                e.printStackTrace(System.err);
            }
            return tTpl;
        }    private String getBlock(String template, String name) {
            int bBlock, eBlock, alpha;
            alpha = name.length() + 12;
            bBlock = template.indexOf("<!--Begin" + name + "-->");
            eBlock = template.indexOf("<!--End" + name + "-->");
            if (bBlock != -1 && eBlock != -1 && eBlock > bBlock) {
                return template.substring(bBlock + alpha, eBlock);
            } else {
                return "";
            }
        }    private String replaceBlock(String template, String name) {
            int bBlock, eBlock;
            bBlock = template.indexOf("<!--Begin" + name + "-->");
            eBlock = template.indexOf("<!--End" + name + "-->");
            if (bBlock != -1 && eBlock != -1 && eBlock > bBlock) {
                return template.substring(0, bBlock)
                        + "{"
                        + name
                        + "}"
                        + template.substring(eBlock
                                + ("<!--End" + name + "-->").length());
            } else {
                return template;
            }
        }    private String nextDBlockName(String templateName) {
            int bTag = 0, eTag = 0;
            String name = "", template = "";
            template = dBlocks.getProperty(templateName);
            bTag = template.indexOf("<!--Begin");
            if (bTag != -1) {
                eTag = template.indexOf("-->", bTag);
                name = template.substring(bTag + 9, eTag);
                if (template.indexOf("<!--End" + name + "-->") != -1) {
                    return name;
                }
            }
            return "";
        }    public String printAll() {
            return "<h1><font color=\"red\">printAll() is not implemented yet</font></h1>";
        }    private String getFileContent(String fName)
                throws java.io.FileNotFoundException, java.io.IOException {
            java.io.FileInputStream is = new java.io.FileInputStream(fName);
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            int count = 0;
            int bufsize = 1024;
            byte[] data = new byte[bufsize];
            while (((count = is.read(data, 0, bufsize)) > 0))
                os.write(data, 0, count);
            is.close();  
            return os.toString("GBK");
        }
    }
      

  3.   

    这个问题也困扰了我好长时间,都不清楚为什么在jsp上写java代码。哲学说:存在即合理。请高手解释这种情况存在的合理性。
      

  4.   

    前两天看了一个招聘的帖子 要求上写的是
    "根据USECASE进行需求分析,设计"当时就很纳闷,怎么需求分析还没作,USECASE就已经出来了?哪跟哪啊这都是?后来才发现,很多招聘网站上都这么写要求
    看来很多号称高级人员的人根本没有理解软件生命周期是怎么回事啊楼主所说的JSP里写业务逻辑和数据库连接的案例我也见过貌似还是中科院旗下的大公司
    这样做的话,小应用还可以遇到大型的应用,需求分析和软件设计都是迭代进行的,大量改代码的情况就不可避免了
      

  5.   

    用jsp调用业务逻辑的确很慢 而且 不太 好 维护 还 是 用 标签比较 好  
      

  6.   

    我的老师给我看过他以前在公司做过的一个项目,不过那是他很久以前在公司做的,好像就和楼主的项目很像,JSP 页面中全是 JAVA代码块,所有的业务逻辑都在JSP页面中做,那个模板类应该是做数据层的。
    在JSP页面中做JAVA代码块和业务逻辑的好外就是减少了服务器端的处理量,减轻服务器的负担,所有的处理基本上都在客户端完成,也就是在客户端浏览器的JSP页面中完成,坏处就是楼主所见到的,网页访问速度超慢,因为JSP 页面中要做的处理量太大了,每次访问一个页面,它都要把JAVA代码块中的代码执行完,处理出结果后才会显示页面,所以页面显示速度很慢。
      

  7.   

    不用html,前台显示全用jsp,逻辑处理全部移动到后台执行
      

  8.   

    难道Jsp不是解释为servlet在服务器端运行的吗?
      

  9.   


    你这应该偏向于model1的模式了,也就是视图层和业务层没有进行分离,这样维护起来太不方便了,扩展起来更是难啊。
    现在这这种开发模式早过时了,都是model2的模式即MVC模式,M(业务层)V(视图层)C(控制层)好的开发模式维护起来很方便,扩展起来也很方便。
    不知道楼主学习过struts吗。
      

  10.   

    jsp是运行在客户端浏览器吗?
      

  11.   

    早期struct等的标签用的比较少,有些地方必须嵌入java代码,而且直接把java代码写在jsp中开发速度快。可以随心所遇。本来jsp对页面的控制就没有.net那么灵活,java和html标签混用,页面好控制。但是后来都发现维护太难,而且struct等标签用着更加方便了,所以很多公司都提倡jsp中不嵌入java代码了。
      

  12.   

    现在还有很多公司在jsp中写java代码呀
      

  13.   

    这种模型是model1时代的web开发模型,局限性很大,只适合小应用应该,不过这样做系统开发速度很快的说
      

  14.   

    "我们公司的领导说 大部分公司都是打着面向对象的旗号干着面向过程的事 看来此言非虚啊~"同意 呵呵开发一个系统,有两种选择
    1,使用框架 如 struts Spring hibernate等
    2,不使用框架 简单的jsp+servlet+javabean+数据库
    其实没有谁好谁不好一说 看情况而定
    如果你项目很大 就需要考虑到要分层开发 责任明确 还要考虑维护的问题
    这时就建议使用框架 像struts 可以做很好的控制 只要一看Struts。config。xml就一目了然如果项目不大 中小型 就可以直接用jsp+servlet+javabean+数据库开发 小项目业务逻辑弄清楚不是很困难
    如果使用框架感觉没起到显著的作用 使不上劲 呵呵  缺点就是维护起来不好弄 如果是开发的人做维护 还好说
    如果是别人来维护 可费劲了 呵呵
      

  15.   

    理论上,jsp是速度快的,比用其他的标签库快。而使用标签库的好处就是维护起来方便。你的项目速度慢的原因应该不在与jsp中有大量的java代码,而是其他地方,你可以再分析分析。
      

  16.   

    用jsp开发的模式应该是model,开发速度快,于model2(MVC)比较,差远了。用jsp开发的在维护和扩展方面都很差,无法提高代码的复用性
      

  17.   

    模板是用于快速更换页面框架用的,比如google的首页没事干就换个样式和一些bbs上都有更换皮肤。都是基于模板的
      

  18.   


    这个项目不是我做的 我现在是刚接手这个东西 ,领导要求整改。。
    我一直做struts的,但现在领导的要求是不改变框架。照它原来这个模式的话,只能依葫芦画瓢了。速度肯定上不去的吧。
    所以想问问各位有什么办法改。
      

  19.   

    这个不是什么开发模式 开发模式是放到嘴里谈的 简单点说 该项目仅仅是为了完成 而不是作为一个艺术品供后人瞻仰 所以业务逻辑代码都写在了JSP里 而你不要错误的认为这样做没好处 他最大的好处就是节约时间
      

  20.   

    楼主应该会用sevlet 吧?我觉得不动框架只能在后台加sevlet来处理业务逻辑。
      

  21.   

    听LZ的描述 这似乎是一个门户网站或者商品网站 通过HTML模板生成HTML网页 这种网站访问速度很快