整理日期:2012年5月11日
店铺地址:https://shop66907778.taobao.com/
参考链接:https://blog.csdn.net/weixin_41486034/article/details/106240240
WEBUI项目中遇到的问题总结
给自己一个历史的见证,该项目是一个WEB网管系统,由于涉及公司机密,所以不变明言,作为本项目的总负责,总是需要关注一些代码编写者遇到的一些问题。帮助他们找到一些解决办法。
HTML下拉菜单模板
横向下拉菜单例子
1:http://www.3lian.com/edu/2009/09-21/91481.html
纵向下拉菜单例子
1:http://www.68design.net/download/ad/68design2007021/index.htm
标题Java使用双缓冲消除图形闪烁现象
Java使用双缓冲消除图形闪烁现象2008-02-08 21:18画图时一般先重写paint方法,再通过重写update方法消除闪烁:
http://www.cqvip.com/Read/Read.aspx?id=9225319
调用过程repaint—>update—>paint
@Override
public void update(Graphics g) {
//1.得到缓冲图象
if(this.offScreenImage==null){
this.offScreenImage = this.createImage(GAME_WIDTH,GAME_HEIGHT);
}
//2.得到缓冲图象的画笔
Graphics gOffScreen = this.offScreenImage.getGraphics();
//3.绘制缓冲图象
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.black);
gOffScreen.fillRect(0, 0, GAME_WIDTH,GAME_HEIGHT);
gOffScreen.setColor©;
//4.调用paint(),将缓冲图象的画笔传入
paint(gOffScreen);
//5.再将此缓冲图像一次性绘到代表屏幕的Graphics对象,即该方法传入的“g”上
g.drawImage(offScreenImage, 0, 0, null);
}
JAVA相关技术文档
java.awt.Graphics类的使用:
http://www.cnblogs.com/Seamanm/archive/2011/01/07/1930350.html
http://www.gznc.edu.cn/yxsz/jjglxy/book/Java_api/java/awt/class-use/Graphics.html
画图工具——Graphics使用:
http://blog.csdn.net/nsrainbow/article/details/6678856
JSP高级编程2:
http://www.zxbc.cn/html/20070608/21383.html
可以的不过要用servlet画的,
import java.awt.image.,java.util.,javax.imageio.*
好象是这些包楼主可能要自己试一下,不清楚对不对的
response.setContenType(“image/jpeg”);
// 在内存中创建图象,可以想象成一个画板大小是20mm长,60mm宽
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文,g想象成一个画笔
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
//画线 x,y是坐标
g.drawLine(x,y,x+xl,y+yl);
//随即声成颜色
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(“画图”);在画版中画一个字符串,
}
还有画圆画方的很多方法,楼主可以试试
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, “JPEG”, response.getOutputStream());
然后页面用
jsp乱码问题的解决
jsp乱码问题的解决:
在Tomcat的conf目录下,找到server.xml,增加一下两句:
useBodyEncodingForURI=“true”
URIEncoding=“UTF-8”
增加前:
增加后:
而且JSP页面提交时参数必须添加encodeURI()转换函数:
例如:
var userName=document.getElementById(“userText”).value;
window.location="/user/user.do?method=create&UserName="+encodeURI(userName);
参考文档:
1、 最基本的乱码问题。
这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。
<%@ page language=“java” pageEncoding=“UTF-8”%>
<%@ page contentType=“text/html;charset=iso8859-1”%>
2、表单使用Post方式提交后接收到的乱码问题
这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
A、接受参数时进行编码转换
String str = new String(request.getParameter(“something”).getBytes(“ISO-8859-1”),“utf-8”) ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
B、在请求页面上开始处,执行请求的编码代码, request.setCharacterEncoding(“UTF-8”),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用
String str = request.getParameter(“something”);即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。
C、为了避免每页都要写request.setCharacterEncoding(“UTF-8”),建议使用过滤器对所有jsp
进行编码处理。这个网上有很多例子。请大家自己查阅。
3、表单get提交方式的乱码处理方式。
如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码/、。
解决办法:
A、使用上例中的第一种方式,对接受到的字符进行解码,再转码。
B、Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI=“true”
属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding(“UTF-8”)所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据
里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。
4、上传文件时的乱码解决
上传文件时,form表单设置的都是enctype=“multipart/form-data”。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是: 句号,逗号,等特殊符号变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。
解决方式: 下载commons-fileupload-1.1.1.jar 这个版本的jar已经解决了这些bug。
但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以及字符。
5、Java代码关于url请求,接受参数的乱码
url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。 如果设定了这个编码格式,则意味着所有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱码,例如
一个链接 Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用
String name = request.getParameter(“name”);得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写:
Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。
如果不设置这个参数URIEncoding=”UTF-8”, 会怎么样呢? 不设置则就使用了缺省的编码格式iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参数值最后加一个英文符号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。
6、 脚本代码关于url请求,接受到的参数乱码
脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果这个汉字参数不进行URIEncoding=”UTF-8”所指定的编码处理,则接受页面接受到的汉字也是乱码。脚本处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的方法对汉字进行编码即可。
7、 关于jsp在MyEclipse中打开的乱码问题
对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使用的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比较容易解决,直接到eclipse3.1的偏好设置里面找到general-〉edidor,设置为您的文件打开编码为utf-8即可。Eclipse会自动重新以新的编码格式打开。汉字即可正常显示。
8、 关于html页面在eclipse中打开出现乱码情况
由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。
一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可。
jsp页面往mysql里插入中文后数据库里显示乱码
jsp页面往mysql里插入中文后数据库里显示乱码:
1、JSP页面乱码
这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,
<%@ page contentType=“text/html;charset=utf-8” language=“java” %>
2、数据库乱码
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
在数据库连接字符串中加入编码字符集
String Url=“jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312”;
并在页面中使用如下代码:
response.setContentType(“text/html;charset=gb2312”);
request.setCharacterEncoding(“gb2312”);
3、中文作为参数传递乱码
当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter(“keywords”).getBytes(“8859_1”));
以上为现阶段遇到的乱码问题,乱码的核心问题还是字符集编码问题,只要掌握了这一点,一般的乱码问题都可以解决。
MySql连接远端数据库方法
需要在MySql客户端命令行执行授权:
mysql> grant all on . to ehang@10.10.1.102 identified by ‘ehang’;
mysql> grant all privileges on . to root@"%" identified by ‘ehangcom’ with grant option;
《摘自以下文章》
連接遠端的網站伺服器,可是連接時總是提示,不允許連接伺服器,我看了伺服器上沒有什麼限制,
防火牆都關了,可是還是這樣.這樣問題的解決辦法如下:
運行:
mysql> grant all on . to name@localhost identified by ‘name’ ;
如果希望這個mysql用戶允許某個來自IP的訪問,可以把localhost改成那個IP,如果希望允許某
個主機名的訪問,可以改為主機名,如果允許所有的遠端存取,似乎置空就可以了(未測試)。
運行:
mysql> grant all privileges on . to root@"%" identified by ‘12345’ with grant option;
上面的命令創建一個可以從任意機器以root登錄的超級帳號,口令是12345。
這樣,就可以使用方便的圖形工具進行登錄和操作,包括修改root的口令。
授权:
MySQL> grant select on db.* to user@host identified by ‘passwd’;
收权:
MySQL> revoke all on db.* from user@host;
生效命令:
MySQL> flush privileges;
参考连接:
实现MySQL远程连接:http://database.51cto.com/art/201005/202195.htm
MySQL 基本命令的用法:http://database.51cto.com/art/201005/201989.htm
安装MySQL在linux之下: http://database.51cto.com/art/201005/201977.htm
MySQL常用技巧: http://database.51cto.com/art/201005/201456.htm
MySql中文字符集问题
MYSQL 字符集问题
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)和排序方式(Collation)。
对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。
但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。
2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)
通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
±-------------------------±--------------------------------+
| Variable_name | Value |
±-------------------------±--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:“mysql-5.0.37"share"charsets” |
±-------------------------±--------------------------------+
mysql> SHOW VARIABLES LIKE ‘collation_%’;
±---------------------±----------------+
| Variable_name | Value |
±---------------------±----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
±---------------------±----------------+
3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如 default-character-set = utf8
character_set_server = utf8
修改完后,重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE ‘character%’;查看,发现数据库编码均已改成utf8
±-------------------------±--------------------------------+
| Variable_name | Value |
±-------------------------±--------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:“mysql-5.0.37"share"charsets” |
±-------------------------±--------------------------------+
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES ‘utf8’;它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
总结:
因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:
-
正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)
-
正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.
总结:你的字符集假如是gbk 就改gbk 这应该与你的web project中的所用的字符集一致 utf-8只是举例用的 要支持中文建议用gbk(繁简) gb2312(简)
MySql自动断开连接的解决办法
mysql长连接和短连接的问题=======================================================
http://www.qiyeku.com/xinwen/1076562.html
什么是长连接?
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。
总之,长连接和短连接的选择要视情况而定。
首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。
在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。如果是在mysql 5.1.6之前,那么则应在每次执行完real_connect 之后执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,则在connect之前执行一次就够了。
查看mysql连接数
mysqladmin -uroot -p processlist
实际的测试中我发现,当设置了MYSQL_OPT_RECONNECT为1时,超时后再查看processlist,则自动建立的连接不在列表中,但事实上连接确实建立并被使用了。
在MYSQL的默认设置中,如果一个数据库连接超过8小时没有使用(闲置8小时),服务器将断开这条连接,后续在该连接上进行的查询操作都将失败。网络上对该问题的描述非常多。也提供了相应的解决办法。我在这里提一些我自己的看法。
解决办法一:修改MYSQL服务器的配置参数
道理非常简单,MYSQL的默认设置是在数据库连接超过8小时没有使用后将其断开,如果我们将这个时间改成更大的数值,那么连接超时所需的时间就会更长,也就意味着更不容易超时。网络上提供的修改方法一般是修改/etc/my.cnf,在这个文件中添加一行wait_timeout=你需要设置的超时时间 。实际上有一种比较简单的方法来修改这个参数:
首先作为超级用户登录到MYSQL,注意必须是超级用户,否则后面会提示没有修改权限。然后输入
show global variables like ‘wait_timeout’;
回车执行后显示目前的超时时间:
±--------------±------+
| Variable_name | Value |
±--------------±------+
| wait_timeout | 28800 |
±--------------±------+
1 row in set (0.00 sec)
上面显示的是默认的超时时间,即8个小时(单位是秒)。现在重新设置该参数,例如我们要将超时时间设置成10个小时,可以输入:
set global wait_timeout=36000;
回车执行,显示:
Query OK, 0 rows affected (0.00 sec)
表示设置成功,可以重新使用show global variables like 'wait_timeout’来验证。
这种方法比较直观,而且设置的参数立即生效。但如果/etc/my.cnf中没有配置,则重启服务后,global变量会从/etc/my.cnf中读取新的变量值。
下边是一段示例代码:
if(!mysql_real_connect(&logdb, my_hostname, my_user, my_password, my_dbname, my_port, my_sock, 0)){
ast_log(LOG_ERROR, “Failed to connect to mysql database %s on %s.\n”, my_dbname, my_hostname);
use_mysql = 0;
} else {
char value = 1;
mysql_options(&logdb, MYSQL_OPT_RECONNECT, (char*)&value);
use_mysql = 1;
}
第二种方法:
这也是我个人认为最好的方法,即检查MySQL的链接状态,使其重新链接。
可能大家都知道有mysql_ping这么一个函数,在很多资料中都说这个mysql_ping的API会检查数据库是否链接,如果是断开的话会尝试重新连接,但在我的测试过程中发现事实并不是这样子的,是有条件的,必须要通过mysql_options这个C API传递相关参数,让MYSQL有断开自动链接的选项(MySQL默认为不自动连接),但我测试中发现PHP的MySQL的API中并不带这个函数,你重新编辑MySQL吧,呵呵。但mysql_ping这个函数还是终于能用得上的,只是要在其中有一个小小的操作技巧:
这是我的的数据库操作类中间的一个函数
function ping(){
if(!mysql_ping($this->link)){
mysql_close($this->link); //注意:一定要先执行数据库关闭,这是关键
t
h
i
s
−
>
c
o
n
n
e
c
t
(
this->connect(
this−>connect(this->t_dbhost,
t
h
i
s
−
>
t
d
b
u
s
e
r
,
this->t_dbuser,
this−>tdbuser,this->t_dbpw,
t
h
i
s
−
>
t
d
b
n
a
m
e
,
this->t_dbname,
this−>tdbname,this->t_pconnect);
}
}
我需要调用这个函数的代码可能是这样子的
for( i = 0 ; i=0; i=0;i<10;i++){
$str=file_get_contents(’http://www.aol.com’);
}
$db->ping(); //经过前面的网页抓取后,或者会导致数据库连接关闭,检查并重新连接
$db->query(’select * from table’);
ping()这个函数先检测数据连接是否正常,如果被关闭,整个把当前脚本的MYSQL实例关闭,再重新连接。
经过这样处理后,可以非常有效的解决MySQL server has gone away这样的问题,而且不会对系统造成额外的开销。
其他参考:
http://blog.csdn.net/joelovegreen/article/details/5566564
http://wenku.baidu.com/view/7756fec5bb4cf7ec4afed062.html
http://blog.chinaunix.net/uid-20790290-id-72609.html
http://www.diybl.com/course/7_databases/mysql/myxl/20100721/474746.html
http://sun-hejie.iteye.com/blog/528137
修改配置文件my.ini(linux: /etc/my.cnf)
两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是 1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。打开my.ini后在[mysqld]位置添加两个变量,赋值。(这里修改为388000)
[mysqld]
interactive_time = 388000
wait_timeout = 388000
查看超时变量命令:
mysql> show variables like ‘%timeout%’;
动态改变Frame的大小
动态改变Frame的大小
摘自:http://www.snut.edu.cn/wlkt/learn/tip/html/1.htm
大家应该见过有些网站如Msdn.microsoft.com,chinaasp的论坛等,一些分帧的页面在按下页面的某个按钮后,页面中的某个帧就会隐藏了,其实这种效果实现起来挺简单的,现在我们就来看看如何用Javascript来访问和修改Frame对象。
1.在开始前我先讲一下Frame的结构与语法: //下面是一个用frame页面的帧的代码
//这里我给了这个frameset一个id:frame_bottom这是为了方
便后面用Javascript来访问这个对象
//这是的用来显示当浏览器不支持frame时显示的页面内容
你的浏览器不支持frame
2.动态修改frameset的内容
看完上面的代码你应该知道定义 frame_bottom 这个frameset对象的结构代码为 cols=“200," 下面是动态修改的代码
如何再做一个按扭把隐藏的frame显示出来,相信你已经会做了:)