项目总结

来源:互联网 发布:mac怎么安装nodejs 编辑:程序博客网 时间:2024/06/15 06:34
项目总结:

1.<input type="image" src="images/addNews.gif"/>与<img src="images/addNews.gif"/>不对齐的解决办法:在后者中增加style="vertical-align:top;"即<img src="images/addNews.gif" style="vertical-align:top;"/>,即可解决。

2.KindEditor在线编辑器内容无法获取(无法提交)的解决办法:在提交按钮或图片上增加onclick事件onclick="document.getElementById('DESCRIPTION').value=KE.util.getData('DESCRIPTION');"

3.在给控件设置id的时候尽量不要有转义字符,起个简单的易于理解的NAME就好,比如这样的名字:"TEXTAREA|NONULL|MUST"就容易出问题,在IE下能够获取到,但在其他浏览器就获取不到了。如:document.getElementById("TEXTAREA|NONULL|MUST").value; 
如:
<script language="javascript">
function checkfile(form) 
var img=document.getElementById("TEXTAREA|NONULL|MUST").value; 
var ns=img.lastIndexOf("."); 
var ext=img.substring(ns+1,img.length); 
ext=ext.toLowerCase(); 
  if ( ext!="gif" && ext!="jpg" && ext!="jpeg" && ext!="png" && ext!="bmp"){ 
     var labelObj = document.getElementById(form.name + "_error");
     labelObj.innerHTML = "<font color='red'>您要上传的图片格式不正确,请重新选择!</font>";
     return false; 
  } 
</script>

在<input type="file" name="TEXTAREA|NONULL|MUST" alt="图片" id="TEXTAREA|NONULL|MUST" onchange="checkfile(this.form);"/>中火狐谷歌都获取不到
在IE下正常提示。我们可以将"TEXTAREA|NONULL|MUST"改为"PIC" 就正常了。

4.关于防止拼装的SQL语句注入攻击的问题:当我们在查询条件或者修改或者添加的只要能输入数据的表单中填写数据时,而我们的SQL语句是拼装而成的而非存储过程,那么就会有被注入攻击的风险。防范措施:采用apache的commons-lang-2.6.jar包,里面有工具类StringEscapeUtils,此类中有方法escapeSql,这是一个静态的方法我们可以直接调用StringEscapeUtils.escapeSql(String value)即可.想了解具体实现可参考http://www.jguru.com/faq/view.jsp?EID=8881或者在http://www.eu.apache.org/dist//commons/lang/source/下载源码。

5.关于文件的导出操作:采用http://opencsv.sourceforge.net/的jar包:
具体实现:


/**
* 概述:数据导出生成csv格式文件
* @Title: exportData
* @param response
* @param listContent:数据集合
* @param filename:文件名称
* void
* @user <a href=mailto:linfenliang@126.com>linfenliang</a>
*/
public static void exportData(
HttpServletResponse response,List<HashMap<String, Object>> listContent,String filename) {
response.setCharacterEncoding("gbk");
response.setContentType("application/vnd.ms-excel;charset=gbk");
response.addHeader("Content-Disposition", "attachment; filename="+filename+".csv");
String[] title = null;
String[] sourceTitle = null;
title = new String[]{"编号",名称","数量","时间"};
sourceTitle = new String[]{"ID","NAME","NUM","DATE"};
}
try {
CSVWriter writer = new CSVWriter(response.getWriter());
String[][] obj = new String[listContent.size() + 1][sourceTitle.length];
for (int x = 0; x < title.length; x++) {
obj[0][x] = title[x].toString();
}
writer.writeNext(obj[0]);
for (int i = 1; i < obj.length; i++) {
String temp = "";
String[] str = new String[sourceTitle.length];
for (int j = 0; j < sourceTitle.length; j++) {
if(listContent.get(i - 1).get(sourceTitle[j])==null)
temp = "";
else temp = listContent.get(i - 1).get(sourceTitle[j]).toString();
str[j] = temp;
}
obj[i] = str;
writer.writeNext(obj[i]);
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}


6.错误码的问题:对于每一个项目,都需单独写出一个文件或类来进行错误码的配置,以防止客户看到令人生厌的如500错误等。

7.表结构的设计,对于任何一张表,如无意外或其他原因,都应该有如下一些字段,ID、创建人、创建时间、修改人、修改时间,此举对于以后的维护及控制一些意外或特殊操作很有意义,如有两个权限完全一样的管理员,同时修改密码(都打开修改密码画面,一个人修改后,另一个人点击修改),可每次传修改时间用以验证是否被修改,对于表单数据过大效果时不错。

8.网站图标的设计<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> 

9.一个简单的存储过程:
CREATE OR REPLACE 
procedure PROC_USER_PWDUPD 
(
    uname in VARCHAR2,
    oldpwd  in  VARCHAR2,
    newpwd  in  VARCHAR2,
    renewpwd  in  VARCHAR2,
    errCode out NUMBER,
    sqlErrMsg   out VARCHAR2
   
)
is 
num number;
begin
select count(*) into num from _user where username=uname and pwd=oldpwd;
if newpwd <> renewpwd then
errCode := 800;
return;
end if;
if num<>1 then 
errCode := 801;
return;
end if;
select length(newpwd) into num from dual;
if num<4 or num>50 then
errCode :=802;
return;
end if;
update _user set pwd=newpwd 
where username=uname and pwd=oldpwd;
commit;
select count(*) into num from _user where username=uname and pwd=newpwd;
if num<>1 then 
errCode := 803;
return;
end if;
EXCEPTION
  WHEN OTHERS THEN
    sqlErrMsg := 1000;
   ROLLBACK;   
end PROC_USER_PWDUPD;

10.日期比较的JS

<script type="text/javascript">
function compareDate(form){
var smallDate = document.getElementById("BigDATE").value.replace(/-/g,"/"); 
var bigDate = document.getElementById("LessDATE").value.replace(/-/g,"/"); 
var dt1=new Date(smallDate).getTime()/(1000*60*60*24);
var dt2=new Date(bigDate).getTime()/(1000*60*60*24);
var labelObj = document.getElementById(form.name + "_error");
if(dt1>=dt2){
   labelObj.innerHTML = "<font color='red'>时间段不正确!</font>";
return false;
}
}
</script>
0 0