基於上一篇負載均衡

下面我们就来解决session的问题了

  这里需要将以下jar包放到tomcat的lib文件里面

Nginx+tomcat7+memcached的session共享問題

注意tomcat7的jar包的memcached-session-manager-tc7-1.jar

jar包已上传,下载地址:http://files.cnblogs.com/mouseIT/nginx%2Cmemcached%EF%BC%8Ctomcat%E9%9B%86%E7%BE%A4%E7%9A%84jar%E5%8C%85.rar

 然后在tomcat的context.xml中添加以下数据:

 

Nginx+tomcat7+memcached的session共享問題
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
                    memcachedNodes="n1:127.0.0.1:11211"  
                    sticky="false"  
                    sessionBackupAsync="false"  
                    lockingMode="auto"  
                    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
                    transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"  
                    />
Nginx+tomcat7+memcached的session共享問題

如下:

Nginx+tomcat7+memcached的session共享問題

为了实现session共享,这里我们还需要使用的memcached。

将下下来的memcached直接解压,memcached.exe -d install  安裝   然後看是否啓動


为了测试,我们建一个web项目,记得要在web.xml的web-app中添加<distributable/> 这样服务器才知道这是分布式的。

同时我们建立默认的登陆页面,内容如下:

Nginx+tomcat7+memcached的session共享問題
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
this is tomcat one
Server Info:
<%
String path = request.getContextPath();
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>");
  // 如果有新的 Session 属性设置
  String dataName = request.getParameter("dataName");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }
  out.println("<b>Session 列表</b><br>");
  System.out.println("============================");
  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="<%=path%>/login.jsp" method="POST">
    名称:<input type="text" size=20 name="dataName">
     <br>
    值:<input type="text" size=20 name="dataValue">
     <br>
    <input type="submit">
   </form>
</body>
</html>
Nginx+tomcat7+memcached的session共享問題

这个是在网上收的,具体的原理我就不再阐述了。

然后我们依次启动memcached->tomcat->nginx。注意一定要最先启动memcached,不然启动tomcat时会出错。

然后我们访问127.0.0.1/tomcat下的web项目名

进入主页面后,我们输入名称和值,然后点击提交(这时注意tomcat的窗口),我输入的是abc,123,点击提交后,tomcat1出现如下:

Nginx+tomcat7+memcached的session共享問題

然后我们刷新浏览器,观察tomcat2的窗口,也会出现上面的数据:

Nginx+tomcat7+memcached的session共享問題

这就表示tomcat2获得了session的数据,tomcat1,tomcat2实现了session共享。

 

今天总结的这些只是一个简单的应用,还有很多的细节没有说。这些也是我才学会的。以后还有什么好的东西会继续和大家分享,大家共同探讨!

相关文章: