Java
 j2me 用在智能平台,例如手机等
 j2se 用在桌面平台,个人PC桌面应用
 j2ee 中间件,用于web服务,相当于apache,nginx


 上层应用 java
 
 j2ee平台 tomcat

 数据库  mysql,oracle

常用中间件:
 tomcat
 resin
 jboss
 weblogic
 WebSpare


jdk
 java的开发库


例子1:搭建tomcat,运行简单应用

1、安装jdk

# ./jdk-6u18-ea-bin-b02-linux-i586-09_sep_2009.bin
# mv jdk1.6.0_18 /usr/local/java


2、安装tomcat
# tar xvf apache-tomcat-6.0.16.tar.gz
# mv apache-tomcat-6.0.16 /usr/local/tomcat

3、设定jdk环境变量
# cd /usr/local/tomcat/
# vim bin/catalina.sh
export JAVA_HOME="/usr/local/java"

启动
# ./bin/startup.sh
默认监听8080端口

 


部署一个简单应用:

1、修改监听端口为80
# vim /usr/local/tomcat/conf/server.xml

    <Connector port="80" protocol="HTTP/1.1"   《--8080改成80
               connectionTimeout="20000"
               redirectPort="8443" />


2、设定管理帐号
 
# vim /usr/local/tomcat/conf/tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="123" roles="manager,admin"/>
</tomcat-users>


重启tomcat
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh


默认已经部署的应用:
/  webapps/ROOT
  webapps/ROOT/WEB-INF/web.xml  <--该java web应用的配置文件
/docs  webapps/docs
/examples webapps/examples
...

简单部署一个应用
http://1.1.1.128/upl/
 网站根目录webapps/upl/
# mkdir upl
# cp -r ROOT/WEB-INF/  ./upl/
# vim upl/index.jsp
<html>
<head>
        <title>Just Test</title>
</head>
<body>
        <center><h1> <%=new java.util.Date()%>    </h1></center>
</body>
</html>

 

例子2:部署一个jsp+mysql的论坛

jsprun论坛:jsprun6.0.0_UTF8.zip

部署之后,访问的路径是http://1.1.1.128/bbs  <--- webapps/bbs


1、解压论坛代码 
# unzip jsprun6.0.0_UTF8.zip
# mv upload/  /usr/local/tomcat/webapps/bbs

2、设定论坛使用mysql数据的相关信息

建库、授权

3、修改论坛的配置文件,设定数据库的连接信息
# vim bbs/config.properties
 
dbhost = localhost  <---根据实际情况修改
dbport=3306
dbuser = jsprun
dbpw = 123
dbname = jsprun

4、向导安装
http://1.1.1.128/bbs/install.jsp

==================================================

例子3:使用mod-jk搭建tomcat集群,实现负载均衡

  调度器
    |
 |-------------|
 tomcat1   tomcat2

常用的调度器:
 lvs
 nginx
 haproxy
 apache:
  http_proxy 技术非常旧,效率和性能都很慢,基于http协议的反向代理
  ajp_proxy 性能有所提升,使用的ajp协议。
  mod-jk  使用ajp协议,但是性能是最好。

 

   
1、选择一个apache节点作为调度器

# yum install httpd httpd-devel -y

2、安装mod-jk

tomcat-connectors-1.2.31-src.tar.gz

# cd /usr/src/tomcat-connectors-1.2.31-src/native/

# ./configure --with-apxs=/usr/sbin/apxs && make && make install


3、配置mod-jk

# cp /usr/src/tomcat-connectors-1.2.31-src/conf/{uriworkermap.properties,workers.properties,httpd-jk.conf} /etc/httpd/conf.d/


# cd /etc/httpd/conf.d/
编辑主配置文件
# vim httpd-jk.conf

JkWorkersFile conf.d/workers.properties
JkMountFile conf.d/uriworkermap.properties
SetEnvIf REQUEST_URI "\.(htm|html|css|gif|jpg|js)$" no-jk


定义调度器的属性
# vim workers.properties

worker.balancer.balance_workers=node1  <---名字随意,但必须和后端tomcat有联系
worker.node1.reference=worker.template
worker.node1.host=1.1.1.128 《---
worker.node1.port=8009  《----


worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=1.1.1.129 《----
worker.node2.port=8009  《----

定义动静分离:哪些请求留给apache调度直接处理,哪些请求留给后端tomcat节点处理
# vim uriworkermap.properties

/examples/*=balancer  《--指定目录交给mod-jk使用balancer调度到后端节点
/manager/*=balancer
/*.jsp=balancer


重启apache

二、配置后端tomcat节点

1、两个后端节点都部署好tomcat环境


2、设定tomcat关于ajp的配置

node1:
# vim /usr/local/tomcat/conf/server.xml

<Engine name="Catalina" defaultHost="localhost">
修改:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
   名字必须和mod-jk设定成员的名字一样

node2:
同上,名字不一样而已


3、启动

验证:
# lsof -i:8009

 

三、实现动静分离

把一些静态文件同步到前端apache的网站根目录 ,因为静态文件根据设定,是直接交给apache处理

设计验证动静分离的实验:
 在apache网站根目录 建立 index.html ,内容随意,只要跟后端tomcat节点不一样

http://1.1.1.130/index.html  <---前端apache ip
http://1.1.1.128/index.html  <---后端tomcat ip


设计验证mod-jk调度jsp页面的实验:
 分别在两个tomcat节点建立测试页面test.jsp,代码如下:

index_测试页面.jsp

# scp index_测试页面.jsp 1.1.1.128:/usr/local/tomcat/webapps/ROOT/test.jsp
# scp index_测试页面.jsp 1.1.1.129:/usr/local/tomcat/webapps/ROOT/test.jsp


默认会话跟踪,只要客户端被调度到一个节点,同一个会话,后续所有访问都会调度到同一个后端节点。

取消会话跟踪,如果想实现会话同步,就必须让后端节点session信息复制:
 1、取消mod-jk的会话跟踪
# vim /etc/httpd/conf.d/workers.properties

worker.balancer.sticky_session=0  <---- 取消跟踪

重启apache
 2、修改后端节点,实现会话同步,缺点:浪费内存,性能降低。

# vim /usr/local/tomcat/conf/server.xml

找到<Engine .... >下面添加

  
 

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"   《---可以修改自己的IP
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>   
   
 3、修改应用的设置,让应用产生的会话同步到其他节点
# vim WEB-INF/web.xml

<distributable/>  《---添加一行
</web-app>

重启tomcat服务