⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsp.doc

📁 参考资料,大家可以看看自己做的jsp可以注意自己的编程风格
💻 DOC
📖 第 1 页 / 共 2 页
字号:
????????? 在安装MySQL的过程中,往往询问是否需要将root帐户设置为可远程访问,为了安全起见,最好设置成为不能远程访问。JSP项目中访问数据库就使用root帐户(一般的JSP项目肯定是与MySQL在一台服务器上),然后再新建一个帐户,设置可以远程访问,从而方便备份数据库。
????????? 在MySQL中,有关时间日期的数据类型有datetime和timestamp两种,对于datetime,其是精确到毫秒的,不能自动插入当前日期与时间;对于timestamp,其格式为“YYYY-MM-DD HH:MM:SS”,可以自动插入当前日期与时间。当需要写入这两个类型的数据到MySQL时,先构造符合格式的字符串,写在SQL语句中即可。当需要读取这两类数据类型时,getDate()方法只返回日期,getTime()方法只返回时间。
????????? 在写SQL语句时,注意以下几个问题:
????????? insert into users(username,password) values('test1','test2')???????? //'test2'后不能有逗号(,)
????????? update users set username='test1',password='test2' where id=3???????? //'test2'后不能有逗号(,),并且id=3不能写成id='3'
????????? LIMIT x语句可以实现只返回前x条记录,如:
????????? select * from users limit 3???????? //将只返回前3条记录
????????? 在MySQL中,where子句可以有这样的语法:where job!='' and !isNull(job)
???
7、[功能]日期的后退运算
????????? 有时我们需要进行这样的运算:求出2008.8.8之后3天的日期。不要妄想通过截取字符串进行数学运算求得,那样需要考虑很多,30天?31天?29天?还有很多很多...仍然另辟蹊径,通过Calendar类实现。
java.util.Date today = new java.util.Date();?????????? //得到当前日期
java.util.Calendar theCa=java.util.Calendar.getInstance();?????????? //新建一个日历对象
theCa.setTime(today);?????????? //将today赋给日历对象theCa
theCa.add(theCa.DATE,7);?????????? //进行加运算,这里用的是Calendar的add()方法
java.util.Date result = (java.util.Date)theCa.getTime();?????????? //得到结果

8、[整体性]Servlet的映射配置、命名以及综合与独立的取舍
????????? 对于每个Servlet,都需要在web.xml中给出它的映射地址,那么,最好将所有的Servlet都映射到一个目录下,如“servlets/”下,即登录的Servlet为“servlets/Login”,登出的Servlet“servlets/Exit”,这样做,对于移植到IIS整合Tomcat的环境下能够避免的方便的避免Servlet不能被IIS过滤出来。
????????? 此外,对于Servlet的命名,也最还遵循一定的规则,如Users_Reg、Users_Modify、Admin_Add等,清晰明了其功能。
????????? Servlet综合与独立的取舍是指这样的问题,比如对于用户来说,可有注册处理、资料修改处理、资料读取处理、删除处理,那么是对每个处理分别写一个Servlet还是写在一个Servlet里,用一个参数加以区分?这里应该考虑这些处理的执行者,比如注册处理、资料修改处理、资料读取处理都只能由同一角色(即用户)完成,故而写在一个Servlet里较为合适;而对于删除,一般只能由系统管理员执行,故而应该独立出来。

9、[JSP技巧]正确的获取参数值的方法
????????? 获取参数,看似再简单不过了,String username = request.getParameter("username")。但这样可靠吗?第一,若没有传递username这个参数,那么username=null,在后续对username的处理和判断中,很有可能出现NullPointerException(空指针异常);第二,对于传递的中文参数,常常出现乱码。为了解决上述问题,我们应该这样获取参数值:
????????? String username = request.getParameter("username")==null?"":elineSystem.codeToString(request.getParameter("username")).trim();
????????? 这实际上是一个三目表达式,若username为null,则赋值"",避免后却出现NullPointerException。此外,还进行了中文编码转换,这里的elineSystem是一个系统Bean,在第3点中说到的,、String codeToString(String str)是一个中文编码处理函数,定义在系统Bean里面,避免出现中文乱麻;最后,最好还跟上一个trim()去空格,防止用户非法输入。
????????? 由此观之,为了保证系统的稳定性,我们确实还注意每一个细节。

10、从数据库(记录集ResultSet)中读取数据
?????????? 和第9点,一样,看似很简单的东西,无非rs.getString()、rs.getDate()等。但是同样的问题,经常会出现null问题,若数据库中该字段值为null,你若对该字段值执行了一些判断和处理,将会出现NullPointerException;此外,如果直接用于getString读取显示在页面上,将会是"null",显然这不是我们所希望的,应该显示""才对。所以,做出一点点小改动:
?????????? 读取主键id或int型数据类型:rs.getInt("id")???????? //一般的,int型不会有null值得产生,直接读取
?????????? 读取字符串:rs.getString("gs")==null?"":rs.getString("gs")???????? //也是一个简单的三目运算符,防止null
?????????? 读取日期:rs.getDate("idate")==null?"":rs.getDate("idate")???????? //只返回日期YYYY-MM-DD
?????????? 读取时间:rs.getTime("idate")==null?"":rs.getTime("idate")???????? //只返回时间HH:MM:SS
?????????? 截取指定字数字符串:rs.getString("title")==null?"":((rs.getString("title").length()<=30)?rs.getString("title"):(rs.getString("title").substring(0,30))

11、[技巧]JSP/Servlet中构造insert和update等SQL语句
?????????? 在编程过程中,经常需要构造各种SQL语句,往往冗长复杂,而且容易出错。以前我们经常会以一个String类型的字符串来通过很多加号连接运算来构造SQL语句,其实这样在java中是非常办占用内存的,对于这样随时改变的字符串,我们应该使用StringBuffer来处理,将会大大节省资源。
?????????? 构造insert语句:
StringBuffer sqlStr = new StringBuffer();???????? //创建一个新的StringBuffer对象
sqlStr.append("insert in to users");
sqlStr.append("(username,password,name,sex,email)");???????? //写明要填写值的字段
sqlStr.append(" values(");
sqlStr.append("'"+username+"',");???????? //注意单引号和逗号不要掉了
sqlStr.append("'"+password+"',");
sqlStr.append("'"+name+"',");
sqlStr.append("'"+sex+"',");
sqlStr.append("'"+email+"')");???????? //最后一句注意逗号改为括号
?????????? 构造update语句:
StringBuffer sqlStr = new StringBuffer();???????? //创建一个新的StringBuffer对象
sqlStr.append("update users set ");???????? //注意set后有一个空格
sqlStr.append("username='" + username + "',");???????? //注意单引号和逗号不要掉了
sqlStr.append("password='" + password + "',");
sqlStr.append("name='" + name + "',");
sqlStr.append("sex='" + sex + "',");
sqlStr.append("email='" + email + "'");???????? //最后一句注意没有逗号
?????????????? sqlStr.append(" where id=" + id);???????? //加入where子句,注意where前有一个空格
?????????? 要使用时SQL语句时,sqlStr.toString()即将sqlStr由StringBuffer转化为了String。
?????????? 以这样的方法构造SQL语句,既清晰明了,又节约资源。

12、[功能]多条件搜索功能的实现
?????????? 其实搜索功能的实现,无外乎在于SQL语句的构造。用户提交搜索条件后,程序获取参数,并构造相应的SQL语句。下面举例:
?????????? //首先获取用户填写的搜索条件
String sex = request.getParameter("sex")==null?"":elineSystem.codeToString(request.getParameter("sex")).trim();???????? //性别
String username = request.getParameter("username")==null?"":elineSystem.codeToString(request.getParameter("username")).trim();????????? //用户名
String sdate = request.getParameter("sdate")==null?"":elineSystem.codeToString(request.getParameter("sdate")).trim();???????? //起始日期
String edate = request.getParameter("edate")==null?"":elineSystem.codeToString(request.getParameter("edate")).trim();???????? //截至日期
if(edate.length()>0){edate = edate + " 23:59:59";}???????? //截至日期应该是到当天末,而默认情况下是当天头
?????????? //再构造SQL语句
StringBuffer sqlStr = new StringBuffer();
sqlStr.append("select * from users where id>0");???????? //这里加上id>0是为了保证当用户没有填写搜索条件时失效
if(sex.length()>0){sqlStr.append(" and sex='"+sex+"'");}???????? //注意单引号
if(username.length()>0){sqlStr.append(" and username like '%"+username+"%'");}???????? //支持模糊搜索
if(sdate.length()>0){sqlStr.append(" and idate>='"+sdate+"'");}???????? //大于起始日期
if(edate.length()>0){sqlStr.append(" and idate<='"+edate+"'");}???????? //小于截至日期
?????????? 要使用时SQL语句时,sqlStr.toString()即将sqlStr由StringBuffer转化为了String。这样就构造出来了搜索的SQL语句。

13、[功能]表单数据验证
?????????? 这样的JavaScript经常会用到,老师重复写实在很麻烦,经过搜寻,发现了FormValid3,就是一个成型js的,确实用起来很方便。使用方法一看便知,下载地址:
????http://coderhome.net/demo/FormValid/FormValid.0.3.rar

14、[技巧]构造日期时间字符串
java.util.Date sendTime = new java.util.Date();
String timeStr = (sendTime.getYear()+1900)+"-"+(sendTime.getMonth()+1)+"-"+sendTime.getDate()+"_"+sendTime.getHours()+":"+sendTime.getMinutes()+":"+sendTime.getSeconds();???????? //注意年份要加1900,月份要加1
15、[功能]在线用户数统计
package eline.system;
import javax.servlet.http.*;
public class OnlineCounterListener implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
???????? activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
???????? if (activeSessions > 0) {
????????? activeSessions--;
???????? }
}
public static int getActiveSessions() {
???????? return activeSessions;
}
}
使用方法:
?????????? 在web.xml中加入
???????? <listener>
?????????? <listener-class>eline.system.OnlineCounterListener</listener-class>
???????? </listener>


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -