`
a_kang1798
  • 浏览: 1109 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

jsp恢复记忆笔记

阅读更多

工作了,浮躁了,曾经学网络的,后来却偏偏挤上了WEB开发这个独木桥,本想做JSP吧,第一份工作却是关于ASP的,的确有点郁闷哦。既然选择了做JAVAWEB开发,那还是回到JavaWEB这个原点吧。于是找了一些教程回忆了一下,下面的就是我的JSP恢复笔记。

对于JavaWeb开发我纯属自学,所以不尽如人意的地方,希望大家能够理解并指出错误所在。也希望这点东西能帮助到其他人。

搭建Jsp环境:
准备:JDK、Myeclipse 7.0、Mysql 5.1、Tomcat 6
1. 安装JDK
2. 安装Myeclipse 7.0
3. 安装Mysql 5.1到C:\Program Files\
a) 设置密码为123,用户名默认为root
b) 配置环境变量:复制“C:\Program Files\MySQL\MySQL Server 5.0\bin”到PATH
c) 启动服务,首次登陆Mysql:mysql -h 127.0.0.1 -u root -p,提示输入密码:123
4. 安装Tomcat,并设置在Myeclipse 7.0中
关于MyEclipse
更改网站URL更目录: 
【图片】
Sqlserver 2005连接问题:
【图片】

我这里有两个Sqlserver JDBC驱动,一个URL前面需要加microsoft,如图,一个可加可不加
【图片】
1. 启动Tomcat服务,运行中Tomcat网站,当网站打开后,即使关闭了Tomcat服务,刷新页面也无变化,而重新打开页面后无法连接,这说明只要后台没有更改就没有数据更新到客户机,减轻了服务器压力。
2. 在我试验的结果中MyEclipse中加载jdbc驱动有三种:
a) 直接把jdbc驱动放在WebRoot\WEB-INF\lib就能使用
b) jdbc驱动放在WebRoot\WEB-INF\lib后,通过右击项目属性Java构建路径库添加jar,其实这和a)是一样的,当jdbc驱动复制到WebRoot\WEB-INF\lib,就会自动添加jar,即使在此对话框中删除了jar,也可以正常运行,所以网站应该和MyEclipse无关,只是和Tomcat有关,因为TomCat在此路径中可以寻找jdbc驱动,并编译。
c) 通过右击项目属性Java构建路径库添加外部jar浏览选择本地或网络jar
d) c)中虽然添加了项目目录以外的jar但是,当我们把项目加载到Tomcat容器后,就和a)b)一样的了。
3. 当我在MyEclipse中把项目中的Jdbc驱动删除后,即使更新了Tomcat网站也显示正常,这说明MyEclipse只覆盖已有的,而不覆盖(删除)没有的,也就是说更新不是替换整个网站,之前的jdbc虽然已经在MyEclipse项目中删除,但是在Tomcat中依然以class文件存在而并没有被覆盖。
4. 上图中我们有个新建连接,其实这个是可选的,在MyEclipse中新建数据库连接的目的是直接在MyEclipse中编辑数据库,当我们使用Microsoft SQL Server 2005客户端时,就不需要在MyEclipse新建了。可以看到,这里又重新选定JDBC驱动JAR,这是我之前的一个误区,这也是我为什么二者加载了不同的jdbc后,其中一个jdbc的URL中不可以加microsoft!
5. 清除所有断点:
【图片】
6. div嵌套自适应,如果内部div使用了float:left;之类的样式,那么外div部就不能自适应内部div,而内部使用表格,即使使用float样式,也可以自适应嵌套的,但是第一行的最后一个不可以使用float,第一行最后一个使用了float后会出显现外div重叠到别的div上,如果需要打印多行肯定不行,而外部使用表格,不管内部使用什么都是自适应的,并且可以和外部层并列。这就是表格的好处之一。
7. Fckeditor在浏览器加载后会形成缓存,所以当更改文件后,刷新页面并不能重新加载,所以要观察变化,需要清除缓存~~
8. 其实jsp程序缓存都多,可能是为了减轻服务器的压力,而存在客户端。
关于Mysql
1. 安装:如果把数据库放在D盘,那么MySQL Datafiles必须指向D盘,Mysql会自动创建MySQL Datafiles文件夹,My.ini文件中也需要更改数据库路径和Datafiles路径的指向。
2. 启动:>net start mysql
3. 注释:Mysql注释有三种:“-- ”、“#”、“/**/”。特别注意“-- ”后面一定要有空格
4. 在Windows备份还原Mysql
a) 备份:C:\Documents and Settings\WEGA>mysqldump -u root -p company > d:\ok.sql(备份company数据库为ok.sql文件到d盘)
b) 还原:C:\Documents and Settings\WEGA>mysql -u root -p company < d:\ok.sql(注意:如果原来没有company数据库,则需要创建一个空的company数据库)可能是版本不一样的问题,在Linux中的.sql文件恢复出现问题。
5. Mysql自动增长和插入空值:insert into name values (null,’akang’,’男’,null,null); -- 因为uId(第一个null)为auto_increment(自动增长),所以此null实际上是从1开始的自动递增序列,而后面两个null就是空值。(可能是版本不同,为什么之前用“’’”呢?)
6. Mysql用户:新建用户(用户名为akang,密码为123):
a) 用root连接到数据库
b) grant all privileges on *.* to 'akang'@'localhost' identified by '123' with grant option;
或grant all privileges on *.* to 'akang'@'%' identified by '123' with grant option;
或insert into user values('localhost','akang',password('123'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); /*此密码为加密密码*/
7. Mysql中文乱码问题
a) 我的环境:JSP为utf-8编码,Mysql为utf8
b) 更改my.ini文件为utf8,导入常规语句的.sql文件,遇到插入中文会报错,如:ERROR 1366 (HY000) at line 12: Incorrect string value: '\xC8\xC8\xC1\xD2\xC7\xEC...' for column 'jx_nTitle' at row 1。解决方法:把文本文件存成utf8编码,如图(使用UltralEditor工具)
【图片】
虽然可以导入文件了。但是如果在客户端中插入带中文的语句还会报上面的错误。并且,查询结果中中文也不能正常显示。
c) 不管Mysql的字符编码是什么,只要在.sql中的语句中设定表的字符编码为gbk或者gb2312就能够正常导入,但如果Mysql的字符编码是默认编码Latin1(不支持中文),那么重新导入后客户端或jsp文件读取数据库会打印“????”乱码,如果想在jsp页面中正常显示中文,必须Mysql字符编码为utf8或者gbk或者gb2312等中文字符编码,如下语句:
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = gbk;
create table jx_News (
  ... ...
)ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;
d) 在使用smartUpload上传组件上传时,Servlet是utf-8编码,表单页面为什么需要GBK才可使用mySmartUpload.getRequest().getParameter(“name”);获得表单正确的中文字符?不过如果是在form标签中传值比如action=”CheckAdmin?param=add”则直接使用String Param = request.getParament(“param”);就可以了
e) 在b)中.sql文件中创表语句改为utf8为什么不行呢?
关于程序开发
8. 问题:在CheckPro判断是否参数Param2时为什么只能用Param2 != null,而不能使用Param2 !=””判断?难道之前用这样判断都是错误的,而因为都有值过来所以没有报错?
if (Param2 != null && Param2.equals("updateImg")){//只上传图片,应用在更新商品图片中
String filePath = url+ul;
out.print("<script>window.opener.document."+formname+"."+formtextname+".value='"+filePath+"'</script>");
out.print("<script type='text/javascript'>alert('上传成功!');window.close();</script>");
}else{
////插入所有商品信息到数据库////
ProDao product = new ProDao();
int count1 = product.addPro(pname,pcuse,pcbrand,pcoldonew,url,ul,min_ul,file_size,pcont);
if (count1 > 0) {
out.print("<script type='text/javascript'>alert('添加成功!');window.location='addProducts.jsp';</script>");
} else {
out.print("<script type='text/javascript'>alert('添加失败!');history.back();</script>");
}
}
9. 读取数据库出现紊乱,即new.getTitle();有可能获得的是内容(Cont)的值,原因:
a) 实体类中构造函数的参数顺序与数据库操作类调用的构造函数参数顺序不一致(虽然类型匹配)
b)
10. 使用equals()同时判断字符串为空和空指针出现的问题
a) 问题:从表单获得一个字符串str,此字符串我需要转换为int类型,但是有时候str为空“”””,有时候为“null”,当为空时或者为null时我都设置str=”0”,从而可以顺利转换为int类型,这时候就需要进行判断了。
b) 因为要做两种可能性的判断在不能使用“str == “””判断的情况下只能“””.equals(str)”而不能str.equals(“”),因为str有可能是null,而null是没有equals方法的,如果使用str.equals(“”),那么当str为null时会报空指针错误。
c) 在判断字符串为null时只能使用“str==null”判断,上面说了不能使用“str.equals(“”)”,当然更不能使用“null.equals(str)”。
d) 综上同时判断字符串为空和空指针:if(“”.equals(str) || str == null)
11. 在分类别中,不要用插入类别名到商品实例中去,插入id比较好。因为,当类别名称更改后,如果使用类别名称那么商品实例中的类别名称将不会更改。使用类别id后就算类别名称更改也不会音箱id的指向,那么我们可以通过表连接查询来读取数据库。
12. 商品的分类很重要,主要取决于数据库的设计,如果数据库设计不到位,那么可能会需要很多代码实现某些功能,而在数据库设计很完善的情况下,这些代码算是冗余代码了!
13. 关于参数初始化值的一个问题:
String claU = request.getParameter("uCla");
String claB = request.getParameter("bCla");
String claO = request.getParameter("oCla");
int uCla = 0;//初始化值以后,即使参数在if中出现也可以在外调用了
int bCla = 0;
int oCla = 0;
ProClassDao getClass = new ProClassDao();
if(!"".equals(claU) || claU != null){
uCla = Integer.parseInt(claU);
}
if(!"".equals(claB) || claB != null){
bCla = Integer.parseInt(claB);
}
if(!"".equals(claO) || claO != null){
oCla = Integer.parseInt(claO);
}
14. 如果有多种可能性的值,可以先声明一个变量,并赋值,然后通过判断分别赋值,之后只要调用变量就行了。
15. 经常会出现这种情况,明明有两页,但是“下一页”连接还是page=1,这一般是由于page_Num不对,可能这个类中有多个page_Num我们引用的不是此方法调用的page_Num。
16. 经常疏忽的错误:
a) 分页的Javascript验证,不能提交非正整数。
17. 在分页显示中怎么同时获得所有商品的“List.size();”?
18. 使用rs.getDate();方法获得Mysql数据库中类型为datetime的数据(2010-3-26 15:15:15),为什么只能获得日期2010-3-26?使用SimpleDateFormat格式化,后面的时间也显示00:00:00?答案:
a) rs.getdate()用于得到yyyy-MM-dd类型的,也就是精确到天的那种;
b) rs.getTime()用于得到HH:mm:ss类型的,也就是光时间没日期的;
c) rs.getTimestamp()用于得到yyyy-MM-dd HH:mm:ss类型的,也就是既有日期又有时间的。
d) 一般数据库时间能精确到毫秒,所以就有后面一串SSS。
e) 应该用rs.getTimestamp(),得到的是java.sql.Timestamp,可以用java.util.Date去接。
19. 浏览器兼容性问题:
a) <script src="css_js/creMess.js" language="javascript" type="text/jscript"></script> 注意type支持持ie,所以最好不要用type
20. ajax传中文乱码问题解决:
a) 前台:
var cont=encodeURIComponent(encodeURIComponent(content));//对汉字进行转码处理,否则提交获得为null
var url="CheckMess? mCont="+cont;
b) 后台获取:
String mCont = request.getParameter("mCont");
String mcont = URLDecoder.decode(mCont, "UTF-8");//对已编码的汉字进行解码
21. Servlet中打印JavaScript代码弹出alert换行问题:需要用两个转义字符“\”即“\\”,前者是java代码换行,后者是JavaScript效果换行
out.print("<script type='text/javascript'>alert('此管理员已经是最后一个,不能删除!\\r您可以重新添加一个再删除!');history.back();</script>");
22. 自定义代码模板(名称+Ctrl+回车):

 【图片】

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics