Nginx+tomcat7+memcached的session共享問題

来源:互联网 发布:保定网络舆情日报 编辑:程序博客网 时间:2024/06/05 14:07

基於上一篇負載均衡

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

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

注意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中添加以下数据:

 

复制代码
<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"                      />
复制代码

如下:

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

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


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

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

复制代码
<%@ 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 oneServer 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>
复制代码

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

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

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

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

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

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

 

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

原创粉丝点击