最近在修改一个网站。因为网站打开速度很慢。
是用java+jsp+html+mysql开发的
一个jsp对应一个htm,超多的htm页面,jsp里都是业务逻辑。在java类里面几乎看不到业务逻辑
数据都往一个模板类里存的。我想请问下 谁开发过类似的网站。
这个模板类是干什么的?
说下这种开发模式有什么好处?有什么坏处?
是用java+jsp+html+mysql开发的
一个jsp对应一个htm,超多的htm页面,jsp里都是业务逻辑。在java类里面几乎看不到业务逻辑
数据都往一个模板类里存的。我想请问下 谁开发过类似的网站。
这个模板类是干什么的?
说下这种开发模式有什么好处?有什么坏处?
解决方案 »
- SSH框架中Hibernate对session的管理
- 求高手相助!!!如何在客户端修改服务端servlet里的session?
- hibernate多对多问题
- wap 提交中文乱码
- 状态的维护问题,是建立状态表呢还是直接写一个枚举类
- yale cas 单点登陆问题。
- 我给100分,请教Struts2高手,Struts2的框架对于jsp取request有没有影响?有4个问题,大家快来看看
- 关于servlet中调用数据库连接的问题,对数据库的操作老是无效,求高手指点
- java中如何调用sqlserver数据库中的自定义的存储过程???????
- 真心求教,一个奇怪的关于对象的问题!分不够再加!up有分!
- 求教:传参数问题?
- 请问,弄一个视频服务器要些什么技术。谢谢
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, "");
}
}
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");
}
}
"根据USECASE进行需求分析,设计"当时就很纳闷,怎么需求分析还没作,USECASE就已经出来了?哪跟哪啊这都是?后来才发现,很多招聘网站上都这么写要求
看来很多号称高级人员的人根本没有理解软件生命周期是怎么回事啊楼主所说的JSP里写业务逻辑和数据库连接的案例我也见过貌似还是中科院旗下的大公司
这样做的话,小应用还可以遇到大型的应用,需求分析和软件设计都是迭代进行的,大量改代码的情况就不可避免了
在JSP页面中做JAVA代码块和业务逻辑的好外就是减少了服务器端的处理量,减轻服务器的负担,所有的处理基本上都在客户端完成,也就是在客户端浏览器的JSP页面中完成,坏处就是楼主所见到的,网页访问速度超慢,因为JSP 页面中要做的处理量太大了,每次访问一个页面,它都要把JAVA代码块中的代码执行完,处理出结果后才会显示页面,所以页面显示速度很慢。
你这应该偏向于model1的模式了,也就是视图层和业务层没有进行分离,这样维护起来太不方便了,扩展起来更是难啊。
现在这这种开发模式早过时了,都是model2的模式即MVC模式,M(业务层)V(视图层)C(控制层)好的开发模式维护起来很方便,扩展起来也很方便。
不知道楼主学习过struts吗。
1,使用框架 如 struts Spring hibernate等
2,不使用框架 简单的jsp+servlet+javabean+数据库
其实没有谁好谁不好一说 看情况而定
如果你项目很大 就需要考虑到要分层开发 责任明确 还要考虑维护的问题
这时就建议使用框架 像struts 可以做很好的控制 只要一看Struts。config。xml就一目了然如果项目不大 中小型 就可以直接用jsp+servlet+javabean+数据库开发 小项目业务逻辑弄清楚不是很困难
如果使用框架感觉没起到显著的作用 使不上劲 呵呵 缺点就是维护起来不好弄 如果是开发的人做维护 还好说
如果是别人来维护 可费劲了 呵呵
这个项目不是我做的 我现在是刚接手这个东西 ,领导要求整改。。
我一直做struts的,但现在领导的要求是不改变框架。照它原来这个模式的话,只能依葫芦画瓢了。速度肯定上不去的吧。
所以想问问各位有什么办法改。