tomcat 访问jsp页面
tomcat和java的安装
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
运行tomcat 我们需要准备的基本环境是 jdk
tar zxf apache-tomcat-7.0.99.tar.gz -C /usr/local/
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
ln -s apache-tomcat-7.0.99/ tomcat
ln -s jdk1.7.0_79 java
做个软连接方便目录的使用
把jdk和tomcat解压到/usr/local/ 目录下。
当前我们没有java的,我们需要配置环境变量。
vim /etc/profile
source /etc/profile
就可以看到我们的java的信息,就说明我们的jdk配置的是正常的。
现在我们来测试一下java
正常使用。
测试 tomcat
进入到安装目录下的bin目录执行:
./startup.sh 打开tomcat
8080和8009 端口打开,
访问可以看到默认发布页。
但用户不会去访问8080端口,所以我们需要配置nginx。
访问.jsp结尾时转交给8080端口。
动态页面测试
写几个测试动态页面:
刷新一次时间就会变一次。
- 一个简易的用户登陆信息,会被记录下来
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
访问:
可以看到输入的登陆信息会保存到session list中.
我们开启另一台一台同样配置((tomcat 和 jdk , 环境变量)的虚拟机,进行负载均衡的测试。ip 为 172.25.254.1
配置本机的nginx,定义一个上游服务:
定义接收请求的服务器组。
并更改前面设置的反向代理的地址,需要与上面的组相同。
重新加载nginx。打开新开虚拟机的tomcat。
这样我们每次访问的时候就会接替的访问1和2 两台服务器。但是这样不会保存用户访问的数据。
为了让用户的每次访问不会来回跳,我们可以做 用sticky参数做会话保持(粘滞) 。
sticky粘滞
会话保持:sticky参数。我们需要下载一个nginx-goodies/nginx-sticky-module-ng 模块,然后重新编译进nginx中即可生效。
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make && make install
添加sticky模块进去。
重新加载 nginx,访问:
当前是 254.2 主机,输入,三次后:
还会在2主机上,这就是sticky模块的功能。
session共享
如果我们这两台服务器中有一台关闭了的话,会话就会又被重置。用户的信息又丢失了。
我们关闭server2 的tomcat;
这时输入usr4,时就会i把我们的请求转接到了server1上,先前保存的内容又丢失了。
这时我们需要作一个session共享(可以从github获取jar资源)。两台主机都做,让挂的那一台服务其把用户的信息同步给另外一台服务器,这样客户就不会被重置会话了。我们需要下载一些jar包之后就会提供共享功能了,将这些包放到 **tomcat 的 lib ** 目录下,然后配置tomcat的配置文件即可。
下载前:
下载后:
更改配置文件:/usr/local/tomcat/conf/content.xml
server2上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
server1上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.154.2:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
可以看到里面的memcached-session-manager,但是数据的共享是从memcache中获取的,所以两台服务器都下载memcached。
yum install memcached -y
systemctl start memcached.service 启动
重启tomcat
这里要注意tomcat和session的版本需要匹配。
再次测试发现挂掉一台服务器也不会丢失之前的内容。
这样就避免了单点故障。它的内容是交叉存储的,即server1的内容会存到server2上。只有当server2服务器挂掉时才会存到本机。