<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_免费web打印控件-web打印控件-Java Web打印控件 WEB下载控件 WEB文件路径选择控件</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/43933/rss</id><updated>2012-01-04T14:21:40Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/43933/rss"/><entry><id>http://www.cnblogs.com/interdrp/archive/2012/01/04/2312525.html</id><title type="text">彻底解决adobe CS5安装过程中安装程序遇到错误(-1)。请重新启动计算机，然后重试。</title><summary type="text">安装过程中安装程序遇到错误(-1)。请重新启动计算机，然后重试。在重启无数次+百度+google无果后，在国外的某论坛提到了解决办法，猜测原因是可能使用了其他CS5的绿色版软件，导致安装不成功的。法一：找到以下文件夹C:\Program Files\Common Files\Adobe改个名字或者干脆删除，就OK了。i法二：http://www.adobe.com/support/contact/cscleanertool.html下载官方的清理软件，把CS5系列的全部清理干净就可以装了。如果法一还是不行，就两种方法都用。当时，我是两种方法都用了，然后重启后再安装，就OK了。</summary><published>2012-01-04T14:22:00Z</published><updated>2012-01-04T14:22:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2012/01/04/2312525.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2012/01/04/2312525.html"/><content type="html">&lt;p&gt;安装过程中安装程序遇到错误(-1)。请重新启动计算机，然后重试。&lt;br /&gt;&lt;br /&gt;在重启无数次+百度+google无果后，在国外的某论坛提到了解决办法，猜测原因是可能使用了其他CS5的绿色版软件，导致安装不成功的。&lt;/p&gt;&#xD;
&lt;p&gt;法一：找到以下文件夹&lt;br /&gt;&lt;br /&gt;C:\Program Files\Common Files\Adobe&lt;br /&gt;&lt;br /&gt;改个名字或者干脆删除，就OK了。&lt;/p&gt;&#xD;
&lt;p&gt;i法二：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.adobe.com/support/contact/cscleanertool.html"&gt;http://www.adobe.com/support/contact/cscleanertool.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载官方的清理软件，把CS5系列的全部清理干净就可以装了。&lt;/p&gt;&#xD;
&lt;p&gt;如果法一还是不行，就两种方法都用。当时，我是两种方法都用了，然后重启后再安装，就OK了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2312525.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2012/01/04/2312525.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/30/2307112.html</id><title type="text">SWFupload 如何传递参数?</title><summary type="text">swfupload感觉不是很舒服，不太习惯他的一些操作测试代码后发现，事件代码必须有，否则无法正常上传图片&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; var swfu; window.onload = function () { swfu = new SWFUpload({ // Backend Settings upload_url: &amp;quot;upload.aspx&amp;quot;, post_params: { &amp;quot;upload&amp;quot;: &amp;quot;images&amp;quot; },//启动，用来使用querystring 传递</summary><published>2011-12-30T02:55:00Z</published><updated>2011-12-30T02:55:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/30/2307112.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/30/2307112.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;swfupload感觉不是很舒服，不太习惯他的一些操作&lt;/p&gt;&#xD;
&lt;p&gt;测试代码后发现，事件代码必须有，否则无法正常上传图片&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var swfu;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.onload = function () {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swfu = new SWFUpload({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Backend Settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_url: "upload.aspx",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; post_params: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "upload": "images"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/p&gt;&#xD;
&lt;p&gt;//启动，用来使用querystring 传递参数，否则无法进行参数传递&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_query_string:true,&lt;/p&gt;&#xD;
&lt;p&gt;// File Upload Settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //file_size_limit: "2 MB",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //file_types: "*.jpg",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //file_types_description: "JPG Images",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file_upload_limit: "0",&amp;nbsp;&amp;nbsp;&amp;nbsp; // Zero means unlimited&lt;/p&gt;&#xD;
&lt;p&gt;// Event Handler Settings - these functions as defined in Handlers.js&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; The handlers are not part of SWFUpload but are part of my website and control how&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; my website reacts to the SWFUpload events.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file_queue_error_handler: fileQueueError,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file_dialog_complete_handler: fileDialogComplete,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_progress_handler: uploadProgress,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_error_handler: uploadError,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_success_handler: uploadSuccess,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_complete_handler: uploadComplete,&lt;/p&gt;&#xD;
&lt;p&gt;// Button settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_image_url: "js/swfupload/images/XPButtonNoText_160x22.png",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_placeholder_id: "spanButtonPlaceholder",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_width: 160,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_height: 22,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_text: '&amp;lt;span &amp;gt;选择文件&amp;lt;span &amp;gt;(最大10M)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_text_top_padding: 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button_text_left_padding: 5,&lt;/p&gt;&#xD;
&lt;p&gt;// Flash Settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash_url: "js/swfupload/swfupload.swf", // Relative to this file&lt;/p&gt;&#xD;
&lt;p&gt;custom_settings: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upload_target: "divFileProgressContainer"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/p&gt;&#xD;
&lt;p&gt;// Debug Settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug: false&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2307112.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/30/2307112.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/20/2294586.html</id><title type="text">基于nginx的tomcat负载均衡和集群(超简单)</title><summary type="text">今天看到&amp;quot;基于apache的tomcat负载均衡和集群配置 &amp;quot;这篇文章成为javaEye热点。 略看了一下，感觉太复杂，要配置的东西太多，因此在这里写出一种更简洁的方法。 要集群tomcat主要是解决SESSION共享的问题，因此我利用memcached来保存session，多台TOMCAT服务器即可共享SESSION了。 你可以自己写tomcat的扩展来保存SESSION到memcached。 这里推荐使用memcached-session-manager这个开源项目（http://code.google.com/p/memcached-session-manager/ </summary><published>2011-12-20T05:18:00Z</published><updated>2011-12-20T05:18:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294586.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294586.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;今天看到"&lt;strong&gt;&lt;span&gt;基于apache的tomcat负载均衡和集群配置&lt;/span&gt; &lt;/strong&gt;"这篇文章成为javaEye热点。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;略看了一下，感觉太复杂，要配置的东西太多，因此在这里写出一种更简洁的方法。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;要集群tomcat主要是解决SESSION共享的问题，因此我利用memcached来保存session，多台TOMCAT服务器即可共享SESSION了。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;你可以自己写tomcat的扩展来保存SESSION到memcached。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;这里推荐使用memcached-session-manager这个开源项目（&lt;/font&gt;&lt;a href="http://code.google.com/p/memcached-session-manager/" target="_blank"&gt;&lt;font size="2"&gt;http://code.google.com/p/memcached-session-manager/&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; ），下面简称msm。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;如何安装nginx、memcached、tomcat这些就不多说了。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;先说明一下测试环境:&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;tomcat1、nginx、memcached安装在192.168.1.11&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;tomcat2安装在192.168.1.101&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;下面分步实现基于nginx的tomcat负载均衡和集群配置&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&lt;strong&gt;一，tomcat集群&lt;/strong&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1，先下载msm及其依赖包&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar" target="_blank"&gt;http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar"&gt;http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar" target="_blank"&gt;http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://spymemcached.googlecode.com/files/memcached-2.4.2.jar" target="_blank"&gt;http://spymemcached.googlecode.com/files/memcached-2.4.2.jar&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar" target="_blank"&gt;http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;2，将这5个包放到$TOMCAT_HOME/lib目录下&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;3&lt;/font&gt;&lt;a name="Update_server.xml"&gt;&lt;font size="2"&gt;&lt;tt&gt;，修改$TOMCAT_HOME/conf/server.xml&lt;/tt&gt; &lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Xml代码 &lt;a title="复制代码" href="http://www.iteye.com/topic/676347#"&gt;&lt;img alt="复制代码" src="http://www.iteye.com/images/icon_copy.gif" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="收藏这段代码" href="http://www.cnblogs.com/interdrp/admin/javascript:void()"&gt;&lt;img  alt="收藏代码" src="http://www.iteye.com/images/icon_star.png" /&gt;&lt;img  style="display: none" alt="" src="http://www.iteye.com/images/spinner.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;ol &gt;&lt;li&gt;&lt;span&gt;&lt;strong&gt;&lt;font color="#006699"&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Context&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;docBase&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"E:/java_codes/TestSession/WebContent"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;path&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;""&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;reloadable&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"true"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;strong&gt;&lt;font color="#006699"&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;Manager&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;className&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"de.javakaffee.web.msm.MemcachedBackupSessionManager"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;memcachedNodes&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"n1:localhost:11211"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;requestUriIgnorePattern&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;".*\.(png|gif|jpg|css|js)$"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;sessionBackupAsync&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"false"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;sessionBackupTimeout&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"100"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;transcoderFactoryClass&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;copyCollectionsForSerialization&lt;/font&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"false"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;/&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;strong&gt;&lt;font color="#006699"&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;Context&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;pre  title="基于nginx的tomcat负载均衡和集群(超简单)" style="display: none" pre_index="0" source_url="http://www.iteye.com/topic/676347#1512158" codeable_id="1512158" codeable_type="Post" name="code"&gt;&amp;lt;Context docBase="E:/java_codes/TestSession/WebContent" path="" reloadable="true" &amp;gt;&#xD;
&amp;lt;Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"&#xD;
    memcachedNodes="n1:localhost:11211"&#xD;
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"&#xD;
    sessionBackupAsync="false"&#xD;
    sessionBackupTimeout="100"&#xD;
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"&#xD;
    copyCollectionsForSerialization="false"&#xD;
    /&amp;gt;&#xD;
&amp;lt;/Context&amp;gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp;这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开，如:&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp;n1:localhost:11211 n2:localhost:11212&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp;sessionBackupTimeout的单位为分钟&lt;/font&gt;&lt;a name="Update_server.xml"&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff00ff"&gt;E:/java_codes/TestSession/WebContent&lt;/span&gt; 替换成你的WEB目录&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp; 修改后重启两个TOMCAT即可,这个时候已经解决SESSION的共享问题.&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&lt;strong&gt;二，配置nginx实现负载均衡&lt;/strong&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp; 以我的nginx.conf为例&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Xml代码 &lt;a title="复制代码" href="http://www.iteye.com/topic/676347#"&gt;&lt;img alt="复制代码" src="http://www.iteye.com/images/icon_copy.gif" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="收藏这段代码" href="http://www.cnblogs.com/interdrp/admin/javascript:void()"&gt;&lt;img  alt="收藏代码" src="http://www.iteye.com/images/icon_star.png" /&gt;&lt;img  style="display: none" alt="" src="http://www.iteye.com/images/spinner.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;ol &gt;&lt;li&gt;&lt;span&gt;#user&amp;nbsp;&amp;nbsp;nobody; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;worker_processes&amp;nbsp;&amp;nbsp;1; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;error_log&amp;nbsp;&amp;nbsp;logs/error.log; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;events&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker_connections&amp;nbsp;&amp;nbsp;1024; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;http&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mime.types; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_type&amp;nbsp;&amp;nbsp;application/octet-stream; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendfile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;on; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keepalive_timeout&amp;nbsp;&amp;nbsp;65; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#gzip&amp;nbsp;&amp;nbsp;on; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;upstream&amp;nbsp;&amp;nbsp;www.docyeah.com&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;&amp;nbsp;&amp;nbsp;192.168.1.11:8080; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;&amp;nbsp;&amp;nbsp;192.168.1.101:8080; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;80; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server_name&amp;nbsp;&amp;nbsp;www.docyeah.com; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;charset&amp;nbsp;utf-8; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;/&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;html; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;&amp;nbsp;index.html&amp;nbsp;index.htm; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.docyeah.com; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;&amp;nbsp;X-Real-IP&amp;nbsp;&amp;nbsp;$remote_addr; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client_max_body_size&amp;nbsp;&amp;nbsp;100m; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;location&amp;nbsp;~&amp;nbsp;^/(WEB-INF)/&amp;nbsp;{&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;all;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_page&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp;502&amp;nbsp;503&amp;nbsp;504&amp;nbsp;&amp;nbsp;/50x.html; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#ff0000"&gt;location&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;=&amp;nbsp;/50x.html&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;html; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;pre  title="基于nginx的tomcat负载均衡和集群(超简单)" style="display: none" pre_index="1" source_url="http://www.iteye.com/topic/676347#1512158" codeable_id="1512158" codeable_type="Post" name="code"&gt;#user  nobody;&#xD;
worker_processes  1;&#xD;
&#xD;
error_log  logs/error.log;&#xD;
&#xD;
events {&#xD;
    worker_connections  1024;&#xD;
}&#xD;
&#xD;
&#xD;
http {&#xD;
    include       mime.types;&#xD;
    default_type  application/octet-stream;&#xD;
&#xD;
    sendfile        on;&#xD;
    keepalive_timeout  65;&#xD;
&#xD;
    #gzip  on;&#xD;
    upstream  www.docyeah.com   {&#xD;
              server   192.168.1.11:8080;&#xD;
              server   192.168.1.101:8080;&#xD;
    }&#xD;
    server {&#xD;
        listen       80;&#xD;
        server_name  www.docyeah.com;&#xD;
        charset utf-8;&#xD;
        location / {&#xD;
            root   html;&#xD;
            index  index.html index.htm;&#xD;
            proxy_pass        http://www.docyeah.com;&#xD;
            proxy_set_header  X-Real-IP  $remote_addr;&#xD;
            client_max_body_size  100m;&#xD;
        }&#xD;
&#xD;
&#xD;
        location ~ ^/(WEB-INF)/ { &#xD;
	    deny all; &#xD;
        } &#xD;
&#xD;
        error_page   500 502 503 504  /50x.html;&#xD;
        location = /50x.html {&#xD;
            root   html;&#xD;
        }&#xD;
&#xD;
    }&#xD;
}&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;将www.docyeah.com替换成你的域名&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;192.168.1.11和192.168.1.101替换成你服务器的IP&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;OK，已经完成。启动nginx即可。&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;这是我采用的负载均衡及集群方案，希望大家拍砖.&lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;补充：nginx在配置upstream时，有两个参数： &lt;br /&gt;ip_hash（同一IP一直使用同一台server服务） &lt;br /&gt;weight（server的使用权重，数值越大，nginx分发的请求越多） &lt;br /&gt;&lt;br /&gt;通过配合这两个参数，能粗糙地解决session共享的问题。 &lt;br /&gt;对于一些不是太依赖session的应用，或者只有用户登录时保存，那么我认为可以用Cookies代替。 &lt;br /&gt;即使真的要Session共享，我认为手动写代码保存到Memcached比为Tomcat加插件好，这样能获得更好的可控性。 &lt;br /&gt;而且我不用Tomcat，用Resin，这个msm就用不上啦，不过我会按照我的思想实现session共享，呵呵，个人愚见！！ &lt;/p&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2294586.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294586.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/20/2294451.html</id><title type="text">NGINX 配置404错误页面转向</title><summary type="text">什么是404页面如果碰巧网站出了问题，或者用户试图访问一个并不存在的页面时，此时服务器会返回代码为404的错误信息，此时对应页面就是404页面。404页面的默认内容和具体的服务器有关。如果后台用的是NGINX服务器，那么404页面的内容则为：404 Not Found nginx/0.8.6为什么要自定义404页面在访问时遇到上面这样的404错误页面，我想99%（未经调查，估计数据）的用户会把页面关掉，用户就这样悄悄的流失了。如果此时能有一个漂亮的页面能够引导用户去他想去的地方必然可以留住用户。因此，每一个网站都应该自定义自己的404页面。NGINX下如何自定义404页面IIS和APACHE下</summary><published>2011-12-20T03:27:00Z</published><updated>2011-12-20T03:27:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294451.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294451.html"/><content type="html">&lt;div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;什么是404页面&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果碰巧网站出了问题，或者用户试图访问一个并不存在的页面时，此时服务器会返回代码为404的错误信息，此时对应页面就是404页面。404页面的默认内容和具体的服务器有关。如果后台用的是NGINX服务器，那么404页面的内容则为：&lt;/p&gt;404 Not Found &#xD;
&lt;p align="center"&gt;nginx/0.8.6&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;为什么要自定义404页面&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在访问时遇到上面这样的404错误页面，我想99%（未经调查，估计数据）的用户会把页面关掉，用户就这样悄悄的流失了。如果此时能有一个漂亮的页面能够引导用户去他想去的地方必然可以留住用户。因此，每一个网站都应该自定义自己的404页面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;NGINX下如何自定义404页面&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;IIS和APACHE下自定义404页面的经验介绍文章已经非常多了，NGINX的目前还比较少，凑巧我的几台服务器都是NGINX的，为了解决自家的问题特地对此作了深入的研究。研究结果表明，NGINX下配置自定义的404页面是可行的，而且很简单，只需如下几步：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;创建自己的404.html页面 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt;更改nginx.conf在http定义区域加入： &lt;/p&gt;&#xD;
&lt;p&gt;fastcgi_intercept_errors on; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt;更改nginx.conf在server 区域加入： &lt;/p&gt;&#xD;
&lt;p&gt;error_page 404 = /404.html &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt;测试nginx.conf正确性： &lt;/p&gt;&#xD;
&lt;p&gt;/opt/nginx/sbin/nginx &amp;#8211;t &lt;/p&gt;&#xD;
&lt;p&gt;如果正确应该显示如下信息：&lt;/p&gt;&#xD;
&lt;p&gt;the configuration file /opt/nginx/conf/nginx.conf syntax is ok &lt;br /&gt;configuration file /opt/nginx/conf/nginx.conf test is successful&lt;/p&gt;kill -HUP&amp;nbsp; `cat /opt/nginx/nginx.pid ` &#xD;
&lt;p&gt;&lt;strong&gt;配置文件实例：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;http &lt;br /&gt;{ &lt;br /&gt;include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mime.types; &lt;br /&gt;default_type&amp;nbsp; application/octet-stream; &lt;/p&gt;&#xD;
&lt;p&gt;charset&amp;nbsp; gb2312; &lt;br /&gt;server_names_hash_bucket_size 128; &lt;br /&gt;client_header_buffer_size 32k; &lt;br /&gt;large_client_header_buffers 4 32k; &lt;br /&gt;client_max_body_size 8m; &lt;br /&gt;sendfile on; &lt;br /&gt;tcp_nopush&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on; &lt;/p&gt;&#xD;
&lt;p&gt;keepalive_timeout 60; &lt;/p&gt;&#xD;
&lt;p&gt;tcp_nodelay on; &lt;/p&gt;&#xD;
&lt;p&gt;fastcgi_connect_timeout 300; &lt;br /&gt;fastcgi_send_timeout 300; &lt;br /&gt;fastcgi_read_timeout 300; &lt;br /&gt;fastcgi_buffer_size 64k; &lt;br /&gt;fastcgi_buffers 4 64k; &lt;br /&gt;fastcgi_busy_buffers_size 128k; &lt;br /&gt;fastcgi_temp_file_write_size 128k; &lt;br /&gt;fastcgi_intercept_errors on; &lt;/p&gt;&#xD;
&lt;p&gt;gzip on; &lt;br /&gt;gzip_min_length&amp;nbsp; 1k; &lt;br /&gt;gzip_buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 16k; &lt;br /&gt;gzip_http_version 1.0; &lt;br /&gt;gzip_comp_level 2; &lt;br /&gt;gzip_types&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text/plain application/x-javascript text/css application/xml; &lt;br /&gt;gzip_vary on; &lt;/p&gt;&#xD;
&lt;p&gt;#limit_zone&amp;nbsp; crawler&amp;nbsp; $binary_remote_addr&amp;nbsp; 10m;&lt;/p&gt;&#xD;
&lt;p&gt;#65的配置信息 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; listen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 80; &lt;br /&gt;&amp;nbsp;&amp;nbsp; server_name&amp;nbsp; www.65.la 65.la *.65.la; &lt;br /&gt;&amp;nbsp;&amp;nbsp; index index.html index.htm index.php; &lt;br /&gt;&amp;nbsp;&amp;nbsp; root&amp;nbsp; /opt/www/65; &lt;br /&gt;&amp;nbsp;&amp;nbsp; location ~ .*\.(php|php5)?$ &lt;br /&gt;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #fastcgi_pass&amp;nbsp; unix:/tmp/php-cgi.sock; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_pass&amp;nbsp; 127.0.0.1:9000; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fastcgi_index index.php; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include fcgi.conf; &lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp; error_page&amp;nbsp; 404 = /404.html;&lt;/p&gt;&#xD;
&lt;p&gt;#502 等错误可以用同样的方法来配置。 &lt;br /&gt;&amp;nbsp;&amp;nbsp; error_page&amp;nbsp;&amp;nbsp; 500 502 503 504 = /50x.html; &lt;br /&gt;&amp;nbsp;&amp;nbsp; ocation = /50x.html { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; root&amp;nbsp;&amp;nbsp; html; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp; log_format&amp;nbsp; 65&amp;nbsp; &amp;#8216;$remote_addr &amp;#8211; $remote_user [$time_local] "$request" &amp;#8216; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#8216;$status $body_bytes_sent "$http_referer" &amp;#8216; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#8216;"$http_user_agent" $http_x_forwarded_for&amp;#8217;; &lt;br /&gt;&amp;nbsp;&amp;nbsp; access_log&amp;nbsp; /opt/nginx/logs/65.log&amp;nbsp; 65; &lt;br /&gt;} &lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.必须要添加：fastcgi_intercept_errors on; 如果这个选项没有设置，即使创建了404.html和配置了error_page也没有效果。&lt;/p&gt;fastcgi_intercept_errors 语法: fastcgi_intercept_errors on|off 默认: fastcgi_intercept_errors off 添加位置: http, server, location 默认情况下，nginx不支持自定义404错误页面，只有这个指令被设置为on，nginx才支持将404错误重定向。这里需要注意的是，并不是说设置了fastcgi_intercept_errors on，nginx就会将404错误重定向。在nginx中404错误重定向生效的前提是设置了fastcgi_intercept_errors on,并且正确的设置了error_page这个选项（包括语法和对应的404页面) &#xD;
&lt;p&gt;2.不要出于省事或者提高首页权重的目的将首页指定为404错误页面，也不要用其它方法跳转到首页。 &lt;/p&gt;&#xD;
&lt;p&gt;3.自定义的404页面必须大于512字节，否则可能会出现IE默认的404页面。例如，假设自定义了404.html,大小只有11个字节（内容为：404错误）。用如下两个不存在的地址去访问： &lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2294451.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/20/2294451.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/17/2290950.html</id><title type="text">weblogic10.3压测BEA-000449的调整</title><summary type="text">&amp;lt;Warning&amp;gt; &amp;lt;Socket&amp;gt; &amp;lt;BEA-000449&amp;gt; &amp;lt;Closing socket as no data read from it during the configured idle timeout of 5 secs&amp;gt;调整：Home &amp;gt;Summary of Servers &amp;gt;AdminServer &amp;gt;Configuration &amp;gt;TuningStuck Thread Max Time:600Login Timeout:0说明：Login Timeout The login timeout for this </summary><published>2011-12-17T02:56:00Z</published><updated>2011-12-17T02:56:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/17/2290950.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/17/2290950.html"/><content type="html">&lt;p&gt;&amp;lt;Warning&amp;gt; &amp;lt;Socket&amp;gt; &amp;lt;BEA-000449&amp;gt; &amp;lt;Closing socket as no data read from it during the configured idle timeout of 5 secs&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;调整：&lt;/p&gt;&#xD;
&lt;div&gt;Home &amp;gt;Summary of Servers &amp;gt;&lt;span&gt;AdminServer &amp;gt;&lt;/span&gt;&lt;span&gt;Configuration &amp;gt;&lt;/span&gt;&lt;span&gt;Tuning&lt;/span&gt;&lt;br /&gt;Stuck Thread Max Time:600&lt;br /&gt;Login Timeout:0&lt;br /&gt;&lt;br /&gt;说明：&lt;br /&gt;&lt;a name=""&gt;Login Timeout&lt;/a&gt;&lt;a name="getLoginTimeoutMillis"&gt;&lt;/a&gt;&lt;a name="LoginTimeoutMillis"&gt;&lt;/a&gt; &#xD;
&lt;p&gt;The login timeout for this server's default regular (non-SSL) listen port. This is the maximum amount of time allowed for a new connection to establish.&lt;/p&gt;&#xD;
&lt;p&gt;A value of &lt;code&gt;0&lt;/code&gt; indicates there is no maximum.&lt;/p&gt;&#xD;
&lt;p&gt;MBean Attribute: &lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Minimum value: &lt;code&gt;0&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Maximum value: &lt;code&gt;100000&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Secure value: &lt;code&gt;5000&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2290950.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/17/2290950.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/09/2282637.html</id><title type="text">jquery和prototype冲突解决</title><summary type="text">最近做项目用到了jQuery验证，可在应用的js中也有prototype，导致jQuery无法使用，GOOGLE了一下才知道是这两个之间产生了冲突，也给出了解决办法，也照着上面解决了，把这个贴出来，大家也遇到这个问题时，也可以参考哈。 Java代码 &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; 1.&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;var jQuery=$;&amp;lt;/script&amp;gt; 2.&amp;lt;sc</summary><published>2011-12-09T11:28:00Z</published><updated>2011-12-09T11:28:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2282637.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2282637.html"/><content type="html">&lt;p&gt;最近做项目用到了jQuery验证，可在应用的js中也有prototype，导致jQuery无法使用，GOOGLE了一下才知道是这两个之间产生了冲突，也给出了解决办法，也照着上面解决了，把这个贴出来，大家也遇到这个问题时，也可以参考哈。 &lt;/p&gt;&#xD;
&lt;p&gt;Java代码 &lt;br /&gt;&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;1.&amp;lt;script type="text/javascript"&amp;gt;var jQuery=$;&amp;lt;/script&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;2.&amp;lt;script type="text/javascript" type="text/javascript" src="prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;var jQuery=$;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" type="text/javascript" src="prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;大家要注意的是代码的顺序不能改变，否则也是不会起什么作用的。 &lt;br /&gt;转其他网友方法：&lt;br /&gt;本人测试通过的方式:&lt;/p&gt;&#xD;
&lt;p&gt;1、将jquery.js放到prototype.js前面（这个是必须的!）。&lt;br /&gt;2、在jquery.js后面将$变量重命名。&lt;br /&gt;方法如下：&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var jQuery=$;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;script type="text/javascript" type="text/javascript" src="window.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;!--上面这个window.js调用了jquery框架的方法--&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" type="text/javascript" src="prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;3、将原来使用的$方法名一律替换为jQuery名，如$("obj")替换为jQuery("obj")。&lt;/p&gt;&#xD;
&lt;p&gt;例如下面的一段代码, 混合了 jQuery和基于Prototype的 EasyValidation:&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- jquery, 注意加载顺序 --&amp;gt;&lt;br /&gt;&amp;lt;script src="js/jquery-1.2.6.pack.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;#8221;text/javascript&amp;#8221;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var jQuery=$;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 表单验证 --&amp;gt;&lt;br /&gt;&amp;lt;script src="easy_validation/lib/prototype.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="easy_validation/lib/effects.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="easy_validation/src/validation_cn.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="easy_validation/styles/style_min.css" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;div id="contents"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(document).ready(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //jQuery("#contents").load("test.jsp");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jQuery("#contents").load("test.jsp?username=BeanSoft")&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- 为form增加required-validate class,标识需要验证form --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form id='helloworld' action="#" class='required-validate'&amp;gt;&lt;br /&gt;&amp;lt;input name="user.name"  value="beansoft"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *密码:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input name="user.password" type="password"  value="123456" &amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;*密码(重复):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input name="password1" type="password"  value="123456" &amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;input type='submit' value='Submit'/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type='reset' value='Reset'/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2282637.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2282637.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/09/2281707.html</id><title type="text">Jmeter 用动态参数进行测试</title><summary type="text">原文出处：http://blog.chenlb.com/2009/03/jmeter-use-dynamic-params-or-csv-for-test.html常看到的jmeter测试例子，都是用固定的url（包括固定的参数）。现在我有这样一个测试需求：为了模拟用户输入的参数对某个URL进行负载测试（或压力测试）。用户访问的URL（主要的就是参数）可以在web服务器的访问日志的分解得到，这样测试数据准备好，现要jmeter根据这些测试数据去做负载测试。找了一些资料，找到了解压方案：用Jmeter提供的 CSV Data Set Config ，它可以为每一个线程的每一个测试（取样）给新的一</summary><published>2011-12-09T03:08:00Z</published><updated>2011-12-09T03:08:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281707.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281707.html"/><content type="html">&lt;p&gt;原文出处：&lt;a href="http://blog.chenlb.com/2009/03/jmeter-use-dynamic-params-or-csv-for-test.html"&gt;&lt;font color="#0044aa"&gt;http://blog.chenlb.com/2009/03/jmeter-use-dynamic-params-or-csv-for-test.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;!-- google_ad_section_start --&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;常看到的jmeter测试例子，都是用固定的url（包括固定的参数）。现在我有这样一个测试需求：为了模拟用户输入的参数对某个URL进行负载测试（或压力测试）。用户访问的URL（主要的就是参数）可以在web服务器的访问日志的分解得到，这样测试数据准备好，现要jmeter根据这些测试数据去做负载测试。&lt;/p&gt;&#xD;
&lt;p&gt;找了一些资料，找到了解压方案：用Jmeter提供的 &lt;strong&gt;CSV Data Set Config&lt;/strong&gt; ，它可以为每一个线程的每一个测试（取样）给新的一行数据。然后在在取样器里用${}方式来引用它们。&lt;/p&gt;&#xD;
&lt;p&gt;一般 csv 中的行数都会大于线程数，可以把测试任务放到一个&lt;strong&gt;循环控制器&lt;/strong&gt;中，下面来演示下创建一个这样的测试计划：&lt;/p&gt;&#xD;
&lt;p&gt;1、一个线程组&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/thread_group.jpg" target="_blank" rel="lightbox[515]"&gt;&lt;img  title="thread_group" height="290" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/thread_group-600x290.jpg" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;用5个线程，这5个线程20秒内启动完，仅做一次。&lt;/p&gt;&#xD;
&lt;p&gt;2、创建一个循环控制器&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/loop_control.jpg" target="_blank" rel="lightbox[515]"&gt;&lt;img  title="loop_control" height="157" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/loop_control.jpg" width="402" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;每个线程循环2次，这样就相当与对服务器2*5=10次请求，CSV 数据一般会多于10行记录。&lt;/p&gt;&#xD;
&lt;p&gt;3、创建一个 CSV Data Set Config&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/csv_data_set.jpg" target="_blank" rel="lightbox[515]"&gt;&lt;img  title="csv_data_set" height="341" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/csv_data_set.jpg" width="564" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;demo_test.csv 文件放到 &amp;#8220;Demo 测试计划.jmx&amp;#8221;的相同目录，文件编写用GBK，测试计划可引用的属性名是sub_url（多个用逗号分隔，一般有多少列数据就有多少属性），数据分隔用\t（tab）。&lt;/p&gt;&#xD;
&lt;p&gt;4、创建一个HTTP 请求（取样器）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/http_request.jpg" target="_blank" rel="lightbox[515]"&gt;&lt;img  title="http_request" height="261" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/http_request-600x261.jpg" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;路径中引用 CSV 中的数据，${sub_url}。&lt;/p&gt;&#xD;
&lt;p&gt;5、创建一个断言&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/assertion.jpg" target="_blank" rel="lightbox[515]"&gt;&lt;img  title="assertion" height="231" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/assertion-600x231.jpg" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我这里服务器有错是返回非200的响应代码是正确的。&lt;/p&gt;&#xD;
&lt;p&gt;现在就配好了，可以在demo_test.csv文件里加些参数，然后试用下，在察看结果树可以看到服务器返回的结果，同时可以验证下是否每个线程的每次请求是否为csv中的新一行。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2281707.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281707.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/12/09/2281700.html</id><title type="text">Jmeter测试报表相关参数说明</title><summary type="text">原文出处：http://blog.chenlb.com/2009/03/jmeter-report-explain.html转自：http://www.cnitblog.com/coolwasp/archive/2006/11/27/19658.html采用Jmeter测试工具对web系统作的负载测试，得出的响应报表，数据比较难懂，现作一具体说明。以下是在一次具体负载测试中得出的具体数值，测试线程设置情况为：线程数：200，等待时间（ramp-up）：0秒，循环次数为永远，另：线程组——这些元件用于指定运行的线程数和等候周期。每个线程模拟一个用户，而等候周期用于指定创建全部线程的时间。例如，线</summary><published>2011-12-09T03:04:00Z</published><updated>2011-12-09T03:04:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281700.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281700.html"/><content type="html">&lt;p&gt;原文出处：&lt;a href="http://blog.chenlb.com/2009/03/jmeter-report-explain.html"&gt;http://blog.chenlb.com/2009/03/jmeter-report-explain.html&lt;/a&gt;&lt;/p&gt;&lt;!-- google_ad_section_start --&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://www.cnitblog.com/coolwasp/archive/2006/11/27/19658.html" target="_blank"&gt;http://www.cnitblog.com/coolwasp/archive/2006/11/27/19658.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;采用Jmeter测试工具对web系统作的负载测试，得出的响应报表，数据比较难懂，现作一具体说明。&lt;/p&gt;&#xD;
&lt;p&gt;以下是在一次具体负载测试中得出的具体数值，测试线程设置情况为：线程数：200，等待时间（ramp-up）：0秒，循环次数为永远，另：&lt;/p&gt;&#xD;
&lt;p&gt;线程组&amp;#8212;&amp;#8212;这些元件用于指定运行的线程数和等候周期。每个线程模拟一个用户，而等候周期用于指定创建全部线程的时间。例如，线程数为5，等候时间为10秒，则创建每个线程之间的时间间隔为2秒。循环数定义了线程的运行时间。使用调度器，还可以设置运行的起始时间。&lt;/p&gt;&#xD;
&lt;p&gt;取样器&amp;#8212;&amp;#8212;对于服务器HTTP、FTP或LDAP请求，这些元件是可配置请求。该教程仅侧重于Web Services请求。&lt;/p&gt;&#xD;
&lt;p&gt;monitor&amp;#8212;&amp;#8212;这些元件用于请求数据的后期处理。例如，可以将数据保存到文件或用图表来说明结果。此时JMeter图表并没有提供许多配置选项；然而它是可扩展的，它始终可以添加额外的可视化效果或数据处理模块。&lt;/p&gt;&#xD;
&lt;p&gt;得出的图形报表和聚合报告如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;一、&amp;nbsp;图形报表&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/graph-results.jpg" target="_blank" rel="lightbox[499]"&gt;&lt;img  title="graph-results 点击放大" height="423" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/graph-results-600x423.jpg" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图表底部参数的含义如下：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;样本数目：是总共发送到服务器的请求数。&lt;/li&gt;&lt;li&gt;最新样本：是代表时间的数字,是服务器响应最后一个请求的时间。&lt;/li&gt;&lt;li&gt;吞吐量：是服务器每分钟处理的请求数。&lt;/li&gt;&lt;li&gt;平均值：是总运行时间除以发送到服务器的请求数。&lt;/li&gt;&lt;li&gt;中间值：是代表时间的数字，有一半的服务器响应时间低于该值而另一半高于该值。&lt;/li&gt;&lt;li&gt;偏离：表示服务器响应时间变化、离散程度测量值的大小，或者，换句话说，就是数据的分布。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;二、&amp;nbsp;聚合报告&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.chenlb.com/wp-content/uploads/2009/03/aggregate-report.jpg" target="_blank" rel="lightbox[499]"&gt;&lt;img  title="aggregate-report 点击放大" height="44" alt="" src="http://blog.chenlb.com/wp-content/uploads/2009/03/aggregate-report-600x44.jpg" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图表含义说明如下：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Label：说明是请求类型，如Http，FTP等请求。&lt;/li&gt;&lt;li&gt;#Samples：也就是图形报表中的样本数目，总共发送到服务器的样本数目。&lt;/li&gt;&lt;li&gt;Average：也就是图形报表中的平均值，是总运行时间除以发送到服务器的请求数。&lt;/li&gt;&lt;li&gt;Median：也就是图形报表中的中间值，是代表时间的数字，有一半的服务器响应时间低于该值而另一半高于该值。&lt;/li&gt;&lt;li&gt;90%line：是指90%请求的响应时间比所得数值还要小。&lt;/li&gt;&lt;li&gt;Min：是代表时间的数字,是服务器响应的最短时间。&lt;/li&gt;&lt;li&gt;Max: 是代表时间的数字,是服务器响应的最长时间。&lt;/li&gt;&lt;li&gt;Error%:请求的错误百分比。&lt;/li&gt;&lt;li&gt;Throughput:也就是图形报表中的吞吐量，这里是服务器每单位时间处理的请求数，注意查看是秒或是分钟。&lt;/li&gt;&lt;li&gt;KB/sec:是每秒钟请求的字节数。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;三、&amp;nbsp;使用分析&lt;/p&gt;&#xD;
&lt;p&gt;在测试过程中，平均响应时间是我们性能测试的一个重要衡量指标，但是在测试中，特别是在聚合报告中，得出的90%Line,我这里参考《《LoadRunner 没有告诉你的》之一&amp;#8212;&amp;#8212;描述性统计与性能结果分析》，我认为90%Line等同于该文作者提出的90%响应时间,这个数值对我们性能测试分析也很有参考价值。90%响应时间是说在发送的请求中，90%的用户响应时间都比得到的数值上要短，同时说明，一个系统在应用时，90%的用户响应时间都能达到这个数值，那么就为系统性能分析提供了很好的参考价值。&lt;/p&gt;&#xD;
&lt;p&gt;四、&amp;nbsp;参考文档&lt;br /&gt;1、《JMeter在Web Services性能测试中的应用》，作者Dmitri Nevedrov，引自：&lt;br /&gt;&lt;a href="http://dev2dev.bea.com.cn/techdoc/20060912878.html"&gt;http://dev2dev.bea.com.cn/techdoc/20060912878.html&lt;/a&gt;。&lt;br /&gt;2、《《LoadRunner 没有告诉你的》之一&amp;#8212;&amp;#8212;描述性统计与性能结果分析》，作者：陈雷 (Jackei)，引自：&lt;a href="http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html"&gt;http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html&lt;/a&gt;。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2281700.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/12/09/2281700.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/10/28/2228201.html</id><title type="text">javamail,jmail发送邮件</title><summary type="text">今天学习了一下JavaMail，javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便，自己写了段代码，打成jar包，以方便以后使用。呵呵 以下三段代码是我的全部代码，朋友们如果想用，直接复制即可。我的代码有三个类： 第一个类：MailSenderInfo.java Java代码 package reyo.sdk.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHos..</summary><published>2011-10-28T14:32:00Z</published><updated>2011-10-28T14:32:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/10/28/2228201.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/10/28/2228201.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;今天学习了一下JavaMail，javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便，自己写了段代码，打成jar包，以方便以后使用。呵呵 &lt;/p&gt;&#xD;
&lt;p&gt;以下三段代码是我的全部代码，朋友们如果想用，直接复制即可。&lt;br /&gt;我的代码有三个类： &lt;br /&gt;第一个类：MailSenderInfo.java &lt;br /&gt;Java代码&amp;nbsp; &lt;br /&gt;package reyo.sdk.mail;&amp;nbsp;&amp;nbsp; &lt;br /&gt;/**&amp;nbsp;&amp;nbsp; &lt;br /&gt;* 发送邮件需要使用的基本信息&amp;nbsp;&amp;nbsp; &lt;br /&gt;*/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import java.util.Properties;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;public class MailSenderInfo {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 发送邮件的服务器的IP和端口&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String mailServerHost;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String mailServerPort = "25";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 邮件发送者的地址&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String fromAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 邮件接收者的地址&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String toAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 登陆邮件发送服务器的用户名和密码&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userName;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String password;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 是否需要身份验证&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private boolean validate = false;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 邮件主题&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String subject;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 邮件的文本内容&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String content;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 邮件附件的文件名&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String[] attachFileNames;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 获得邮件会话属性&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Properties getProperties(){&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties p = new Properties();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.host", this.mailServerHost);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.port", this.mailServerPort);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.auth", validate ? "true" : "false");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return p;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMailServerHost() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return mailServerHost;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMailServerHost(String mailServerHost) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.mailServerHost = mailServerHost;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMailServerPort() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return mailServerPort;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMailServerPort(String mailServerPort) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.mailServerPort = mailServerPort;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean isValidate() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return validate;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setValidate(boolean validate) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.validate = validate;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String[] getAttachFileNames() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return attachFileNames;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setAttachFileNames(String[] fileNames) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.attachFileNames = fileNames;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getFromAddress() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return fromAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setFromAddress(String fromAddress) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fromAddress = fromAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getPassword() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return password;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setPassword(String password) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.password = password;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getToAddress() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return toAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setToAddress(String toAddress) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.toAddress = toAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserName() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return userName;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserName(String userName) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.userName = userName;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSubject() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return subject;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSubject(String subject) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.subject = subject;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getContent() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return content;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setContent(String textContent) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.content = textContent;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;package reyo.sdk.mail;&lt;br /&gt;/** &lt;br /&gt;* 发送邮件需要使用的基本信息 &lt;br /&gt;*/ &lt;br /&gt;import java.util.Properties; &lt;br /&gt;public class MailSenderInfo { &lt;br /&gt;&amp;nbsp;// 发送邮件的服务器的IP和端口 &lt;br /&gt;&amp;nbsp;private String mailServerHost; &lt;br /&gt;&amp;nbsp;private String mailServerPort = "25"; &lt;br /&gt;&amp;nbsp;// 邮件发送者的地址 &lt;br /&gt;&amp;nbsp;private String fromAddress; &lt;br /&gt;&amp;nbsp;// 邮件接收者的地址 &lt;br /&gt;&amp;nbsp;private String toAddress; &lt;br /&gt;&amp;nbsp;// 登陆邮件发送服务器的用户名和密码 &lt;br /&gt;&amp;nbsp;private String userName; &lt;br /&gt;&amp;nbsp;private String password; &lt;br /&gt;&amp;nbsp;// 是否需要身份验证 &lt;br /&gt;&amp;nbsp;private boolean validate = false; &lt;br /&gt;&amp;nbsp;// 邮件主题 &lt;br /&gt;&amp;nbsp;private String subject; &lt;br /&gt;&amp;nbsp;// 邮件的文本内容 &lt;br /&gt;&amp;nbsp;private String content; &lt;br /&gt;&amp;nbsp;// 邮件附件的文件名 &lt;br /&gt;&amp;nbsp;private String[] attachFileNames; &amp;nbsp;&lt;br /&gt;&amp;nbsp;/** &lt;br /&gt;&amp;nbsp;&amp;nbsp; * 获得邮件会话属性 &lt;br /&gt;&amp;nbsp;&amp;nbsp; */ &lt;br /&gt;&amp;nbsp;public Properties getProperties(){ &lt;br /&gt;&amp;nbsp;&amp;nbsp; Properties p = new Properties(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.host", this.mailServerHost); &lt;br /&gt;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.port", this.mailServerPort); &lt;br /&gt;&amp;nbsp;&amp;nbsp; p.put("mail.smtp.auth", validate ? "true" : "false"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; return p; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public String getMailServerHost() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return mailServerHost; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public void setMailServerHost(String mailServerHost) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.mailServerHost = mailServerHost; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getMailServerPort() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return mailServerPort; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setMailServerPort(String mailServerPort) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.mailServerPort = mailServerPort; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public boolean isValidate() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return validate; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setValidate(boolean validate) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.validate = validate; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String[] getAttachFileNames() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return attachFileNames; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setAttachFileNames(String[] fileNames) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.attachFileNames = fileNames; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getFromAddress() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return fromAddress; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public void setFromAddress(String fromAddress) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.fromAddress = fromAddress; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getPassword() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return password; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setPassword(String password) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.password = password; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getToAddress() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return toAddress; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public void setToAddress(String toAddress) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.toAddress = toAddress; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public String getUserName() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return userName; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setUserName(String userName) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.userName = userName; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getSubject() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return subject; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setSubject(String subject) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.subject = subject; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public String getContent() { &lt;br /&gt;&amp;nbsp;&amp;nbsp; return content; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void setContent(String textContent) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.content = textContent; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;} &lt;/p&gt;&#xD;
&lt;p&gt;第二个类：SimpleMailSender.java &lt;br /&gt;Java代码&amp;nbsp; &lt;br /&gt;package reyo.sdk.mail;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;import java.util.Date;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import java.util.Properties;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.Address;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.BodyPart;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.Message;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.MessagingException;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.Multipart;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.Session;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.Transport;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.internet.InternetAddress;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.internet.MimeBodyPart;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.internet.MimeMessage;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;import javax.mail.internet.MimeMultipart;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;/**&amp;nbsp;&amp;nbsp; &lt;br /&gt;* 简单邮件（不带附件的邮件）发送器&amp;nbsp;&amp;nbsp; &lt;br /&gt;*/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;public class SimpleMailSender&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;/**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; * 以文本格式发送邮件&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; * @param mailInfo 待发送的邮件的信息&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; */&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean sendTextMail(MailSenderInfo mailInfo) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 判断是否需要身份认证&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyAuthenticator authenticator = null;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties pro = mailInfo.getProperties();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (mailInfo.isValidate()) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 如果需要身份认证，则创建一个密码验证器&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 根据邮件会话属性和密码验证器构造一个发送邮件的session&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session sendMailSession = Session.getDefaultInstance(pro,authenticator);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 根据session创建一个邮件消息&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message mailMessage = new MimeMessage(sendMailSession);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建邮件发送者地址&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address from = new InternetAddress(mailInfo.getFromAddress());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息的发送者&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setFrom(from);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建邮件的接收者地址，并设置到邮件消息中&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address to = new InternetAddress(mailInfo.getToAddress());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setRecipient(Message.RecipientType.TO,to);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主题&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setSubject(mailInfo.getSubject());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息发送的时间&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setSentDate(new Date());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主要内容&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String mailContent = mailInfo.getContent();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setText(mailContent);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 发送邮件&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transport.send(mailMessage);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (MessagingException ex) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.printStackTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 以HTML格式发送邮件&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param mailInfo 待发送的邮件信息&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static boolean sendHtmlMail(MailSenderInfo mailInfo){&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 判断是否需要身份认证&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyAuthenticator authenticator = null;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties pro = mailInfo.getProperties();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //如果需要身份认证，则创建一个密码验证器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (mailInfo.isValidate()) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 根据邮件会话属性和密码验证器构造一个发送邮件的session&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session sendMailSession = Session.getDefaultInstance(pro,authenticator);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 根据session创建一个邮件消息&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message mailMessage = new MimeMessage(sendMailSession);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建邮件发送者地址&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address from = new InternetAddress(mailInfo.getFromAddress());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息的发送者&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setFrom(from);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建邮件的接收者地址，并设置到邮件消息中&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address to = new InternetAddress(mailInfo.getToAddress());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Message.RecipientType.TO属性表示接收者的类型为TO&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setRecipient(Message.RecipientType.TO,to);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主题&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setSubject(mailInfo.getSubject());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置邮件消息发送的时间&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setSentDate(new Date());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Multipart mainPart = new MimeMultipart();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 创建一个包含HTML内容的MimeBodyPart&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BodyPart html = new MimeBodyPart();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 设置HTML内容&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mainPart.addBodyPart(html);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 将MiniMultipart对象设置为邮件内容&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailMessage.setContent(mainPart);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 发送邮件&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transport.send(mailMessage);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (MessagingException ex) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.printStackTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;package reyo.sdk.mail;&lt;/p&gt;&#xD;
&lt;p&gt;import java.util.Date; &lt;br /&gt;import java.util.Properties;&lt;br /&gt;import javax.mail.Address; &lt;br /&gt;import javax.mail.BodyPart; &lt;br /&gt;import javax.mail.Message; &lt;br /&gt;import javax.mail.MessagingException; &lt;br /&gt;import javax.mail.Multipart; &lt;br /&gt;import javax.mail.Session; &lt;br /&gt;import javax.mail.Transport; &lt;br /&gt;import javax.mail.internet.InternetAddress; &lt;br /&gt;import javax.mail.internet.MimeBodyPart; &lt;br /&gt;import javax.mail.internet.MimeMessage; &lt;br /&gt;import javax.mail.internet.MimeMultipart; &lt;/p&gt;&#xD;
&lt;p&gt;/** &lt;br /&gt;* 简单邮件（不带附件的邮件）发送器 &lt;br /&gt;*/ &lt;br /&gt;public class SimpleMailSender&amp;nbsp; { &lt;br /&gt;/** &lt;br /&gt;&amp;nbsp; * 以文本格式发送邮件 &lt;br /&gt;&amp;nbsp; * @param mailInfo 待发送的邮件的信息 &lt;br /&gt;&amp;nbsp; */ &lt;br /&gt;&amp;nbsp;public boolean sendTextMail(MailSenderInfo mailInfo) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 判断是否需要身份认证 &lt;br /&gt;&amp;nbsp;&amp;nbsp; MyAuthenticator authenticator = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp; Properties pro = mailInfo.getProperties();&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (mailInfo.isValidate()) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 如果需要身份认证，则创建一个密码验证器 &lt;br /&gt;&amp;nbsp;&amp;nbsp;authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; // 根据邮件会话属性和密码验证器构造一个发送邮件的session &lt;br /&gt;&amp;nbsp;&amp;nbsp; Session sendMailSession = Session.getDefaultInstance(pro,authenticator); &lt;br /&gt;&amp;nbsp;&amp;nbsp; try { &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 根据session创建一个邮件消息 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Message mailMessage = new MimeMessage(sendMailSession); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 创建邮件发送者地址 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Address from = new InternetAddress(mailInfo.getFromAddress()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息的发送者 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setFrom(from); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 创建邮件的接收者地址，并设置到邮件消息中 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Address to = new InternetAddress(mailInfo.getToAddress()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setRecipient(Message.RecipientType.TO,to); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主题 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setSubject(mailInfo.getSubject()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息发送的时间 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setSentDate(new Date()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主要内容 &lt;br /&gt;&amp;nbsp;&amp;nbsp; String mailContent = mailInfo.getContent(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setText(mailContent); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 发送邮件 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Transport.send(mailMessage);&lt;br /&gt;&amp;nbsp;&amp;nbsp; return true; &lt;br /&gt;&amp;nbsp;&amp;nbsp; } catch (MessagingException ex) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.printStackTrace(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp; return false; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;/** &lt;br /&gt;&amp;nbsp;&amp;nbsp; * 以HTML格式发送邮件 &lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param mailInfo 待发送的邮件信息 &lt;br /&gt;&amp;nbsp;&amp;nbsp; */ &lt;br /&gt;&amp;nbsp;public static boolean sendHtmlMail(MailSenderInfo mailInfo){ &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 判断是否需要身份认证 &lt;br /&gt;&amp;nbsp;&amp;nbsp; MyAuthenticator authenticator = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Properties pro = mailInfo.getProperties();&lt;br /&gt;&amp;nbsp;&amp;nbsp; //如果需要身份认证，则创建一个密码验证器&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (mailInfo.isValidate()) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());&lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 根据邮件会话属性和密码验证器构造一个发送邮件的session &lt;br /&gt;&amp;nbsp;&amp;nbsp; Session sendMailSession = Session.getDefaultInstance(pro,authenticator); &lt;br /&gt;&amp;nbsp;&amp;nbsp; try { &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 根据session创建一个邮件消息 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Message mailMessage = new MimeMessage(sendMailSession); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 创建邮件发送者地址 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Address from = new InternetAddress(mailInfo.getFromAddress()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息的发送者 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setFrom(from); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 创建邮件的接收者地址，并设置到邮件消息中 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Address to = new InternetAddress(mailInfo.getToAddress()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // Message.RecipientType.TO属性表示接收者的类型为TO &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setRecipient(Message.RecipientType.TO,to); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息的主题 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setSubject(mailInfo.getSubject()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置邮件消息发送的时间 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setSentDate(new Date()); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Multipart mainPart = new MimeMultipart(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 创建一个包含HTML内容的MimeBodyPart &lt;br /&gt;&amp;nbsp;&amp;nbsp; BodyPart html = new MimeBodyPart(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 设置HTML内容 &lt;br /&gt;&amp;nbsp;&amp;nbsp; html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mainPart.addBodyPart(html); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 将MiniMultipart对象设置为邮件内容 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailMessage.setContent(mainPart); &lt;br /&gt;&amp;nbsp;&amp;nbsp; // 发送邮件 &lt;br /&gt;&amp;nbsp;&amp;nbsp; Transport.send(mailMessage); &lt;br /&gt;&amp;nbsp;&amp;nbsp; return true; &lt;br /&gt;&amp;nbsp;&amp;nbsp; } catch (MessagingException ex) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.printStackTrace(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp; return false; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;} &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第三个类：MyAuthenticator.java &lt;br /&gt;Java代码&amp;nbsp; &lt;br /&gt;package reyo.sdk.mail;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;import javax.mail.*;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;public class MyAuthenticator extends Authenticator{&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String userName=null;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String password=null;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MyAuthenticator(){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MyAuthenticator(String username, String password) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.userName = username;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.password = password;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected PasswordAuthentication getPasswordAuthentication(){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new PasswordAuthentication(userName, password);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;package reyo.sdk.mail;&lt;/p&gt;&#xD;
&lt;p&gt;import javax.mail.*;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;public class MyAuthenticator extends Authenticator{&lt;br /&gt;&amp;nbsp;String userName=null;&lt;br /&gt;&amp;nbsp;String password=null;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;public MyAuthenticator(){&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public MyAuthenticator(String username, String password) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;this.userName = username; &lt;br /&gt;&amp;nbsp;&amp;nbsp;this.password = password; &lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;protected PasswordAuthentication getPasswordAuthentication(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;return new PasswordAuthentication(userName, password);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;下面给出使用上面三个类的代码： &lt;br /&gt;Java代码&amp;nbsp; &lt;br /&gt;public static void main(String[] args){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个类主要是设置邮件&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MailSenderInfo mailInfo = new MailSenderInfo();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setMailServerHost("smtp.qq.com");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setMailServerPort("25");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setValidate(true);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setUserName("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#113;&amp;#113;&amp;#46;&amp;#99;&amp;#111;&amp;#109;"&gt;apple@qq.com&lt;/a&gt;");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setPassword("**********");//您的邮箱密码&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setFromAddress("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#113;&amp;#113;&amp;#46;&amp;#99;&amp;#111;&amp;#109;"&gt;apple@qq.com&lt;/a&gt;");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setToAddress("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#113;&amp;#113;&amp;#46;&amp;#99;&amp;#111;&amp;#109;"&gt;apple@qq.com&lt;/a&gt;");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setSubject("设置邮箱标题");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailInfo.setContent("设置邮箱内容");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个类主要来发送邮件&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SimpleMailSender sms = new SimpleMailSender();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendTextMail(mailInfo);//发送文体格式&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendHtmlMail(mailInfo);//发送html格式&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;public static void main(String[] args){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个类主要是设置邮件&lt;br /&gt;&amp;nbsp;&amp;nbsp; MailSenderInfo mailInfo = new MailSenderInfo(); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setMailServerHost("smtp.qq.com"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setMailServerPort("25"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setValidate(true); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setUserName("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#114;&amp;#101;&amp;#121;&amp;#111;&amp;#46;&amp;#99;&amp;#110;"&gt;apple@reyo.cn&lt;/a&gt;"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setPassword("**********");//您的邮箱密码 &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setFromAddress("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#114;&amp;#101;&amp;#121;&amp;#111;&amp;#46;&amp;#99;&amp;#110;"&gt;apple@reyo.cn&lt;/a&gt;"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setToAddress("&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#112;&amp;#112;&amp;#108;&amp;#101;&amp;#64;&amp;#114;&amp;#101;&amp;#121;&amp;#111;&amp;#46;&amp;#99;&amp;#110;"&gt;apple@reyo.cn&lt;/a&gt;"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setSubject("设置邮箱标题"); &lt;br /&gt;&amp;nbsp;&amp;nbsp; mailInfo.setContent("设置邮箱内容"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个类主要来发送邮件&lt;br /&gt;&amp;nbsp;&amp;nbsp; SimpleMailSender sms = new SimpleMailSender();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendTextMail(mailInfo);//发送文体格式 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendHtmlMail(mailInfo);//发送html格式&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2228201.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/10/28/2228201.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/interdrp/archive/2011/10/18/2216845.html</id><title type="text">改善用户体念:Jquery实现td tr单击事件(input事件)</title><summary type="text">用Jquery给Table 的TD TR绑定事件 问题发生背景： 1:一客户常改下级用户的权限每次操作都在table的input处点击，如果太频繁的操作就会感觉效率太低。就提出了有否在相应的td位置点击实现input事件呢？这样操作要快很多。 实现效果如下： 更友好的table管理及操作1:根据选中的员工人数按钮实现相应的变化2:实现了tr的行选中事件(jquery:checkbox选中行)(JQuery点击行(tr)实现checkBox选中)3:实现在了tr中的td的双击编辑事件</summary><published>2011-10-18T12:16:00Z</published><updated>2011-10-18T12:16:00Z</updated><author><name>锐洋软件</name><uri>http://www.cnblogs.com/interdrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/interdrp/archive/2011/10/18/2216845.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/interdrp/archive/2011/10/18/2216845.html"/><content type="html">&lt;p&gt;用Jquery给Table 的TD TR绑定事件 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;问题发生背景：&lt;/p&gt;&#xD;
&lt;p&gt;1:一客户常改下级用户的权限每次操作都在table的input处点击，如果太频繁的操作就会感觉效率太低。就提出了有否在相应的td位置点击实现input事件呢？&lt;/p&gt;&#xD;
&lt;p&gt;这样操作要快很多。&lt;/p&gt;&#xD;
&lt;p&gt;实现效果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img style="width: 1045px; height: 337px" height="337" alt="" src="http://images.cnblogs.com/cnblogs_com/interdrp/sms/20111018_01.gif" width="1045" border="0" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;更友好的table管理及操作&lt;/p&gt;&#xD;
&lt;p&gt;1:根据选中的员工人数按钮实现相应的变化&lt;/p&gt;&#xD;
&lt;p&gt;2:实现了tr的行选中事件(jquery:checkbox选中行)(JQuery点击行(tr)实现checkBox选中)&lt;/p&gt;&#xD;
&lt;p&gt;3:实现在了tr中的td的双击编辑事件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img height="184" alt="" src="http://images.cnblogs.com/cnblogs_com/interdrp/sms/20111018_02.gif" width="816" border="0" longdesc="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/interdrp/aggbug/2216845.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/interdrp/archive/2011/10/18/2216845.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
