如何在CentOS上搭建 Struts2+Spring+Hibernate的运行环境

如何在CentOS上搭建 Struts2+Spring+Hibernate的运行环境,第1张

Struts2+Spring+Hibernate是J2EE的最新流行框架。本篇是我搭建这个框架的经验总结,有很多人搭建这个框架总会遇到

大大小小的问题,网上也没有什么行之有效的方案或成体系的介绍,所以我就决定总结一下我的搭建过程。给一些搭

建尚存问题的朋友提供帮助。

我用这个框架,实现的是基本的CRUD功能的一个雇员管理系统,本来打算丰富一下功能,但是一直没能抽出空去搞。

目前版本暂定为10,除了CRUD外还配置了表单验证框架JSValidation。功能都能很顺利的实现。

现在分享部分源码,来说明一些注意事项。

以下是部分搭建过程及源码:

1先组合实现Hibernate32+Spring25支持,删除hibernatecfgxml文件,修改applicationContextxml文件的内容,增加SessionFactory和dataSource的设置。

2通过MyEclipse的向导方式,生成POJO类和对应的映射文件。

3修改applicationContextxml文件中<property name="mappingResources">元素的内容。

4编写DAO接口和实现类。

5修改applicationContextxml文件,增加对Dao实现类的配置。

6组合Struts2和Spring25,修改webxml文件,增加struts2的所需要的过滤器配置。

7增加struts2相应类库,增加struts2与spring的配置jar包。

8拷贝strutsxml文件到src根目录下,再修改strutsxml文件,进行常量配置。

9修改webxml文件,配置Spring监听器,和上下文变量。并增加OpenSessionInViewFilter的设置。

10写入action类。

11配置strutsxml文件。

12修改applicationContextxml

13编写Jsp文件。

14加载运行项目。

下面是关键文件的源码:

strutsxml源码:

1、在软件版本方面

CentOS中的Web服务器应用程序所需的主要软件版本是:Apache -> 2215;PHP-> 533;MySQL-> 5166;PostgreSQL-> 8413。Debian Stable Wheezy已拥有这些软件版本:Apache-> 2222;PHP-> 544;MySQL-> 5530;PostgreSQL-> 919。

2、在软件升级方面

选择软件时,将在生产环境中使用任何类型的软件,应该始终考虑升级它的难易程度。CentOS不是容易升级的GNU / Linux发行版,与升级相比,通常强烈建议全新安装。将Debian从一个稳定版本升级到下一稳定版本很容易,操作也比较简单

3、在稳定性方面

CentOS是最受测试和稳定的GNU / Linux发行版之一,这就是为什么它也是最常用的发行版之一。CentOS两次发行之间的间隔确保了充足的时间进行彻底的测试,并且将任何安全修复程序都移植到CentOS的较早版本中,以解决在构建新版本时发现的任何漏洞。Debian被认为是比许多其他发行版更稳定的Linux发行版。对于企业而言,这是一个不错的选择,因为该版本中的错误导致的开销更少。它还为修补安全漏洞提供了时间,因此这些发行版通常比其他Linux发行版的发行版更安全。

新手自学linux,需要制定详细的学习路线和学习内容,可以按照以下思路学习:

第一阶段:linux基础入门Linux基础入门主要包括:Linux硬件基础、Linux发展历史、Linux系统安装、xshell连接、xshell优化、SSH远程连接故障问题排查、Linux基础优化、Linux目录结构知识、Linux文件属性、Linux通配符、正则表达式、Linux系统权限等。

第二阶段:linux系统管理进阶linux系统管理进阶包括:Linux定时任务、Linux用户管理、Linux磁盘与文件系统、Linux三剑客之sed命令等。

第三阶段:LinuxShell基础LinuxShell基础包括:Shell编程基础、Linux三剑客之awk命令等。

第四阶段:Linux网络基础。

第五阶段:Linux网络服务Linux网络服务包括:集群实战架构开始及环境准备、rsync数据同步服务、Linux全网备份项目、nfs网络存储服务精讲、inotify/sersync实时数据同步/nfs存储实时备份项目等。

第六阶段:Linux重要网络服务Linux重要网络服务包括:http协议/www服务基础、nginxweb介绍及基础实践、nginxweb、lnmp环境部署/数据库异机迁移/共享数据异机迁移到NFS系统、nginx负载均衡、keepalived高可用等。

第七阶段:Ansible自动化运维与Zabbix监控,Ansible自动化运维与Zabbix监控包括:SSH服务秘钥认证、ansible批量自动化管理集群、zabbix监控等。

第九阶段:大规模集群高可用服务(Lvs、Keepalived)

第十阶段:JavaTomcat服务及防火墙Iptables

第十一阶段:MySQLDBA高级应用实践MySQLDBA高级应用实践包括:MySQL数据库入门基础命令、MySQL数据库进阶备份恢复、MySQL数据库深入事务引擎、MySQL数据库优化SQL语句优化、MySQL数据库集群主从复制/读写分离、MySQL数据库高可用/mha/keepalved等。

第十二阶段:高性能数据库Redis和Memcached课程。

第十三阶段:Linux大规模集群架构构建(200台)。

第十四阶段:LinuxShell编程企业案例实战。

第十五阶段:企业级代码发布上线方案(SVN和Git)。

第十六阶段企业级Kvm虚拟化与OpenStack云计算。

第十七阶段公有云阿里云8大组件构建集群实战。

第十八阶段:Docker技术企业应用实践。

第十九阶段:Python自动化入门及进阶。

第二十阶段:职业规划与高薪就业指导。

Linux学习周期因人而异,如果您有比较好的学习规划,每天坚持学习4至5个小时,坚持3至6个月,应该可以熟练掌握Linux基本操作,但是,如果只有计划,没有实施,那就另当别论了,如果想更深入、更节省时间的学习Linux操作系统,建议报班学习,效果会更加明显!

自学方法很多,看你有没有C语言和操作系统的基础了。现在网上的资料非常多,各种培训视频教程应有尽有。

1、linux入门难度也不容易,关键看你的基础了,如果你C语言很厉害,把单片机要的很溜,有操作系统的概念和基础,比如你以前玩过ucosii或者ucosiii,那你自学linux就容易的多,自己买个开发板,找一些linux视频教程,自己动手做,就容易入门,几个月就能很好掌握linux。

2、如果你单片机嵌入式方面的小白,那你一来就学linux,难度非常大,就算你看视频教程,也很难学会,linux属于操作系统,属于软件,需要把它下载硬件系统中,比如ARM芯片。其实ARM难度肯定比单片机难多了,不容易掌握。

3、自学linux,得看你的基础吧,基础好,自学起来就容易。如果你是小白,就不要开始学linux了,太难了,会打击的自信。学学单片机这类入门低的。

以我过来人的经验,没有任何所谓的捷径可以走,也没有什么7天速成之类的,那些基本上就是吸引眼球,实质上就是教你怎么样快速搭建一些软件等等。

学习linux其实说简单也不简单,说难也不难,主要可以从以下几个方面入手。

一、选定一本书或是一个视频教程,这方面的电子书和教程非常好找,网上一搜一大堆,视频可以在头条或是B站都有。

二、制定相应的学习计划,计划的每一天都要有实际的东西,不能是大而空的目标,比如计划应该是学会使用ls,mkdir指令,而不是学习指令,大而空的目标往往会让人觉得没有正向反馈,最后也就不了了之。

三、严格按照你设定的计划执行,每天学习后要有一定的回顾和实操,这样不但能加深你的印象,也更容易学的进去。

四、学完之后记得使用,不能是为了学而学,一定要应用于日常工作中去,才能得到更好的提升。

总之,学习linux没有任何捷径可以走,只有一个途径,用,一直用,自然而然就水到渠成。

LIiux自学入门其实并不是很难,我之前学习的时候大概整理了几类的资源,正好分享给大家:

第一:业内公认的Linux优质教程

Linux教程|菜鸟教程

菜鸟教程提供了大量的在线实例,通过实例可以更好的入门以及学习LuⅨ,所有的资源是安全免费的

Linux教程w3cschool

在这个教程站上你可以找到你所需要的所有的网站建设教程。从基础的HTML到CSS,乃至进阶的XML,SQL,JS,PHP和ASPNET;

Linux命令大全(手册)真正好用的Linux命令在线查询网站

第二:专业的linux技术书籍

鸟哥的Linux私房菜:基础学习篇·Linux多线程服务端编程:使用muduoC++网铬库·深入Liux内核架构:全球开源社区集体智慧结晶,领略Linux内核的绝美风光

第三:Linux技术工具

·Docker

Docker在一定程度上是LXC的增强版,早期的Dockerf使用LXC作为容器引擎9,目前dockert使用的容器引擎为runC,其是容器运行时标准的实现之一;

Kubernetes

Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术;

Zabbix

监控利器,监控所有你要监控的指标。

Nginx

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务

Istio

连接、安全加固、控制和观察服务的开放平台。开放平台就是指它本身是开源的,服务对应的

是微服务,也可以粗略地理解为单个应用;

Jenkins

Jenkins是开源CICD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何

项目的需要;

Apche

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的web服务器软件之一。

Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用;

第四:Linux进阶必备的技术点

掌握Iptables防火墙体系,实现防火墙实现数据包过滤和转发;掌握用户权限安全控制Sudo体系与配置;掌握DNS服务的原理、部署、安装和企业级应用;实现文件共享服务NFS、Vsftpd、Samba配置和应用;实现Jumpserver堡垒机安装、配置、使用和运维体系融合;brctl命令创建管理虚拟网桥;IpNetns创建管理虚拟路由;常见的网络客户端°工具Ping/Lftp/Ftp/Lftpget/Wget;利用Rsync和Inotify实现多台机器数据分发和配置同步;Jumpserver跳板机基本功能应用,认证、授权、审计;https概念及对应的模块mod_ssl应用配置;运维必备Web服务开源解决方案Nginx,全面讲解Nginx程序架构;Nginx内部框架、模块功能、事务处理机制、安装方法、CPU亲缘优化、配置文件;SQL语句增删改查、常用命令使用、用户授权、字符集修改、表、索引、库管理等;对比介绍图形化管理软件,如PhpMyAdmin、SQLyog、Navicat等Keepalived工作方式,Keepalived核心组件、报警机制、切换机制、心跳信息传输等;Centos7上实现LVS集群配置、服务管理、调度算法修改;全面熟悉Ansible用法、以及安装方法、配置文件详解、模块说明、基于私钥认证、批量操作等;Redis扩展方式对比介绍,RedisCluster的基础应用;VmwareEsxi创建Linux及Windows虚拟机,并实现虚拟机跨宿主机迁移;Docker镜像、仓库管理、启动方法、数据卷使用、备份恢复,网络模型、容器间依赖关系、容器资源限制、Docker的监控;

待续

环境准备:

1)设置本地国际化语言为en_USUTF-8

[root@c58~]#sed-i's/^\(LANG=\)$/\1en_USUTF-8/'/etc/sysconfig/i18n

[root@c58~]#cat/etc/sysconfig/i18n

LANG=en_USUTF-8

[root@c58~]#LANG=en_USUTF-8

2)更新系统软件包

备份默认yum源:

find/etc/yumreposd-name'repo'-execmv{}{}bak\;

添加163yum源:

redhat5或centos5:

wgethttp://mirrors163com/help/CentOS5-Base-163repo-P/etc/yumreposd

redhat6或centos6

wgethttp://mirrors163com/help/CentOS6-Base-163repo-P/etc/yumreposd

添加epel yum源:

redhat5x 32bit:

rpm-ivhhttp://dlfedoraprojectorg/pub/epel/5/i386/epel-release-5-4noarchrpm

redhat5x 64bit:

rpm-ivhhttp://dlfedoraprojectorg/pub/epel/5/x86_64/epel-release-5-4noarchrpm

redhat6x 32bit:

rpm-ivhhttp://dlfedoraprojectorg/pub/epel/6/i386/epel-release-6-8noarchrpm

redhat6x 64bit:

rpm-ivhhttp://dlfedoraprojectorg/pub/epel/6/x86_64/epel-release-6-8noarchrpm

更新证书:

yum-yupgradeca-certificates--disablerepo=epel

更新系统所有软件包:

yumcleanallyummakecacheyum-yupgrade

下文以redhat5/centos5为例

一、服务最小化原则

关闭所有开机自启动服务,仅开启sshd、crond、network、iptables、syslog(redhat5)、rsyslog(redhat6),然后在此基础上按需添加需要开机启动的服务。

1)关闭所有开机自启动服务

[root@c58~]#foriin`chkconfig--list|awk'{if($1~/^$/){exit0;}else{print$1}}'`;dochkconfig$ioff;done

2)开启基础服务

[root@c58~]#foriinsshdnetworksyslogcrondiptables;dochkconfig$ion;done

3)查看开启的服务

[root@c58~]#chkconfig--list|grep'3:on'

crond0:off1:off2:on3:on4:on5:on6:off

iptables0:off1:off2:on3:on4:on5:on6:off

network0:off1:off2:on3:on4:on5:on6:off

sshd0:off1:off2:on3:on4:on5:on6:off

syslog0:off1:off2:on3:on4:on5:on6:off

二、用户登录限制

1)禁止使用root用户使用远程ssh

[root@c58~]#cd/etc/ssh

[root@c58ssh]#cpsshd_configsshd_config~

[root@c58ssh]#sed-i's/#\(PermitRootLogin\)yes/\1no/'sshd_config

[root@c58ssh]#grep'PermitRoot'/etc/ssh/sshd_config

PermitRootLoginno

2)禁用登录提示信息

[root@c58ssh]#/etc/motd

3)修改ssh的默认监听端口(tcp:22)

#这里修改为tcp的11983端口

[root@c58ssh]#sed-i's/#\(Port\)22/\11983/'sshd_config

[root@c58ssh]#grep'Port'sshd_config

Port11983

4)只允许指定的ip可以ssh (可选)

方法1(使用tcpwrapper):

#只允许1921681240网段的ip使用ssh

echosshd:1921681240/2552552550/etc/hostsallow

echosshd:ALL/etc/hostsdeny

方法2(使用iptables):

#注意,远程操作时需留心,以免把自己也拒绝而导致无法远程连接。如只允许19216810网段的所有ip进行ssh,其他所有ip都拒绝#先允许自己的ip,以防被后面的操作误伤

iptables-IINPUT-s10001-ptcp--dport22-jACCEPT

#允许19216810网段

iptables-I2INPUT-s19216810/24-ptcp--dport22-jACCEPT

#拒绝所有

iptables-I3INPUT-ptcp--dport22-jDROP

#保存iptables的设置:

cp/etc/sysconfig/iptables/etc/sysconfig/iptables~

iptables-save/etc/sysconfig/iptables

最后,重启sshd服务使上面配置生效(不用担心重启时已打开的远程终端连接会断开,重启只会对新开的终端生效)

[root@c58ssh]#/etc/initd/sshdrestart

Stoppingsshd:[OK]

Startingsshd:[OK]

三、用户及命令权限最小化

创建一个普通用户tom,将其加入sudo组,该用户作为系统管理员

groupaddsudo#创建sudo组

useradd-Gsudotom#创建tom用户,加入sudo组

passwdtom#设置tom用户的登陆密码

修改sudo配置文件,授权sudo组的用户可以以root身份执行所有命令(可以针对不同用户授予不同的命令执行权限,这里允许执行所有命令,生产环境中系统管理员应该按需为用户分配尽可能少的可执行命令,以实现权限最少化),用户执行的所有sudo操作都将记录在/var/log/sudolog中,以便日后的安全事件排查。执行命令如下:

[root@cloud~]#cat/etc/sudoersEOF

%sudoALL=(root)ALL

Defaultslogfile=/var/log/sudolog

EOF

[root@cloud~]#visudo-c

[root@cloud~]#echolocal2debug/var/log/sudolog/etc/syslogconf

[root@cloud~]#/etc/initd/syslogrestart

注:visudo -c命令用于检查 /etc/sudoers 文件的语法正确性

四、内核安全参数设置

vim/etc/sysctlconf#添加如下内容:

#关闭对ping包的响应(可选,一般不建议,因为不方便网络故障时的排查)

netipv4icmp_echo_ignore_all=1

#关闭对广播ping的响应

netipv4icmp_echo_ignore_broadcasts=1

#开启syncookie用于防范synflood攻击,当出现syn等待队列溢出时(syn数量超过tcp_max_syn_backlog的设置值),启用cookie来处理,server在回复syn_ack前会先请求client回复一个序列号,该序列号中要求包含原先syn包中的信息,如果序列号不正确,则server端会忽略此syn连接。

netipv4tcp_syncookies=1

#设置sync_ack的最大重传次数,默认值为5,范围0-255,重传5次的时间大约为180s

netipv4tcp_synack_retries=3

#设置当keepalive打开的情况下,keepalive消息的发送间隔,默认为2小时(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,如果两边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间就是2小时,成就了空连接攻击,tcp_keepalive_time就是预防此情形的)

netipv4tcp_keepalive_time=1200

保存退出后,执行sysctl -p命令将以上设置加载到内核使其立刻生效

五、 内核性能相关参数设置(可选)

vim/etc/sysctlconf#添加如下内容:

#设置syn等待队列的长度,对于内存大于128M的机器,默认值是1024,在并发请求较大时,可以调大该值

netipv4tcp_max_syn_backlog

#开启timewait重用。允许将time_waitsocket重新用于新的tcp连接

netipv4tcp_tw_reuse=1

#开启tcp连接中time_waitsocket的快速回收

netipv4tcp_tw_recycle=1

#TCP发送keepalive探测以确定该连接已经断开的次数,默认值为9

netipv4tcp_keepalive_probes=5

#指定探测消息发送的频率,该值乘以tcp_keepalive_probes就可以得到从开始探测到连接被删除所需的时间。默认值为75,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小特别是web类服务器需要改小该值,15是个比较合适的值)

netipv4tcp_keepalive_intvl=15

#表示系统同时保持TIME_WAITsocket的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并输出警告信息。默认为180000,改为5000对于squid服务器来说,此参数可以控制TIME_WAIT套接字的最大数量,避免squid服务器被大量的TIME_WAITsocket拖死。

netipv4tcp_max_tw_buckets=5000

#表示向外连接的端口范围。默认值很小:32768~61000,改为1024~65000

netipv4ip_local_port_range=102465000

保存退出后,执行sysctl -p命令将以上设置加载到内核使其立刻生效

查看文件安装路径。

在终端输入:

whereis mysql

回车,如果你安装好了mysql,就会显示文件安装的地址,例如我的显示(安装地址可能会不同)

[root@localhost ~]# whereis mysql 

mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql/usr/share/man/man1/mysql1gz

说明:usr/lib/mysql 是指:mysql的安装路径。

centos相关技巧

搭建LNMP

版本截图Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。 用Nginx搭建web服务器,比Apache相比,占用更少的资源,支持更多的并发连接,体现更高的效率。

yum -y install gcc openssl-devel zlib-devel pcre-devel

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2bzip2-devel ncurses ncurses-devel curl curl-devel ssse2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

nginx的安装

添加用户、用户组

groupadd www

useradd -g www -s /bin/falsh -M /www

#安装Nginx tar -zxvf nginx-120targz && cd nginx-120 && /configure --user=www --group=www \ --prefix=/usr/local/webserver/nginx \ --sbin-path=/usr/local/webserver/nginx/sbin/nginx \ --conf-path=/usr/local/webserver/nginx/conf/nginxconf \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-pcre \ --lock-path=/var/run/nginxlock\ --pid-path=/var/run/nginxpid 第三步:更改配置

#更改配置 vi /usr/local/webserver/nginx/conf/nginxconf #修改一些参数,别直接替换文件,这只是一部分 user www events { use epoll; worker_connections 1024; } listen 80;

server_name localhost;

index indexphpindexhtml indexhtm ;root /www/html;

location ~ \(php|php5)${ fastcgi_pass 127001:9000; fastcgi_index indexphp; fastcgi_param SCRIPT_FILENAME /www/html/$fastcgi_script_name; include fastcgi_params; include fastcgiconf;} #检测配置文件 /usr/local/webserver/nginx/sbin/nginx -t #提示表示成功 #nginx: the configuration file /usr/local/webserver/nginx/conf/nginxconf syntax isok #nginx: configuration file /usr/local/webserver/nginx/conf/nginxconf test issuccessful

编译结束后如果没出错的话,make && make install 安装。 安装结束后启动nginx,/usr/local/webserver/nginx/sbin/nginx,然后用netstat -tunpl | grep:80查看端口是否启动。 关闭防火墙,在浏览器里输入1921681276(当前实验主机),看到welcome to nginx!则表示nginx安装成功。 接下来安装mysql,这跟搭建lamp环境时完全一样,下面就不加以说明。 安装PHP:

安装libiconv和libevent

tar -zxvf libevent-1412-stable,tar zxf libiconv-114targz

分别解压,配置安装

/configure && make && make install

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在CentOS上搭建 Struts2+Spring+Hibernate的运行环境

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情