2010年3月30日
在进行文件下载时liunx下出现中文文件名乱码,windows下却没有.可能是不同操作系统的编码方式不同?(含糊不清的说法),用
Properties initProp = new Properties(System.getProperties());
System.out.println(prop.getProperty("file.encoding"));能得到编码方式都是UTF-8
后来发现用
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");不管linux还是windows 下用火狐都是显示正常的,IE下却显示乱码,所以问题出在浏览器,得在程序中加入判断(分别处理firefox跟Ie):
//判断是否是使用IE的方法
String userAgent = request.getHeader("User-Agent");
boolean isIE = false;
//userAgent.toLowerCase().indexOf("msie")
if(userAgent.indexOf("MSIE") > 0){
isIE = true;
}
if(isIE){
fileName = new String(fileName.getBytes("gb2312"), "iso-8859-1");
}else{
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
}
一个同学前几天遇到一个问题,今天我试着看了一下。
项目没有错误,在项目部署到tomcat后,tomcat启动时报错:
java.lang.UnsupportedClassVersionError: Bad version number in .class file 。。。
这个问题我原来遇到过,原因应该是编译java时生成的class文件,在运行时用到的JRE和class文件版本不一致造成的。
1 如果是一般的java程序:
可以在MyEclipse中修改JRE的路径和版本。在Window->Preferences中,打开如下位置,就可修改JRE:
修改完之后,最好重新编译一下,选Project->Clean... 选项,然后选择是所有的项目都要重新编译,还是只重新编译指定的项目,然后就应该没问题了。
今天一开始我也是这么做的,但是还是报错,在网上搜了一下之后,因为这是Web项目,程序当然是在Tomcat上运行的,所以我们这么改当然不行。
2 如果是Web 程序
就要修改Tomcat运行时的JDK环境了,如下图:
把JDK的路径和之前Installed JRE的设置成一样的,这个问题就解决了!(虽然这里面设置的是JDK的路径,但是我觉得其实就是在设置JRE的路径,因为java程序运行的时候需要的 是JRE,而不是JDK。我们装JDK的时候,一般都装了2个JRE,一个是JDK里面的JRE,还有一个和JDK平级的JRE,刚才我上网查了一下,这 两个JRE的区别不大,大家也可以去查一下,每次都可以选择任何一个JRE,但是之后配置的吆喝前面的一致。)
如果不清楚JDK和JRE的关系的,可以上网查一下。
一般情况下,我们运行别人的程序可能会遇到这个问题。
再做个小小的延伸。。
这个项目编译并没有报错,如果我们导入别人的项目之后,出现了很多错误,那就是JDK版本的问题了,可以在这里修改:
可以选择1.3,1.4,5.0,6.0.
转 http://apps.hi.baidu.com/share/detail/1776104
http://mayuqi827.javaeye.com/blog/804409
LINUX基本操作命令
基本操作命令
----------------------------------------------------------------------
----------------------------------------------------------------------
ls #以默认方式显示当前目录文件列表
ls –a #显示所有文件包括隐藏文件
ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
ls --color=never *.so > obj #不显示文字颜色,将所有so文件记录到obj文件中
----------------------------------------------------------------------
cd dir #切换到当前目录下的dir目录
cd / #切换到根目录
cd .. #切换到到上一级目录
cd ../.. #切换到上二级目录
cd ~ #切换到用户目录,比如是root用户,则切换到/root下
----------------------------------------------------------------------
rm file #删除某一个文件
rm -fr dir #删除当前目录下叫dir的整个目录
----------------------------------------------------------------------
cp source target #将文件source 复制为 target
cp /root/source . #将/root下的文件source复制到当前目录
cp –av soure_dir target_dir #将整个目录复制,两目录完全一样
cp –fr source_dir target_dir
#将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同
----------------------------------------------------------------------
mv source target #将文件source更名为target
----------------------------------------------------------------------
diff dir1 dir2 #比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出
diff file1 file2
#比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的
comm file1 file2 #比较文件,显示两个文件不相同的内容
----------------------------------------------------------------------
echo message #显示一串字符
echo "message message2" #显示不连续的字符串
cat:
cat file #显示文件的内容,和DOS的type相同
cat file | more #显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能
more #分页命令,一般通过管道将内容传给它,如ls | more
----------------------------------------------------------------------
export LC_ALL=zh_CN.GB2312 #将环境变量LC_ALL的值设为zh_CN.GB2312
export DISPLAY=0:0 #通过该设置,当前字符终端下运行的图形程序可直接运行于Xserver
date #显示当前日期时间
date -s 20:30:30 #设置系统时间为20:30:30
date -s 2002-3-5 #设置系统时期为2003-3-5
clock –r #对系统Bios中读取时间参数
clock –w #将系统时间(如由date设置的时间)写入Bios
----------------------------------------------------------------------
eject #umout掉CDROM并将光碟弹出,但cdrom不能处于busy的状态,否则无效
----------------------------------------------------------------------
du #计算当前目录的容量
du -sm /root #计算/root目录的容量并以M为单位
find -name /path file #在/path目录下查找看是否有文件file
grep -ir “chars” #在当前目录的所有文件查找字串chars,并忽略大小写,-i为大小写,-r为下一级目录
----------------------------------------------------------------------
vi file #编辑文件file
vi 原基本使用及命令:
输入命令的方式为先按ctrl+c, 然后输入:x(退出),:x!(退出并保存) :w(写入文件),:w!(不询问方式写入文件), :r
file(读文件file) ,:%s/oldchars/newchars/g(将所有字串oldchars换成newchars)
这一类的命令进行操作
----------------------------------------------------------------------
man ls #读取关于ls命令的帮助
man ls | grep color #读取关于ls命令的帮助并通过grep程序在其中查找color字串
----------------------------------------------------------------------
startx #运行Linux图形有环境
Xfree86 #只运行X图形server
----------------------------------------------------------------------
reboot #重新启动计算机
halt #关闭计算机
init 0 #关闭所有应用程序和服务,进入纯净的操作环境
init 1 #重新启动应用及服务
init 6 #重新启动计算机
----------------------------------------------------------------------
扩展命令
----------------------------------------------------------------------
----------------------------------------------------------------------
tar xfzv file.tgz #将文件file.tgz解压
tar xfzv file.tgz -C target_path #将文件file.tgz解压到target_path目录下
tar cfzv file.tgz source_path #将文件source_path压缩为file.tgz
tar c directory > directory.tar #将目录directory打包成不压缩的directory.tar
gzip directory.tar #将覆盖原文件生成压缩的 directory.tar.gz
gunzip directory.tar.gz #覆盖原文件解压生成不压缩的 directory.tar。
tar xf directory.tar #可将不压缩的文件解包
----------------------------------------------------------------------
dmesg #显示kernle启动及驱动装载信息
uname #显示操作系统的类型
uname -R #显示操作系统内核的version
----------------------------------------------------------------------
strings file 显示file文件中的ASCII字符内容
----------------------------------------------------------------------
rpm -ihv program.rpm #安装程序program并显示安装进程
rpm2targz program.rpm program.tgz #将rpm格式的文件转换成tarball格式
----------------------------------------------------------------------
su root #切换到超级用户
sulogin /dev/tty4 #在tty4即alt+F4终端等待用户登陆或直接登陆开启一个shell
chmod a+x file #将file文件设置为可执行,脚本类文件一定要这样设置一个,否则得用bash file才能执行
chmod 666 file #将文件file设置为可读写
chown user /dir #将/dir目录设置为user所有
----------------------------------------------------------------------
mknod /dev/hda1 b 3 1 #创建块设备hda1,主设备号为3,从设备号为1,即master硬盘的的第一个分区
mknod /dev/tty1 c 4 1 #创建字符设备tty1,主设备号为4,众设备号为1,即第一个tty终端
----------------------------------------------------------------------
touch /tmp/running #在/tmp下创建一个临时文件running,重新启动后消失
----------------------------------------------------------------------
sleep 9 #系统挂起9秒钟的时间
----------------------------------------------------------------------
lpd stop 或 cups stop #停止打印服务程序
lpd start 或 cups start #启动打印服务程序
lpd restart 或 cups restart #重新启动打印服务程序
lpr file.txt #打印文件file.txt
----------------------------------------------------------------------
fdisk /dev/hda #就像执行了dos的fdisk一样
cfdisk /dev/hda #比fdisk界面稍为友好些
mount -t ext2 /dev/hda1 /mnt #把/dev/hda1装载到 /mnt目录
df #显示文件系统装载的相关信息
mount -t iso9660 /dev/cdrom /mnt/cdrom #将光驱加载到/mnt/cdrom目录
mount-t smb //192.168.1.5/sharedir /mnt -o
username=tomlinux,password=tomlinux
#将windows的的共享目录加载到/mnt/smb目录,用户名及密码均为tomlinux
mount -t nfs 192.168.1.1:/sharedir /mnt
#将nfs服务的共享目录sharedir加载到/mnt/nfs目录
umount /mnt #将/mnt目录卸载,/mnt目录必须处于空闲状态
umount /dev/hda1 #将/dev/hda1设备卸载,设备必须处于空亲状态
sync #将cache中的内容与磁盘同步,在Linux中复制文件,一般要系统空闲才去写文件
e2fsck /dev/hda1 #检查/dev/hda1是否有文件系统错误,提示修复方式
e2fsck -p /dev/hda1#检查/dev/hda1是否有错误,如果有则自动修复
e2fsck -y /dev/hda1#检查错误,所有提问均于yes方式执行
e2fsck -c /dev/hda1#检查磁盘是否有坏区
mkfs /dev/hda1 #格式化/dev/hda1为ext2格式
mkfs.minix /dev/hda1 #格式化/dev/hda1为minix格式文件系统
mfks /dev/hda9 #格工化/dev/hda9为Linux swap格式
swapon /dev/hda9 #将swap分区装载当作内存来用
swapoff /dev/hda9 #将swap分区卸载
----------------------------------------------------------------------
lilo #运行lilo程序,程序自动查找/etc/lilo.conf并按该配置生效
lilo -C /root/lilo.conf #lilo程序按/root/lilo.conf配置生效
grub #在Linux shell状态下运行boot loader设置程序
grub-install
#安装grub磁盘引导程序,成功后升级内核无须像lilo一样要重新启动系统,只需修改/etc/grub.conf即可实现新引导配置
rdev bzImage #显示kernel的根分区信息
rdev bzImage /dev/hda1
#将kernel的根分区设置为/dev/hda1,这在没有lilo等引导程序的系统中非常重要.
----------------------------------------------------------------------
dd if=/dev/fd0 of=floppy.fd #将软盘的内容复制成一个镜像,功能与旧石器时代常用的hd-copy相同
dd if=/dev/zero of=root.ram bs=1024,count=1024
#生成一个大小为1M的块设备,可以把它当作硬盘的一个分区来用
mkfs root.ram #将块设备格式化为ext2格式
dd if=root.ram of=/dev/ram0 #将init.rd格式的root.ram的内容导入内存
mount /dev/ram0 /mnt #ramdisk /dev/ram0装载到/mnt 目录
----------------------------------------------------------------------
gcc hello.c #将hello.c编译成名为a.out二进制执行文件
gcc hello.c -o hello #将hello.c编译成名为hello的二进制执行文件
gcc -static -o hello hello.c #将hello.c编译成名为hello的二进制静态执行文件
ldd program #显示程序所使用了哪些库
objcopy -S program #将程序中的符号表及无用的调试信息去掉,可以小很多
----------------------------------------------------------------------
strace netscape
#跟踪程序netscape的执行,看调用的库,环境变量设置,配置文件,使用的设备,调用的其它应用程序等,在strace下,程序干了什么东东一目了
然。
ps #显示当前系统进程信息
ps –ef #显示系统所有进程信息
kill -9 500 #将进程编号为500的程序干掉
killall -9 netscape #将所有名字为netscape的程序杀死,kill不是万能的,对僵死的程序则无效。
top #显示系统进程的活动情况,按占CPU资源百分比来分
free #显示系统内存及swap使用情况
time program #在program程序结束后,将计算出program运行所使用的时间
----------------------------------------------------------------------
chroot . #将根目录切换至当前目录,调试新系统时使用
chroot /tomlinux #将根目录切换至/tomlinux目录
chroot /tomlinux sbin/init #将根目录切换至/tomlinux并执行sbin/init
adduser id #增加一个叫id的用户
userdel id #增除叫id的用户
userlist #显示已登陆的用户列表
passwd id #修改用户id的密码
passwd -d root #将root用户的密码删除
chown id /work #指定/work目录为id用户所拥有
----------------------------------------------------------------------
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
#设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0
ifconfig eth0:1 192.168.1.2 #捆绑网卡1的第二个地址为192.168.1.2
ifconfig eth0:x 192.168.1.x #捆绑网卡1的第二个地址为192.168.1.x
ifconfig down eth1 #关闭第二块网卡,使其停止工作
hostname -F tomlinux.com #将主机名设置为tomlinux.com
route #显示当前路由设置情况
route add default gw 192.168.1.1 metric 1 #设置192.168.1.1为默认的路由
route del default #将默认的路由删除
dhcp #启动dhcp服务
dhclient #启动dhcp终端并自动获取IP地址
ping 163.com #测试与163.com的连接
ping 202.96.128.68 #测试与IP 202。96.128.68的连接
----------------------------------------------------------------------
probe rtl8139 #检查驱动程序rtl8139.o是否正常工作
lsmod #显示已装载的驱动程序
insmod rtl8139.o #装载驱动程序rtl8139.o
insmod sb.o io=0x280 irq=7 dma=3 dma16=7 mpu_io=330
#装载驱动程序并设置相关的irq,dma参数
rmmod rtl8139 #删除名为rtl8139的驱动模块
gpm -k #停止字符状态下的mouse服务
gpm -t ps2 #在字符状态下以ps2类型启动mouse的服务
----------------------------------------------------------------------
telnet 192.168.1.1 #登陆IP为192.168.1.1的telnet服务器
telnet iserver.com #登陆域名为iserver.com的telnet服务器
ftp 192.168.1.1 或 ftp iserver.com #登陆到ftp服务
1tomcat 部署网站 去掉端口号和项目名称
去除端口号 conf-->server.xml中查找原始的端口号(如8080),修改为80后,即可在访问时不用输入端口号。不过要注意防止其它程序占用80端口。
项目名称 server.xml <Context path="/myapp" reloadable="true" docBase="D:"myapp" workDir="D:"myapp"work"/>
2 TOMCAT 如何配置多端口
1.修改端口:
在Tomcat的安装目录下的"conf目录下,打开server.xml,
找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
将8080改为你想要的端口8081
2.映射路径:
还是在server.xml配置文件中,
在</host>这个结束标签之前加上如下的配置信息:
<Context
path="/myapp"
reloadable="true"
docBase="e:"myApp" />
3.添加端口:
在server.xml中添加以下:
<Connector port="65535" protocol="HTTP/1.1"
connectionTimeout="20000" />
Tomcat的端口号最大到65535.
4.上面的端口对于原来Tomcat中的其他Web应用也可以使用,
下面是独立的,只有你的e:"myApp中的Web应用可用,
也就是在server.xml中的</Service>下另外建立一个Service:
<Service name="test">
<Connector port="65535" protocol="HTTP/1.1"
connectionTimeout="20000" />
<Engine name="myengine" defaultHost="myhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="myhost" appBase="e:"myApp"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
另外:
1818189端口?有这么多位吗?
我印象中端口号范围是0~65535,怎么还有这么多位的端口?
http://ttov.blog.163.com/blog/static/3822715201072692912584/
1、安装VMware workstation。
2、安装guest系统,这里我安装的Red Hat
Linux9,安装过程中确保网络连接选择的是NAT方式,当然可以在安装完后进行修改。
3、到windows XP
中,查看所有的网络连接,你应该发现除了原有的网卡之外,又多了Vmnet1和Vmnet8。
vmnet1是hostonly的接口,而Vmnet8是就是我们要使用的NAT的网络接口。
4、在win主机上用ipconfig查看VMnet8的IP地址,
一般是192.168.X.1/255.255.255.0,此时VMnet8的设置应该是自动获取IP,现在改成静态IP,并把此IP直接填入
VMnet8里,不设网关。
5、同时在VM网络设置里的NAT项中查看VMnet8,一般是
192.168.X.2/255.255.255.0这个地址就是VMnet8,NAT的网关。
6、现在在LINUX下把网卡IP设置成和VMnet8一个网段的
IP(192.168.X.Z/255.255.255.0)
7、网关设置成刚才查看的那个IP192.168.X.2即可。
8、DNS和你host主机的一样就可以。
9、设置完成后,重新启动linux的网络服务。
Linux命令
netconfig 设置IP
ifconfig 查看
reboot 重启
services network restart (重启网络)
http://www.cnblogs.com/hakuci/archive/2008/12/07/1349547.html
一般情况下,安装完vmware,不做其他设置,直接使用nat模式就可以与主机共享上网了。但如果你用的是某些精简版,或者你自己做过修改,那么就照下
面的步骤检查一遍吧。
一、先检查nat是否可用及相关服务是否已经打开。
首先打开虚拟机的虚拟网络设置功
能,虚拟机菜单栏——编辑——虚拟网络设置
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_887ae060f330442.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图一
如果你发现上面的选项是灰色的,说明你的精简版没有这个功能,想办法换个版本,或者找下载说明,看看是否还
需要装其他东西。
在后面的对话框里检查dhcp和nat服务是否已经打开。
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_56d1cfb5e6d2e11.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图二
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_da98e19f2ca0e5a.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图三
如果你在上图中按下启动——应用没有用的话,就要考虑是不是相关服务被禁用了。主机开始菜单——运行——
services.msc检查相关服务的情况。正确的应该如下:
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_b831307582cc66e.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图四
二、
检查ics是否有打开,既打开ics又打开nat模式,同时作用,会造成混乱的,必须关闭。(ics就是internet connection
share,也就是internent连接共享)
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_180e7abade984b8.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图五
三、
检查网络接口模式
看看虚拟机网卡是不是真的用了nat模式,跟虚拟网络设置里是不是用了同一个vmnet号,请确保下图六和图3中用的是
同一个vmnet号。
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_88f83d8b3174401.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图六
虚拟机7.0以前的版本,nat都默认使用了vmnet8作为nat的默认端口号,但vm7.0就不同了。
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_742811ec5a6daf6.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图七
nat模式用的是vmnet0了,这个时候,保险为妙,虚拟机网卡请使用自定义vmnet0接口。
四、
开虚拟机系统检查是否获取到了ip。检查ip,网关,dns,是否都正常。
=700)
window.open('http://bbs.crsky.com/1236983883/thumb/Mon_1004/6_194774_724219dda00790b.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图八
4.1关于出现网络连接红叉,“电缆被拔出”。在虚拟机里是不存在电缆的,所以肯定是设置问题。
4.1.1
检查图六“打开电源时连接”的钩,或者检查图八里,右下角的虚拟网卡图标是否有叉。
4.1.2
上一条正常的,请安装一遍vmtools,确保虚拟网卡驱动正常。
4.1.3
上2条都正常的,还是有问题的,应该是某些系统的问题了。ubuntu的话多点几次连接看看,redflag的话,本地连接属性里“连接后在通知区域显示
图标”前的钩去掉,眼不见心不烦反而可以连上了。
五、vm7.0还是没有获取到ip的,需要把虚拟网络设置设置为默
认再试一遍。
将虚拟机里的系统关机,打开虚拟网络配置,如图7所示,按下左下角的“resore
default”恢复默认设置,在随后跳出的whql驱动认证里全部选择“始终安装此驱动软件”。
=700)
window.open('http://bbs.crsky.com/1236983883/Mon_1004/6_194774_b329ff341c566c1.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
图九
完
成后,请继续检查前面的检查项目,再检查一遍后再打开虚拟机里的系统。
六、获取了ip还是无法上网的,有以下的几种情况。
6.1 主机是win7或是vista,vmware版本低于6.5.3的,请升级vmware的版本。
这个问题的症状就是能ping通域名,也上不去网。但qq可以上去,这个应该是个兼容问题,请升级vmware版本。
6.2
使用网络命令检查网络。
1.ping nat网关,以图8为利,ping 192.168.47.2
2.ping
物理主机公网ip或内网真实ip,
3.可以继续ping,公网的isp网关或是内网的路由器ip,最后ping下网站域名。
如果都能通,而不是6.1的问题,看是不是浏览器上设置了错误的代理。
如果dns能解析,
但ping所有外网ip都是丢包的,应该是网关问题,检查下是否是双网关,route print检查下默认网关。
如果可以ping通所
有ip,ping不通域名,则应该是nat服务器的dns解析出了问题,重新启动主机(和重启路由器一样的道理)或是在虚拟机里直接填公网dns,或者设
置nat,直接将dns直接填到虚拟机nat里(如图十)。
=700)
window.open('http://bbs.crsky.com/1236983883/thumb/Mon_1004/6_194774_c10769a426e7ab1.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'2100')this.height='2100';" border="0">
http://www.xpxzlt.cn/simple/?t161677.html
Q:VMware DHCP Service 服务无法启动 1067 错误
A:打开Virtual Network Editor,选择 Restore Default
Q:VMware Brige 桥接服务无法启动 发生系统错误 2 系统找不到指定的文件
A:替换vmnetbridge.sys
vmnetbridge.dll(下载)
window主机与Ubuntu虚拟机共享文件夹的设置方法:
打开虚拟机,并开启Ubuntu。
在ubuntu的选项卡右击 --> Settings --> 点击 Options --> 窗口左侧的 Shared
Folders --> 右侧Folder Sharing的 Always enabled --> 右侧 Folders 下面的
Add --> Next --> Brower --> 在 浏览文件夹 中选择自己想要共享的文件夹(如:
E:/linuxshare) --> 确定 --> Enable this share --> Finish 。
文件夹共享设置完成。
需要往 Ubuntu上传什么东西,放在E:/linuxshare 下即可。 linux中的访问路径是: /mnt/hgfs/linuxshare
下面附上截图。
图一
图二
图三
图四
图五
图六
http://www.cnblogs.com/computer/archive/2010/07/21/1781945.html
http://chenjian977355.blog.163.com/blog/static/5544582010229150190/
WIN 7下光盘安装Ubuntu9.10,简单配置并修改启动项~~
先下载最新的Ubuntu9.10版,前几天刚发布的
下载地址:http://www.ubuntu.org.cn/getubuntu/download/
在下载位置处,选择“TAIWAN”(中国好像只有台湾这个选项)
因为觉得光盘安装比较舒服,所以我选择了光盘安装。
用UltraISO或者其他工具把下载下来的镜像刻进一张空的CD盘。
由于偶的小Y从来没碰过Ubuntu系统,所以整个安装过程最主要的就是对硬盘进行分区。
申明:本人安装时并未想到要来写教程,部分截图是9.04版的,但几乎是一样的,不一样处我会指出。
1.将光盘放进光驱后重启,按F12,选择光驱启动,此时光驱开始狂转,等一会便出现界面,选择你看得懂的:简体中文
2.选择第一项“试用Ubuntu而不改计算机中的任何内容”,按回车确认,也可以选择第二项直接安装ubuntu,安装步骤与以下演示相相同。(为什么要选择第一项安装,因为ubuntu
liveCD有个特色,就是可以一台电脑上用光盘来临时体验一下ubutnu的完整系统,进入后进也可安装系统)
3.毫无悬念的,光驱又开始狂转,这下等的时间会稍微长点,一段时间后进入系统。在这里你可以先体验下这个
系统,可以联网;玩够了再考虑装还是不装
。如果装的话,就点击桌面的“安装”
4.出现以下界面,当然用简体中文,按默认连续三次Forward(下一步),如图
5.然后就到了给硬盘分区了,首先进入到如图的界面(图显示的不是WIN7 ,是XP,这个不重要,只要点击那个“手动指定分区(高级)”就行了)
6.注意:以下内容重要!!!!
我的小Y一共分成了CDEFG,5个区,F盘80G
至今没用过,所以我打算分出20G来装Ubuntu。不一定要20G,10G也行,看自身情况。
选中要改变的分区,点“编辑分区”(9.10版里好像是叫“新建”,都一样,就是“删除分区”选项之前的那个)
7.出现以下提示,点继续将进行硬盘分区,不用担心,你硬盘里的东西不会丢失
8.分区完成,以下我们可以看到硬盘多个一个空闲的空间,这就是我们释放出来安装ubunbu的空间。选中
空闲的空间再点下面的新的分区。
9.下面对这个空闲的空间进行分区,首先来分个swap交换空间,这个相当于windows下的虚拟内存,根据你内存的大小填入,一般填为与内存一样的大小,我的内存2G,因此以下
也填入2048(也有一种说法是:内存小于1G的此处填2倍,大于1G的就填1G就行,自己看着办吧),再选择交换空间按确定。
10.依然选中空闲的空间-新的分区,下面来创建个系统空间,这里我把空闲剩下的全部分配给这个分区,再选
择Ext3日志文件系
统,挂载点选/,再点确定,到这里分区完成。
11.自定义填写用户名和密码,你也可以选择自动登录还是需要密码以登入(这就是决定是否在开机输入密
码),再点下一步,当你密码设置过短时,考虑到安全ubuntu会提示你是否重新设置,我们不用管它,点继续即可。
12.通过下面我们看到两个分区,格式为swap和ext3,这两个分区就是Linux要用到的分区,选中ext3分区再点下一步就行。
13.接下来提示问你是否导入本机WIN 7系统的文档到ubuntu下使用,如果你需要就勾上,我一个没勾,再点下一步。
14.好了,到这里准备安装,现在你要做的是拔掉网线(切记,一定要把网线拔掉),用无线网络的直接把无线开关掰回去先。因为ubuntu在安装过
程上会自动从官方下载一些更新,由于这个“源"地址设在欧洲,对于我们国内用户来说下载特级慢,我们还是把更新放在系统安装后进行操作,下面点击安装即
可!
15.以下进行系统安装中,请不要断来电脑电源!
17.过了十几分钟,系统安装完成,点现在重启,此时电脑会弹出光盘,请取出光盘后敲一下回车。
安装完成,秀下桌面:
==========================================================================================================
第二部分:
简单配置
重启后首次进入ubuntu的桌面,说明系统已安装成功,下面我们来对系统进行更
新(这类似于windows下的打补丁),
首先要做的是换源,什么是源?源可以理解为ubuntu系统更新的服务器地
址,之前我们已经说过,ubuntu默认的源是设在欧洲,这对于我们国内来说更新过程十分慢,因此可见换源十分重要,我们把这个源换成离我们较近的地区来
提高更新速度。先点击右上角的网络标识,连上网络,很简单的,一看就会。
1.选择桌面上方的工具条
依次进入System —— Administration——软件源
——wnloag
from--other,此时提示输入密码(密码就是你刚才安装时设置的密码,以后其它操作会提示都是输入那个密码),然后弹出以下窗口,有世界各地区供
选择,选择Tai w再选tw.archive.ubuntu.com这个源(因为Tai w这个源在国内被公认较快),最后点Choose
Gerver。
此时,系统会连上“源”更新组件之类的,
2.下载语言包:我们发现系统虽安装好了,可是菜单却
大多数是英文,此是要做的是下载并安装简体中文语言包,System —— Administration ——Language
Support,此时系统会自动选好汉语,并弹出以下窗口,直接点Install。
3.此时系统正在下载并安装简体中文语言包中。
语言安装完毕后,我们点Close关闭窗口,再选择桌面右上角的关机按钮,选择Restart...重新启动计算机
4.重启后,你能发现原来英文的菜单已经变为简体中文了,说明简体中文语言包安装成功。
5.我们发现桌面空空的,什么都没有,这时要把平时在windows习惯的几个图标调出来,选择桌面上方的应用程序--
附件--终端,在终端输入gconf-editor再按回车后将弹出配置编辑器窗口。
6.通过以下窗口,依次选择apps—— nautilus—— desktop,从右边选择把需要显示在桌面图标,勾上即可
7.在桌面右键选择更改桌面背景,进入视觉效果选项卡,默认是关闭好像,然后点击正常(或拓展),视个人喜好定,不过这个费显卡的,反正我选择正常很流
畅。
接着,系统会自动联网安装显卡驱动程序,装好后重启,再次进入该处才能正常开启视觉效果选项。
=========================================================================================================
第三部分:修改启动项
ubuntu安装后每次开机都是默认进入ubuntu系统的,对于以windows为主的朋友,每次开机都要守在画面切换到XP启动,可见十分麻
烦,通过下面,你可以设置让你的WIN 7系统为第一启动
我尝试像XP一样打开menu.lst,结果是空白~~~~几番询问后才发现时因为9.10升级为grub2了,于是转而修改grub.cfg文件。
1.左上角-应用程序-附件-终端,输入sudo chmod +w /boot/grub/grub.cfg
将grub.cfg设为可写状态
2.提示输入密码:输入你设的开机密码,此处输入密码不可见,密码输入后直接回车,然后输入sudo gedit
/boot/grub/grub.cfg
3.编辑grub.cfg
4.自习查看,里面有好几段以
###BEGIN**************###开头
###END****************###结尾 的代码
5.将含有WIN 7那段代码剪切至图中位置
6.确认下图的那段代码值=0
7.保存后退出。
8.一切顺利的话,重启的菜单项将是这样的(高亮显示的即为WIN 7)
注意:如果是XP系统,则第一第二部分通用,要调整启动顺序的话
打开终端(应用程序——>附件——>终端),输入sudo gedit
/boot/grub/menu.lst,敲下回车,这时要求输入password,输入登录系统的密码,在终端里不能显示输入的密码,这是正常的,输入
后回车打开编辑窗口。
在其中找到XP的代码,把它剪切到最前头就行了~~~~~
Communications link failure,The last packet successfully received from
the server was *** millisecond ago.The last packet successfully sent to
the server was *** millisecond ago。
最近做测试,发现Mysql 过一段时间会无法连接,导致数据库数据不一至,极其郁闷。
下面是转一哥门的
使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:
Communications link failure,The last packet successfully received
from the server was *** millisecond ago.The last packet successfully
sent to the server was *** millisecond ago。
其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。
后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:
MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。
1.按照错误的提示,可以在JDBC
URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true&
failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。
2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重启生效,需要同时修改这两个参数。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cau99/archive/2009/12/11/4987760.aspx
hibernate-HQL语句(1)
http://java.chinaitlab.com/Hibernate/809957.html
当月第一天 select timestamp(concat(year(curdate()),'-',month(curdate()),'-','1')) 如2010-08-01 00:00:00
当前时间 select now()
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,
JUnit是一个非常强
大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试
任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
我们创
建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返
回绝对值:
(图一)
下一
步,我们准备对这个方法进行测试,确保功能正常。选中Hello.java,右
键点击,选择New->JUnit
Test Case:
(图二)
Eclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。
(图三)
选中setUp()和tearDown(),然后点击“Next”:
(图
四)
选择要
测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:
(图五)
JUnit会以以下顺序执行测试:(大致的代码)
try {
HelloTest test = new HelloTest(); // 建立测试类实例
test.setUp(); // 初始化测试环境
test.testAbs();
// 测试某个方法
test.tearDown(); // 清理资源
}
catch…
setUp()是建立测试环境,这里创建一个Hello类的实例;tearDown()用于清理资源,如释放打开的文件等等。以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。在testAbs()方法中,我们对abs()的测试分别选择
正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。
如果有
多个testXxx方法,JUnit会创建多个XxxTest实例,每次
运行一个testXxx方法,setUp()和tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()。
直接运
行Run->Run
As->JUnit Test,就可
以看到JUnit测试结果:
(图六)
绿色表
示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。可以试图改变abs()的代码,故意返回错误的结果(比如return n+1;),然后再运行JUnit就会报告错误。
如果没
有JUnit面板,选择Window->Show View->Other,打开JUnit的View:
(图七)
JUnit通过单元测试,能在开发阶段就找出许多Bug,并且,多个Test Case可以组合成Test Suite,让
整个测试自动完成,尤其适合于XP方法。每增加一个小的新功能或者对代码进行了小的修改,就立刻运行一
遍Test Suite,确保新增和修改的代码不会破坏原有的功能,大大增强软件的可维护
性,避免代码逐渐“腐烂”。
初次学会使用Junit的使用是通过这篇文章的(上文),自己尝试跟着做了一遍,结果发现它上面提供的代码例子是错误
的,不过流程、图片都很清楚。所以你可以先看看它上面是怎么说的,至于测试的代码我稍做了改动,为的是只要说明问题就行——其实不难。
被测试的类代码:
public class HelloJunit {
public static int abs(int n){
return n>=0?n:(-n);
}
}
Junit的测试代码:
import junit.framework.TestCase;
public class HelloJunitTest extends TestCase {
public void testAbs() {
assertEquals(HelloJunit.abs(10),10);
assertEquals(HelloJunit.abs(-10),10);
}
}
主要代码
行为assertEquals(HelloJunit.abs(10),10);
其中参数
的意义为:
HelloJunit.abs(10)执行类HelloJunit的abs方法(参数为10,表示求10的绝对值)。
逗号后面
的10表示为预期的结果(期望值)。
该行表示
将期望值(10)与实际值(类HelloJunit的abs方法执行结果)进行比较,如果不相
等则抛出异常。
这里只是
一个简简单单的例子,Junit被大家称为优秀的白盒自动化测试框架,当然只有自己用过了才会了解。网上有许多的资料介绍这个框架,笔
者也是从自身情况出发来学习它的。当然学习使用它是需要有一定基础的,笔者拥有C和C++的基础,对Java的学习也开始不久,所以在这里将力
所能及的知识共享出来与大家分享,希望能够共同提高。另外笔者是专职的测试人员,所以在描述一些问题时大多都会以测试的角度来阐述。学习此框架的目的在于
能够在工作中进行白盒测试,在以后的介绍中还会介绍白盒测试相关的理论和工具,希望大家能够一起提高进步。
由于MySQL目前字段的默认值不支持函数的形式设置默认值是不可能的。
代替的方案是使用TIMESTAMP类型代替DATETIME类型。
CURRENT_TIMESTAMP
:当我更新这条记录的时候,这条记录的这个字段不会改变。
CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
:当我更新这条记录的时候,这条记录的这个字段将会改变。即时间变为了更新时候的时间。(注意一个UPDATE设置一个列为它已经有的值,这将不引起
TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)如果有多个TIMESTAMP列,只有第一个自动更
新。
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。
如果有多个
TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
列
值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
列值没有明确地在一个UPDATE语句中指定且另
外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的
值,MySQL为了效率而忽略更改。)
你明确地设定TIMESTAMP列为NULL.
除第一个以外的
TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
另外在5.0以上版本中也可以使用
trigger来实现此功能。
create table test_time (
id int(11),
create_time
datetime
);
delimiter |
create
trigger default_datetime before insert on test_time
for each
row
if new.create_time is null then
set
new.create_time = now();
end if;|
delimiter ;
生成 注释
应该是选取要注释内容后, ctrl+shift+c 按一下注释,按两下取消注释
ctrl+shift+"反注释!能讲ctrl+shift+/ 多行注释掉的内容反注释掉
CTRL+T 查看接口的实现
MyEclipse调试
1.首先在一个java文件中设断点,然后运行debug,当程序走到断点处就会停下。
2.F5键与F6键均为单步调试,
F5是step into,也就是进入本行代码中执行(进入函数执行),
F6是step over,也就是执行本行代码,跳到下一行执行(不进入函数),
3.F7是跳出函数 step return
4.F8是执行到最后。
=====================================
1.Step Into (F5) 跳入
2.Step Over (F6) 跳过
3.Step Return (F7) 执行完当前method,然后return跳出此method
4.step Filter 逐步过滤
一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step
Filtering)
5.resume 重新开始执行debug,一直运行直到遇到breakpoint
6.hit count 设置执行次数 适合程序中的for循环(设置 breakpoint view-右键hit
count)
7.inspect 检查 运算。执行一个表达式显示执行值
8.watch 实时地监视变量的变化
9.我们常说的断点(breakpoints)是指line breakpoints,除了line
breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method
breakpoint,exception breakpoint.
10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂
11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint)
12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...)
断点属性:
1.hit count 执行多少次数后暂挂 用于循环
2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂
3.suspend thread 多线程时暂挂此线程
4.suspend VM 暂挂虚拟机
13.variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键--change
value.一次来进行快速调试。
14.debug
过程中修改了某些code后--〉save&build-->resume-->重新暂挂于断点
===========================
例如你有如下程序:
public class debugtest {
来源:(http://blog.sina.com.cn/s/blog_624aa0960100fkrr.html)
- MyEclipse调试_匆匆过客_新浪博客
public String addDays() {
System.out.println("1");//
=============》(3)
String result = "";
//=============》(4)
System.out.println("2");//
=============》(5)
return result;
}
public static void main(String args[]) {
debugtest aa = new
debugtest();
int ii=9;
aa.addDays();//
=============》(1)
System.out.println("eeeeeeeeeeeeeee");//=============》(2)
}
}
你在(1)处加断点,运行到此处时如果Step Into (F5)为跳入(进入函数),则接着执行到(3)。
再执行Step Over (F6)执行本行,则执行到(4)。
最后执行Step Return (also F7),则跳出addDays方法,跳到(2)
转http://blog.sina.com.cn/s/blog_624aa0960100fkrr.html
MyEclipse 中显示行号 要想显示行号,按住 Ctrl + F10 选择 show Line Numbers
eclipse/myeclipse注释模板的修改 alt+shitf+j
Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit
/**
*
* 项目名称:${project_name}
* 类名称:${type_name}
* 类描述:
* 创建人:${user}
* 创建时间:${date} ${time}
* 修改人:${user}
* 修改时间:${date} ${time}
* 修改备注:
* @version
*
*/
http://www.javaeye.com/topic/585168
myeclipse中如何配置自定义的代码排版格式 ctrl+shift+f
http://www.blogjava.net/bolo/
http://www.blogjava.net/bolo/archive/2010/04/11/318004.html
com.test.action.user包下:
SaveUserAction.java
SaveUserAction-validation.xml
SaveUserAction.java文件的内容:
package com.test.action.user;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService;
public class SaveUserAction extends ActionSupport
{
private User user;
private UserService service;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public UserService getService()
{
return service;
}
public void setService(UserService service)
{
this.service = service;
}
@Override
public String execute() throws Exception
{
this.service.save(this.user);
return SUCCESS;
}
@Override
@SuppressWarnings("unchecked")
public void validate()
{
Map map = this.getFieldErrors();
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();)
{
System.out.println(map.get(iter.next()));
}
}
}
SaveUserAction-validation.xml的文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context">user</param>
<param name="appendPrefix">true</param>
<message>user's </message>
</field-validator>
</field>
</validators>
com.test.bean包下的文件:
User.java;
User-user-validation.xml
User-user-validation.xml文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="firstname">
<field-validator type="requiredstring">
<message>required first name</message>
</field-validator>
</field>
<field name="lastname">
<field-validator type="requiredstring">
<message>required last name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>required age</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and
${max}</message>
</field-validator>
</field>
</validators>
还有一个问题,就是校验信息会重复,在错误的情况下。由以下代码可以测试:
@Override
@SuppressWarnings("unchecked")
public void validate()
{
Map map = this.getFieldErrors();
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();)
{
System.out.println(map.get(iter.next()));
}
}
}
解决方法:
applicationContext.xml 文件中的配置action中加入:Struts 2.0 的action 是有状态的
在spring 配置的action 中加上 scope="prototype";
配置如下:<bean id="saveUserAction"
class="com.test.action.user.SaveUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean>
关键字: struts2,spring2,hibernate3,整合
今天在寝室窝了一天,由于前天老师给了个ss2+toplink的项目源码,要我去消化。直接看那
三个整合具吃力,于是先从ssh2入手吧!
所使用的工具和环境。
jdk6+myeclipse6.5+tomcat6+mysql5+spring2.0+hibernate3+struts2
好了,开始我们的第一个ssh2之旅吧。
首先先分析一下我们的第一个ssh2项目的需求,简单的说就是有一张表单,
让你填写用户名和密码,提交后存入数据库。就这么简单,呵呵。
第一步:。我
们首先新建一张mysql数据表
sql如下
CREATE TABLE mytest.users (
id INT
NOT NULL,
username VARCHAR(50),
password VARCHAR(50),
PRIMARY KEY (id)
数据表创建好后结构如下:
当然我已经有几天数据添加进去了
第二步
打开myeclipse,新建一个web项目,
命名为ssh2-2, java ee规范我们选择5,如图
第三步 务必小心的一步
导
入ssh2的各个jar,步骤如下:
选中当前的项目后,点击菜单烂的myeclipse---project
capablities----add hibernate项,跳出如图
务必按照图示选择,尤其是copy checkde……一项,然后点击next,默认next,去掉specify
database……复选框,next,去掉create session……复选框,finish。
再次选中选中当前的项目后,点击
菜单烂的myeclipse---project capablities----add spring项,跳出如图
依然务必按照如是选择,jar文件选择如下5个:
点击next,
之后按下选择,务必,
next后finsh即可。
然后导入struts2的jar
如下5个放到lib下
然后放入我们的数据库驱动jar mysql-connector-java-5.0.8-bin.jar 没得话附件中有
至
此,包都导入完毕
http://77857.blog.51cto.com/67857/149631
去网上找了一些相关错误的信息看了下说Hibernate core下面的xerces.jar包的问题。删除后正确了。
如果删除后还是错误,看一下项目的lib文件夹下面的是否还有xerces相关jar包,也删掉。
记住把tomcat 里面xerces.jar也要删掉
1:login.JSP
<form action="
login.action" method="post">
username:<input type="text" name="username"> <br/>
password:<input type="text" name="password"> <br/>
<input type="submit" name="submit"/>
</form>
<s:form action="login">
<s:textfield name="username" label="username"></s:textfield>
<s:password name="password" label="password"> </s:password>
<s:submit name="submit"></s:submit>
</s:form>
2:action
package com.test.action;
public class LoginAction {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
return "success";
}
}
package com.test.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
if("smallfa".equals(this.getUsername().trim())&&"smallfa".equals(this.getPassword().trim()))
{
return "success";
}
else
{
this.addFieldError(username, "username or password errors");
return "failer";
}
}
@Override
public void validate() {
if(null==this.getUsername()||"".equals(this.getUsername().trim()))
{
this.addFieldError(username, "username required");
}
if(null==this.getPassword()||"".equals(this.getPassword().trim()))
{
this.addFieldError(username, "username required");
}
}
}
3:struts-xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="struts2" namespace="/" extends="struts-default">
<action name="login" class="com.test.action.LoginAction">
<result name="success">/result.jsp</result>
</action>
</package>
</struts>
4:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
5:result.jsp
username:${requestScope.username}<br/>
password:${requestScope.password}<br/>
6:参考视频
视频:
Struts2入门与配置 浪曦 J2EE Struts 2应用开发详解系列视频
http://v.youku.com/v_show/id_XNTY4MDUwMzY=.html