Eclipse配置tomcat服务器

Eclipse配置tomcat服务器

*近在用Eclipse开发web项目过程中,发现有的时候服务器启动了,项目也部署了,但是work中只有一个空的项目目录,然后项目访问的过程中,总是出错,查了一些资料,发现可以通过一下方式解决:

  1. 打开Eclipse,新建Tomcat服务器

%title插图%num

2.选择服务器版本和运行环境,然后直接Finish

%title插图%num

注意:*好是直接Finish,保证服务器*次创建,并且里面没有部署任何项目,只有这样才可以再第4步中修改Server Locations的配置

3.选择刚创建的服务器,右键选择Open打开服务器配置

%title插图%num

4.在Tomcat配置界面中修改Server Locations和Timeouts的配置

%title插图%num

注意:Server Location有三种配置,分别是:使用工作空间路径、使用Tomcat安装路径、自定义路径;我这里选择了第三种自定义路径,主要考虑方便去管理,请根据自己需要自行选择,但是Deploy Path:就是项目部署的目录一定要把默认的改为webapps;Timeouts的时间设置建议都要改一改,否则会出现项目部署之后丢失文件或不成功的情况
*后:通过以上的配置,在使用eclipse开发调试的时候基本上就不会出现部署成功,编译项目文件夹为空的问题了
结语:
登高者必自卑,行远者必自迩,在这个世界上,重要的不是你正站在哪里,而是你前进的方向!

PYTHON 获取淘宝服务器时间 显示在tkinter的UI

代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import tkinter
import http.client
import time

def get_webservertime(host):
conn = http.client.HTTPConnection(host)
conn.request(“GET”, “/”)
r = conn.getresponse()
ts = r.getheader(‘date’) # 获取http头date部分
# 将GMT时间转换成北京时间
ltime = time.strptime(ts[5:25], “%d %b %Y %H:%M:%S”)
ttime = time.localtime(time.mktime(ltime) + 8 * 60 * 60)
dat = “%u-%02u-%02u” % (ttime.tm_year, ttime.tm_mon, ttime.tm_mday)
tm = “%02u:%02u:%02u” % (ttime.tm_hour, ttime.tm_min, ttime.tm_sec)
return tm

def tick():
global time1
# 获取时间
time2 = get_webservertime(‘www.taobao.com’)
# 如果时间发生变化,代码自动更新显示的系统时间
if time2 != time1:
time1 = time2
clock.config(text=time2)
# calls itself every 200 milliseconds
# to update the time display as needed
# could use >200 ms, but display gets jerky
clock.after(200, tick)

win = tkinter.Tk()
win.title(“获取淘宝服务器时间”)
time1 = ”
clock = tkinter.Label(win, font=(‘times’, 100, ‘bold’), bg=’green’)
clock.grid(row=0, column=1)
tick()
win.mainloop()

效果
%title插图%num

mysql主从数据库同步和字符集问题

1.mysql主从数据库同步问题

在使用mysql 5.0 主从数据库同步时遇到问题一些问题:
在主从数据库同步时,我们可能会选择哪些数据库要求同步,而那些数据库忽视,这两个功能是靠/etc/my.cnf文件中的两个键名 binlog_do_db 和 binlog_ignore_db 来实现的
binlog_do_db = 填写需要同步的数据库,多个数据库则用‘,’隔开
binlog_ignore_db = 填写不需同步的数据库,多个数据库用 ‘,’隔开
主数据库读取键值,可选择生成数据库日志文件。从服务器根据主服务器日志文件来更新自己的数据库
理论上这些都是可行的,然而实际实现中会遇到一些问题,问题如下:
从终端用 mysql -u -p 连接mysql数据库,主服务器执行数据库操作,在binlog_do_db范围内的数据库都会做日志记录,使用mysql提供的api函数用程序连接数据库执行sql语句缺不写入日志
几经周转测试,终于发现将binlog_ignore_db去掉,而且是连键名一起注释掉,这时候主从数据库同步方可成功,API函数进行的数据库操作可以写入日志了
这不知是官方bug,还是自己哪方面配置数据库错误。解决方案目前为止只限于此。
 

2.mysql 字符集设置

2.1终端访问:

通常终端访问只需在/etc/my.cnf中将default-charcter-set=utf8就不会出现乱码

2.2程序连接:

先看mysql字符集问题

数据库链接命令行中输入
show variables like ‘char%’;
得到以下结果
+————————–+—————————-+
| 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       | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.28 sec)

这个就是字符集表了

问题1:向默认字符集为utf8的数据表插入utf8数据前没有设置连接字符集,查询时设置字符集为utf8,导致的查询乱码。

1. 在插入的时候根据mysql服务的默认设置,character_set_client、character_set_connection和character_set_results均为latin1;所以在插入的时候,程序会把utf8字符集当成latin1(这一步不会转换,只是取数据),那么存储过程中数据会经过以下变换 latin1->latin1=>utf8的字符集转换过程,这一过程每个插入的汉字会经历程序到动态库;所以字符都会从原来的3个字节(程序utf8)在*后一步(latin1=>utf8)变成6个字节保存。

2. 查询时的结果将经过utf8=>utf8的字符集转换过程,将保存的6个字节原封不动返回,产生乱码。

图片2

图1

问题2: 向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8,取出数据出错

插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8;

插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有/u0000~/u00ff范围以外的Unicode字符,会因为无法在latin1字符集中表示而被转换为“?”(0x3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。

图片3

图2

 

 

3. mysql API PHP C

一般页面的PHP程序运行时间较短,在连接到数据库后用set names语句设置一次连接字符即可。但当使用长连接时,请注意保持通畅并在端来连接后再次用set names设置连接字符集。

 

   问题1:
为什么有时候我们用终端登录的时候就不是乱码,但是用程序进行sql操作的时候就出现乱码了呢。
answer:因为程序链接的时候用的是动态链接库连接数据库的,而终端用的mysql_client自己安装的程序,这两个字符集可能会不相同。
问题2:
为什么程序运行有一段时间后就开始出现乱码了,插入与取出数据都是乱码了。
answer:connection有一个时间,超时就会重新连接 ,有两种设置方法
3.1 执行sql语句 set names ‘utf8’ 2
3.2 mysql_options(ledMysql, MYSQL_SET_CHARSET_NAME, “utf8”);
*种方法只是暂时有效,第二种方法再每次重连的时候都会设置字符集为utf8
   使用mysql api时初始化数据库句柄后马上用 mysql_option设定MYSQL_SET_CHARASET_NAME属性为utf8,这样就不需要使用set names语句指定连接字符集。mysql_ping重新断开连接时也会吧连接字符重置为utf8,不需每次重连都set names
mysql带来的问题主要是字符集的问题。其实有一种更*的方法就是在安装数据库的时候只保留utf8字符集那不管怎么连接都不会出现乱码了。

ATTENTION:

    用程序连接数据库的时候调用的是动态链接库libmysqlclient.so or libmysqlclient.a

my.cnf 中的default_character_set 设置只影响在终端这种用mysql命令连接服务器时连接字符集,不会对使用libmysqlclient库连接mysql的应用程序产生任何作用。

 

4. 编译问题

./configure –prefix=/usr/local/mysql –sysconfdir=/etc –localstatedir=/var/lib/mysql –enable-local-infile –enable-assembler –with-charset=utf8  –with-big-tables  –with-plugin-partition –with-plugin-federated

 

如果是非编译版本,安装的时候请注意使用,否则可能会安装到错误的位置

/usr/local/mysql/bin/mysqld_install –basedir=/usr/local/mysql –ldata=/var/lib/mysql

 

一般情况下都是不能正常链接数据库,错误提示一般为:

ERROR 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

其实网上大家问的*多的都是整个问题,说什么链接不到mysqld.sock,其实大家不妨看看mysql的错误日志就明白怎么回事,我这里的错误日志是在

/var/lib/mysql/*.err 你会发现mysql只所以不能启动,是因为/var/lib/mysql的权限不允许mysql服务访问,英文mysql默认是调用mysql用户来启动服务的,好了,既然知道是什么原因找到不能启动,那就简单了。我们只要

chown -R mysql:mysql /var/lib/mysql 就行,如果还是启动不了,再慢慢调试权限,反正一般启动不了都是权限的问题。

Oralce如何选择合适的索引类型

索引就好象一本字典的目录。凭借字典的目录,我们可以非常迅速的找到我们所需要的条目。数据库也是如此。凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表。

虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用。这就好像即使字典没有目录的话,用户仍然可以使用它一样。可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典。数据库也是如此。若没有建立相关索引的话,则数据库在查询记录的时候,不得不去查询整个表。当表中的记录比较多的时候,其查询效率就会很低。所以,合适的索引,是提高数据库运行效率的一个很好的工具。

不过,并不是说表上的索引越多越好。过之而不及。故在数据库设计过程中,还是需要为表选择一些合适的索引。宁缺勿烂,这是建立索引时的一个具体选择。在理论上,虽然一个表可以设置无限的索引。但是,数据库管理员需要知道,表中的索引越多,维护索引所需要的开销也就越大。每当数据表中记录有增加、删除、更新变化的时候,数据库系统都需要对所有索引进行更新。故数据库表中的索引*对不是多多益善。具体来说,在索引建立上,笔者对大家有如下建议。

  建议一:在基数小的字段上要善于使用位图索引。

基数是位图索引中的一个基本的定义,它是指数据库表中某个字段内容中不重复的数值。如在员工信息表中的性别字段,一般就只有男跟女两个值,所以,其基数为2;婚姻状况字段的话,则其只有已婚、未婚、离婚三种状态,其基数就为3;民族一览内也是只有有限的几个值。

对于要查询基数小的字段,如现在用户想查找所有婚姻状况为“已婚”的“女性”时,利用位图索引可以提高查询的效率。这主要是因为标准索引是通过在索引中保存排序过的索引列以及对应的ROWID来实现的。若我们在基数小的列上建立标准索引的话,则其会返回大量的记录。

而当我们在创建位图索引的时候,在Oracle会对整个表进行扫描,并且会为索引列的每个取值建立一个位图。若内容相同,则在位图上会以一个相同的数字表示。此时,若这个字段的基数比较小的话,则若需要实现对整个字段的查询的话,效率就会非常的高。因为此时,数据库只要位图中数字相同的内容找出来即可。

除了在数据表某列基数比较小的情况下,采用位图索引外,我们往往在一些特殊的情况下,也会建议采用位图索引。*常见的情况是,在Where限制条件中,若我们多次采用AND或者OR条件时,也建议采用位图索引。因为当一个查询饮用了一些部署了位图索引的列的时候,这些位图可以很方便的与AND或者Or 运算符操作结合以快速的找出用户所需要的记录。

但是,这里要注意,不是在条件语句中包含运算符的时候,采用位图索引都能够提供比较高的效率。一般来说,只有AND 或者OR运算符的时候,位图索引才会比较具有优势。若此时用户采用大于号或者不等于号作为条件语句中的限制条件的时候,则往往采用标准索引具有更大的优势。

所以,笔者在数据库设置中,一般只有在三种情况下才采用位图索引。一是列的基数比较小,而有可能需要根据这些字段的内容查找相关的记录;二是在条件语句中,用到了AND或者OR运算符的时候。除了这两种情况外,*好能够采用其他适合的索引。第三种情况是,需要用到NULL作为查询的限制条件。因为标准查询一般情况下,会忽略所有的NULL值列。也就是说,若需要查询“所有没有身份证号码”的员工的信息的时候,标准索引并不能够起到加速查询速度的作用。此时,就需要采用位图索引。因为位图索引会记录相关的NULL值列信息。

  建议二:创建索引的一些限制条件。

并不说,表或者列建立的索引越多越好。相反,索引建的越多,有时会反而会影响数据库运行的整体性能。所以,在建立索引的时候,仍然会有一些限制条件。

一是不要对一些记录内容比较少的表建立索引。在一个应用系统设计的时候,如设计一个ERP系统的数据库,其虽然有几千张表。但是,并不是每张表都有大量记录的。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条。如员工登陆帐户密码表、企业部门信息表等等。对于这些记录内容比较少的表,我们建立*好不要为其建立索引。无论是表上的,还是字段上,都不要建立索引。

二是若表中的内容比较大,但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引。如现在在ERP系统中,有一张表是“AD_Table”。其存储的是这个数据库中相关表的信息。这张表只有在数据库设计的时候才会用到。故这张表中的记录虽然比较多,但是由于用户用的比较少,所以,一般没有必要为这张表建立列级别上的索引。而直接用表索引来代替。

三是在一些NULL字段上,要根据实际情况来判断是否要建立索引。如现在有一张人事档案的表格,其上面有两个字段,分别为“身份证号码”与“地区”。有时会为了某个原因,企业需要所有员工都在系统中登记他们的身份证号码,以方便他们办工资卡、社会保险等等。所以人事管理可能需要经常的查询系统,看看有没有没有身份证号码的员工信息。此时,就需要利用条件“IS NULL”来查询我们所需要的记录。故为了提高查询效率,若某个记录可能为空,并且经常需要以NULL为条件进行查询的时候,则*好给这个字段添加一个索引,并且*好建立位图索引。相反,若虽然可能会以NULL这个条件作为查询的限制语句,但是,用的不是很多的时候,则就没有必要为其建立索引。

  建议三:多表连接查询的索引设计。

如现在有一个人事管理系统。人事经理想知道员工的社保缴纳情况。他需要知道员工的姓名、职务、户籍性质(农民户口跟居民户口费用不一样)、缴纳的情况等等。但是,这些信息包含在不同的表中。因为为了提高数据库的性能,在表中存储的可能只是某些序号,而不是具体的内容。如在社保表中,存储的是员工对应的编号,而不是员工的名字。所以,要得到这份报表的话,就可能需要关联员工基本信息表、公司组织结构表等表格,才能够查询到用户所需要的内容。

为此,就需要利用Join语句,把这些表格关联起来。为了提高数据库的查询效率,这些用来关联的字段,*好能够建立索引。这可以显著的提高查询的速度。

  建议四:在表的更新速度与查询速度之间寻求一个平衡点。

众所周知,索引本身并不影响数据库的使用,其主要是为了提高数据库的查询效率。但是,由于当数据库的表中的数据更新的时候,包括记录的增加、删除、更改等等,都会对虽有的索引进行更新。

很明显,索引虽然可以提高查询速度。但是,也会对一些表的更新操作产生不良的影响。当在表中建立的索引越多,这个不利影响也会越大。故数据库管理员在设置索引的时候,还需要注意,在这两个之间需要一个均衡点。

按照一般的理论来说,当某个表多数用来查询、更新相对来说比较上的话,则要多多采用索引。相反,当某个表记录更新居主导,查询相对来说比较少的话,则不要建立太多的索引,避免对更新的速度差生不利影响。

在实际工作中,若某个表频繁的被视图所调用的话,则*好就好设置比较多的索引了。

解决Linux中文乱码

方法一:    修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030

对于其他用户,也必须相应修改该文件

    使用该方法时putty能显示中文,但桌面系统是英文,而且所有的网页中文显示还是乱码

方法二:

引用:

修改/etc/sysconfig/i18n文件

#LANG=”en_US.UTF-8″
#SUPPORTED=”en_US.UTF-8:en_US:en”
#SYSFONT=”latarcyrheb-sun16″

改为

LANG=”zh_CN.GB18030″
LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
SUPPORTED=”zh_CN.GB18030:zh_CN:zh”
SYSFONT=”lat0-sun16″
SYSFONTACM=”8859-15″

linux centos开启 80、22、3306端口方案

1、设定
[root@localhost ~]# /sbin/iptables -I INPUT -p tcp –dport 80 -j ACCEPT
[root@localhost ~]# /sbin/iptables -I INPUT -p tcp –dport 22 -j ACCEPT
[root@localhost ~]# /sbin/iptables -I INPUT -p tcp –dport 3306 -j ACCEPT
2、保存
[root@localhost ~]# /etc/rc.d/init.d/iptables save
3、重启防火墙
[root@localhost ~]# service iptables restart
4、查看
[root@localhost ~]# /etc/init.d/iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306
2    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
3    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

5款开源云计算平台推荐

云计算是个IT界火热的词汇,开源云计算更是被认为是IT的趋势。我们熟知的几个IT巨头的云计算平台,如亚马逊EC 2、IBM的蓝云、微软的Azure、Sun Cloud等,那么开源云计算的平台又有哪些呢?以下列举了开源中国社区收录的5款知名的开源云计算平台。

1、AbiCloud企业级开源云计算平台

Abiquo公司推出的一款开源的云计算平台——“abiCloud”,使公司能够以快速、简单和可扩展的方式创建和管理大型、复杂的IT基础设施 (包括虚拟服务器,网络,应用,存储设备等等)。AbiCloud较之同类其他产品的一个主要的区别在于其强大的Web界面管理。你可以通过拖拽一个虚拟 机来部署一个新的服务。这个版本允许通过VirtualBox部署实例,它还支持VMware,KVM和Xen。

%title插图%num

abiCloud架构如下图所示:

%title插图%num

2、Eucalyptus 开源云计算平台

Eucalyptus 项目(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems)是 Amazon EC2 的一个开源实现,它与商业服务接口兼容。和 EC2 一样,Eucalyptus 依赖于 Linux 和 Xen 进行操作系统虚拟化。Eucalyptus 是加利福尼亚大学(Santa Barbara)为进行云计算研究而开发的。您可以从该大学的网站上下载它,或者通过 Eucalyptus Public Cloud 体验它,不过后者有一些限制。

%title插图%num

3、10gen  MongoDB 开源高性能存储平台

10gen 既是一个云平台,又是一个可下载的开放源代码包,可用于创建您自己的私有云。10gen 是类似于 App Engine 的一个软件栈,它提供与 App Engine 类似的功能 — 但有一些不同之处。通过 10gen,可以使用 Python 以及 JavaScript 和 Ruby 编程语言开发应用程序。该平台还使用沙盒概念隔离应用程序,并且使用它们自己的应用服务器的许多计算机(当然,是在 Linux 上构建)提供一个可靠的环境。

%title插图%num

4、Enomalism   弹性计算平台

Enomaly’s Elastic Computing Platform (ECP)是一个可编程的虚拟云架构,ECP平台可以简化在云架构中发布应用的操作。

云计算平台是一个 EC2 风格的 IaaS 。Enomalism 是一个开放源代码项目,它提供了一个功能类似于 EC2 的云计算框架。Enomalism 基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。与其他纯 IaaS 解决方案不同的是,Enomalism 提供了一个基于 TurboGears Web 应用程序框架和 Python 的软件栈。

%title插图%num

5、云计算平台 Nimbus

Nimbus由网格中间件Globus提供,Virtual Workspace演化而来,Eucalyptus 一样,提供EC2的类似功能和接口