﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-午后星期午</title><link>http://www.blogjava.net/wshao/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:04:32 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:04:32 GMT</pubDate><ttl>60</ttl><item><title>Java 单例模式详解</title><link>http://www.blogjava.net/wshao/archive/2014/03/27/411542.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Wed, 26 Mar 2014 17:20:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2014/03/27/411542.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/411542.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2014/03/27/411542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/411542.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/411542.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 概念：　　java中单例模式是一种常见的设计模式，单例模式分三种：懒汉式单例、饿汉式单例、登记式单例三种。　　单例模式有一下特点：　　1、单例类只能有一个实例。　　2、单例类必须自己自己创建自己的唯一实例。　　3、单例类必须给所有其他对象提供这一实例。　　单例模式确保某个类只有一个实例，而且自行实例化并向整个系统提供这个实例。在计算机系统中，线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对...&nbsp;&nbsp;<a href='http://www.blogjava.net/wshao/archive/2014/03/27/411542.html'>阅读全文</a><img src ="http://www.blogjava.net/wshao/aggbug/411542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2014-03-27 01:20 <a href="http://www.blogjava.net/wshao/archive/2014/03/27/411542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>值传递、引用传递的区别</title><link>http://www.blogjava.net/wshao/archive/2014/03/26/411537.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Wed, 26 Mar 2014 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2014/03/26/411537.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/411537.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2014/03/26/411537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/411537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/411537.html</trackback:ping><description><![CDATA[<div clearfix"="" style="zoom: 1; position: relative; color: #454545; font-family: tahoma, helvetica, arial; font-size: 12px; line-height: normal; background-color: #fcf8e9;"><h2></h2></div><div>所谓值传递，就是说仅将对象的值传递给目标对象，就相当于copy；系统将为目标对象重新开辟一个完全相同的内存空间。</div><div>所谓引用，就是说将对象在内存中的地址传递给目标对象，就相当于使目标对象和原始对象对应同一个内存存储空间。此时，如果对目标对象进行修改，内存中的数据也会改变。</div><div>值传递，例如：</div><div>class TestT1&nbsp;</div><div>{&nbsp;</div><div>public static void main(String[] args)&nbsp;</div><div>{&nbsp;</div><div>int i = 5;&nbsp;</div><div>int j = 6;&nbsp;</div><div>System.out.println("before exchange i = "+i);//交换前</div><div>exchange(i, j);&nbsp;</div><div>System.out.println("after exchange i = "+i);//交换后</div><div>}</div><div>public static void exchange(int a,int b)&nbsp;</div><div>{&nbsp;</div><div>int k;</div><div>k = a;a = b; b = k;&nbsp;</div><div>}&nbsp;</div><div>}&nbsp;</div><div></div><div>程序的结果是5！！！&nbsp;</div><div>这说明，原始数据类型是按值传递的，这个按值传递也是指的是进行赋值时的行为。&nbsp;</div><div>Java语言明确说明取消了指针，因为指针往往是在带来方便的同时也是导致代码不安全的根源，同时也会使程序的变得非常复杂难以理解，但这只是在Java语言中没有明确的指针定义，实质上每一个new语句返回的都是一个指针的引用。</div><div>引用传递，例如：</div><div>class TestT2</div><div>{&nbsp;</div><div>public static void main(String[] args)&nbsp;</div><div>{&nbsp;</div><div>StringBuffer s= new StringBuffer("good");&nbsp;</div><div>StringBuffer s2=s;&nbsp;</div><div>s2.append(" afternoon.");&nbsp;</div><div>System.out.println(s);&nbsp;</div><div>}&nbsp;</div><div>}&nbsp;</div><div></div><div>对象s和s2指向的是内存中的同一个地址因此指向的是同一个对象。&nbsp;</div><div>这里的意思是进行对象赋值操作是传递的是对象的引用，因此对象是按引用传递的。&nbsp;</div><div>程序运行的输出是：&nbsp;</div><div>good afternoon.&nbsp;</div><div>这说明s2和s是同一个对象。</div><div>总结：&nbsp;</div><div>大家都知道，在JAVA中变量有以下两种：</div><div>基本类型变量，包括boolean、byte、char、short、int、long、float、double。</div><div>引用类型变量，包括类、接口、数组（基本类型数组和对象数组）。</div><div>对于基本类型和基本类型变量被当作参数传递给方法时，是值传递。在方法实体中，无法给原变量重新赋值，也无法改变它的值。</div><div>而对象作为参数，如果在方法中把对象作为参数，方法调用时，参数传递的是对象的引用，即在方法调用时，实际参数把对对象的引用传递给形式参数。这是实际参数与形式参数指向同一个地址，即同一个对象，方法执行时，对形式参数的改变实际上就是对实际参数的改变，这个结果在调用结束后被保留了下来。<br /><br /><div>形参和实参有以下显著的区别:</div><div>&nbsp; &nbsp; 1、形参不能离开方法。形参只有在方法内才会发生作用，也只有在方法中使用，不会在方法外可见。而实参可以再程序的任何地方都使用。</div><div>&nbsp; &nbsp; 2、形参代表一个合集，具有不确定性，而形参代表一个独立事物，具有确定性（即使是为null）。也就是说，形参不能代表具体的对象，只能代表这些对象共同的属性（比如超类、各种其他自定义属性等等），而实参则是具体的对象（比如超类的实例）。</div><div>&nbsp; &nbsp; 3、形参的值在调用时根据调用者更改，实参则用自身的值更改形参的值（指针、引用皆在此列）</div></div><div id="content" mod-cs-content="" text-content=""  clearfix"="" style="zoom: 1; width: 722px; overflow: hidden; font-size: 12px; line-height: 24px; margin: 7px 0px 10px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #fcf8e9;"></div><img src ="http://www.blogjava.net/wshao/aggbug/411537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2014-03-26 22:29 <a href="http://www.blogjava.net/wshao/archive/2014/03/26/411537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Spring mvc  利用java的反射技术，来扫描对应包下的注解请求url  统一保存在数据库中</title><link>http://www.blogjava.net/wshao/archive/2014/03/25/411455.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 25 Mar 2014 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2014/03/25/411455.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/411455.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2014/03/25/411455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/411455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/411455.html</trackback:ping><description><![CDATA[<div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">仅对 &nbsp;<wbr>@requestMapping("/xxxx/其他参数") &nbsp;<wbr>的格式</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>package cc.wshao.springmvc.util;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import java.io.File;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import java.lang.reflect.Method;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import java.net.URL;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import org.springframework.context.ApplicationContext;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import org.springframework.context.support.ClassPathXmlApplicationC<wbr>ontext;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import org.springframework.stereotype.Controller;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import org.springframework.web.bind.annotation.RequestMapping;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">import cc.wshao.springmvc.service.RightService;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">public class RegRightUtils {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">private static final String rootUrl = "/spring";</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">private static RightService rightService;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">public static void main(String[] args) throws Exception {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">ApplicationContext context = new ClassPathXmlApplicationC<wbr>ontext("beans.xml");</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;rightService = context.getBean(RightService.class);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">ClassLoader classLoader = RegRightUtils.class.getClassLoader();</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">URL url = classLoader.getResource("com/er07/book/springmvc/controller");</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">String rootPath = url.getPath().toString();</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">File rootFile = new File(rootPath);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">File [] files = rootFile.listFiles();</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">for(File f: files) {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">System.err.println(f.getName());</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">String className = f.getName().substring(0, f.getName().indexOf(".class"));</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">Class clazz = Class.forName("com.er07.book.springmvc.controller."+className);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">parseClass(clazz); &nbsp;<wbr>//解析 &nbsp;<wbr>出url</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">public &nbsp;<wbr>static void parseClass(Class clazz) {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">if(clazz.isAnnotationPresent(Controller.class)) { &nbsp;<wbr>&nbsp;//是否为一个controller ?&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">String classUrl ="";</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>if(clazz.isAnnotationPresent(RequestMapping.class)) {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>RequestMapping requestMapping_clazz = (RequestMapping) clazz.getAnnotation(RequestMapping.class);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;classUrl = requestMapping_clazz.value()[0];</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;if(classUrl.equals("/")) { &nbsp;<wbr>//如果是"/" 的话 &nbsp;<wbr>制空 &nbsp;<wbr>&nbsp;&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;classUrl ="";</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>Method [] ms = clazz.getDeclaredMethods();</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>for(Method m :ms) {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>if(m.isAnnotationPresent(RequestMapping.class)) {</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>RequestMapping requestMapping_method = m.getAnnotation(RequestMapping.class);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>String methodUrl = requestMapping_method.value()[0];</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr>int &nbsp;<wbr>index = methodUrl.indexOf("/");</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr>index = methodUrl.indexOf("/",index+1);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr>if(index!=-1) { &nbsp;<wbr>//如果存在 则进行截取前面的url&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;methodUrl = methodUrl.substring(0, index);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>&nbsp;&nbsp;<wbr>}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>String resultUrl = rootUrl+classUrl+methodUrl;</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>rightService.appendRightByUrl(resultUrl);</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">&nbsp;<wbr>}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">}</div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;">//实现方法：&nbsp;<wbr></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"></div><div style="color: #464646; font-family: simsun; background-color: #bcd3e5;"><div>public void appendRightByUrl(String url) {</div><div>//查询 此url 在数据库中是否存在 &nbsp;<wbr>此权限</div><div>String hql = "from Right where rightUrl =?";</div><div>Right r = (Right) this.rightDao.uniqueResult(hql, url);</div><div>if(r==null) { //不存在 , 插入数据库中</div><div>Right newRight = new Right();</div><div>newRight.setRightUrl(url);</div><div>this.saveOrUpdateRight(newRight);</div><div>}</div><div>}</div></div><img src ="http://www.blogjava.net/wshao/aggbug/411455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2014-03-25 14:54 <a href="http://www.blogjava.net/wshao/archive/2014/03/25/411455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用jQuery解析JSON数据</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408291.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408291.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408291.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408291.html</trackback:ping><description><![CDATA[<div class="clear"></div>
<div class="postBody">
<div id="cnblogs_post_body">
<p>在本篇中，我们将使用jQuery进行数据解析。JSON数据如下，是一个嵌套JSON：</p>
<div class="cnblogs_code"><pre><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">comments</span><span style="color: #000000">"</span><span style="color: #000000">:[{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">很不错嘛</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">纳尼</span><span style="color: #000000">"</span><span style="color: #000000">},{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">哟西哟西</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">小强</span><span style="color: #000000">"</span><span style="color: #000000">}]}</span></pre></div>
<p>获取JSON数据，在jQuery中有一个简单的方法 $.getJSON() 可以实现。</p>
<p>下面引用的是官方API对$.getJSON()的说明：</p>
<h4 class="name">jQuery.getJSON( url, [data,] [success(data, textStatus, jqXHR)] )</h4>
<p class="arguement"><strong>url</strong>A string containing the URL to which the request is sent.</p>
<p class="arguement"><strong>data</strong>A map or string that is sent to the server with the request.</p>
<p class="arguement"><strong>success(data, textStatus, jqXHR)</strong>A callback function that is executed if the request succeeds.</p>
<p class="arguement">回调函数中接受三个参数，第一个书返回的数据，第二个是状态，第三个是jQuery的XMLHttpRequest，我们只使用到第一个参数。</p>
<p>$.each()是用来在回调函数中解析JSON数据的方法，下面是官方文档：</p>
<h4 class="name">jQuery.each( collection, callback(indexInArray, valueOfElement) )</h4>
<p class="arguement"><strong>collection</strong>The object or array to iterate over.</p>
<p class="arguement"><strong>callback(indexInArray, valueOfElement)</strong>The function that will be executed on every object.</p>
<p>$.each()方法接受两个参数，第一个是需要遍历的对象集合（JSON对象集合），第二个是用来遍历的方法，这个方法又接受两个参数，第一个是遍历的index，第二个是当前遍历的值。哈哈，有了$.each()方法JSON的解析就迎刃而解咯。(*^__^*) 嘻嘻&#8230;&#8230;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span>function</span><span> loadInfo() {<br />    $.getJSON(</span><span>"</span><span>loadInfo</span><span>"</span><span>, </span><span>function</span><span>(data) {<br />        $(</span><span>"</span><span>#info</span><span>"</span><span>).html(</span><span>""</span><span>);</span><span>//</span><span>清空info内容</span><span><br /></span><span>        $.each(data.comments, </span><span>function</span><span>(i, item) {<br />            $(</span><span>"</span><span>#info</span><span>"</span><span>).append(<br />                    </span><span>"</span><span>&lt;div&gt;</span><span>"</span><span> </span><span>+</span><span> item.id </span><span>+</span><span> </span><span>"</span><span>&lt;/div&gt;</span><span>"</span><span> </span><span>+</span><span> <br />                    </span><span>"</span><span>&lt;div&gt;</span><span>"</span><span> </span><span>+</span><span> item.nickname    </span><span>+</span><span> </span><span>"</span><span>&lt;/div&gt;</span><span>"</span><span> </span><span>+</span><span><br />                    </span><span>"</span><span>&lt;div&gt;</span><span>"</span><span> </span><span>+</span><span> item.content </span><span>+</span><span> </span><span>"</span><span>&lt;/div&gt;&lt;hr/&gt;</span><span>"</span><span>);<br />        });<br />        });<br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>正如上面，loadinfo是请求的地址，function(data){...}就是在请求成功后的回调函数，data封装了返回的JSON对象，在下面的$.each(data.comments,function(i,item){...})方法中data.comments直接到达 JSON数据内包含的JSON数组：</p>
<div class="cnblogs_code"><pre><span style="color: #000000">[{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">很不错嘛</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">纳尼</span><span style="color: #000000">"</span><span style="color: #000000">},{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">哟西哟西</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">小强</span><span style="color: #000000">"</span><span style="color: #000000">}]</span></pre></div>
<p>$.each()方法中的function就是对这个数组进行遍历，再通过操作DOM插入到合适的地方的。在遍历的过程中，我们可以很方便的访问当前遍历index(代码中的&#8221;i&#8220;)和当前遍历的值(代码中的&#8221;item&#8220;)。</p>
<p>上例的运行结果如下：</p>
<p><img alt="" src="http://pic002.cnblogs.com/images/2011/315806/2011071815063112.jpg" /></p>
<p>如果返回的JSON数据比较复杂，则只需多些$.each()进行遍历即可，嘿嘿。例如如下JSON数据：</p>
<div class="cnblogs_code"><pre><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">comments</span><span style="color: #000000">"</span><span style="color: #000000">:[{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">很不错嘛</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">纳尼</span><span style="color: #000000">"</span><span style="color: #000000">},{</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">哟西哟西</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">nickname</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">小强</span><span style="color: #000000">"</span><span style="color: #000000">}],</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">你是木头人，哈哈。</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">infomap</span><span style="color: #000000">"</span><span style="color: #000000">:{</span><span style="color: #000000">"</span><span style="color: #000000">性别</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">男</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">职业</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">程序员</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">博客</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">http:\/\/www.cnblogs.com\/codeplus\/</span><span style="color: #000000">"</span><span style="color: #000000">},</span><span style="color: #000000">"</span><span style="color: #000000">title</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">123木头人</span><span style="color: #000000">"</span><span style="color: #000000">}</span></pre></div>
<p>js如下：</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #0000ff">function</span><span style="color: #000000"> loadInfo() {<br />    $.getJSON(</span><span style="color: #000000">"</span><span style="color: #000000">loadInfo</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">function</span><span style="color: #000000">(data) {<br />        $(</span><span style="color: #000000">"</span><span style="color: #000000">#title</span><span style="color: #000000">"</span><span style="color: #000000">).append(data.title</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&lt;hr/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        $(</span><span style="color: #000000">"</span><span style="color: #000000">#content</span><span style="color: #000000">"</span><span style="color: #000000">).append(data.content</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&lt;hr/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        </span><span style="color: #008000">//</span><span style="color: #008000">jquery解析map数据</span><span style="color: #008000"><br /></span><span style="color: #000000">        $.each(data.infomap,</span><span style="color: #0000ff">function</span><span style="color: #000000">(key,value){<br />            $(</span><span style="color: #000000">"</span><span style="color: #000000">#mapinfo</span><span style="color: #000000">"</span><span style="color: #000000">).append(key</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">----</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">value</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;hr/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        });<br />        </span><span style="color: #008000">//</span><span style="color: #008000">解析数组</span><span style="color: #008000"><br /></span><span style="color: #000000">        $.each(data.comments, </span><span style="color: #0000ff">function</span><span style="color: #000000">(i, item) {<br />            $(</span><span style="color: #000000">"</span><span style="color: #000000">#info</span><span style="color: #000000">"</span><span style="color: #000000">).append(<br />                    </span><span style="color: #000000">"</span><span style="color: #000000">&lt;div&gt;</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> item.id </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">&lt;/div&gt;</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> <br />                    </span><span style="color: #000000">"</span><span style="color: #000000">&lt;div&gt;</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> item.nickname    </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">&lt;/div&gt;</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />                    </span><span style="color: #000000">"</span><span style="color: #000000">&lt;div&gt;</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> item.content </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">&lt;/div&gt;&lt;hr/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />        });<br />        });<br />}</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>值得注意的是，$.each()遍历Map的时候，function()中的参数是key和value，十分方便。</p>
<p>上例的运行效果：</p>
<p><img alt="" src="http://pic002.cnblogs.com/images/2011/315806/2011071815051458.jpg" /></p>
<p>jQuery很强大，so...更多的了解还得参考文档，(ˇˍˇ） 想～</p></div></div><img src ="http://www.blogjava.net/wshao/aggbug/408291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:29 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring的JNDI数据源连接池配置示例及Spring对JNDI实现分析</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408290.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408290.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408290.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408290.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 个人学习参考所用，勿喷！&nbsp;在使用 Tomcat服务器 + SpringFramework 进行JavaEE项目的开发部署的时候可以在Tomcat的配置文件中进行JDBC数据源的配置，具体步骤如下（这里省略了工程的建立步骤）：&nbsp;1）&nbsp;添加如下代码到tomcat的conf目录下的server.xml中：Xml代码 &nbsp;&lt;Con...&nbsp;&nbsp;<a href='http://www.blogjava.net/wshao/archive/2013/12/31/408290.html'>阅读全文</a><img src ="http://www.blogjava.net/wshao/aggbug/408290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:28 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重复提交、重复刷新、防止后退的问题以及处理方式</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408287.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408287.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408287.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408287.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408287.html</trackback:ping><description><![CDATA[<p><span id="ArticleContent1_ArticleContent1_lblContent">重复提交、重复刷新、防止后退的问题以及处理方式</span></p>
<p>一。前言<br />你在任何一个比较专业的BBS都会看到这样的问题，即使你Google一下，也会发现有很多的人在关注和询问，但大家给出的解决方法却都是千差万别，（有的人主张采用脚本来解决;有的则想重定向到别的页面;有的则将此问题提升到Token的角度）为什么会有如此大的差异呢？</p>
<p>二。问题场景<br />首先，我们应该先了解为什么要处理这样的问题？或者专业一点就是它适合的场景是什么？（似乎只有人来问没有人来解释）</p>
<p>1。重复提交、重复刷新的场景<br />重复提交、重复刷新都是来解决系统重复记录的问题。也就是说某个人在多次的提交某条记录（为什么？也许是闲了没有事情干的;最有可能是用户根本就不知道自己的提交结果是否已经执行了？！）。</p>
<p>但出现了这样的问题并不见得就必须处理，要看你所开发的系统的类别而定。比如你接手的是某个资源管理系统，系统本身从需求的角度根本就不允许出现" 重复"的记录，在这样需求的约束条件下，去执行重复的提交动作只会引发&#8220;业务级异常&#8221;的产生，根本就不可能执行成功也就无所谓避免不避免的问题了。</p>
<p>&nbsp;</p>
<p>2。防止后退的场景<br />了解了重复刷新、重复提交的场景，我们来了解一下"防止后退"操作的原因是什么？比如你在开发某个投票系统，它有很多的步骤，并且这些步骤之间是有联系的，比如第一步会将某些信息发送给第二步，第二步缓存了这些信息，同时将自身的信息发送给了第三步。。。。。等等，如果此时用户处在第三步骤下，我们想象一下某个淘气用户的用户点击了后退按钮，此时屏幕出现了第二步骤的页面，他再次的修改或者再次的提交，进入到下一个步骤（也就是第三步骤），错误就会在此产生？！什么错误呢？最为典型的就是这样的操作直接导致了对于第一个步骤信息的丢失！（如果这样的信息是依靠Request存放的话，当然你可以存放在 Session或者更大的上下文环境中，但这不是个好主意！关于信息存放的问题，下次在就这个问题详细的讨论）</p>
<p><br />三。如何处理的问题<br />当然很多的系统（比如订票系统从需求上本身是允许个人重复订票的）是必须要避免重复刷新、重复提交、以及防止后退的问题的，但即使是这样的问题，也要区分如何处理以及在哪里处理的（网上只是告诉你如何处理，但很少去区分在哪里处理的），显然处理的方式无非是客户端或者服务器端两种，而面对不同的位置处理的方式也是不同的，但有一点要事先声明：任何客户端（尤其是B/S端）的处理都是不可信任的，最好的也是最应该的是服务器端的处理方法。</p>
<p>客户端处理：<br />面对客户端我们可以使用Javascript脚本来解决，如下</p>
<p>1。重复刷新、重复提交<br />Ways One：设置一个变量，只允许提交一次。<br />&lt;script language="javascript"&gt; <br />&nbsp;&nbsp;&nbsp; var checkSubmitFlg = false; <br />&nbsp;&nbsp;&nbsp; function checkSubmit() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (checkSubmitFlg == true) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checkSubmitFlg = true; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />&nbsp;&nbsp; } <br />&nbsp;&nbsp; document.ondblclick = function docondblclick() { <br />&nbsp;&nbsp;&nbsp; window.event.returnValue = false; <br />&nbsp;&nbsp; } <br />&nbsp;&nbsp; document.onclick = function doconclick() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (checkSubmitFlg) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.event.returnValue = false; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp; } <br />&lt;/script&gt; <br />&lt;html:form action="myAction.do" method="post" onsubmit="return checkSubmit();"&gt;</p>
<p>Way Two : 将提交按钮或者image置为disable<br />&nbsp; &lt;html:form action="myAction.do" method="post"&nbsp; <br />&nbsp;&nbsp;&nbsp; onsubmit="getElById('submitInput').disabled = true; return true;"&gt;&nbsp;&nbsp; <br />&nbsp; &lt;html:image styleId="submitInput" src="images/ok_b.gif" border="0" /&gt; <br />&nbsp; &lt;/html:form&gt;&nbsp; </p>
<p>2。防止用户后退<br />这里的方法是千姿百态，有的是更改浏览器的历史纪录的，比如使用window.history.forward()方法;有的是&#8220;用新页面的URL替换当前的历史纪录，这样浏览历史记录中就只有一个页面，后退按钮永远不会变为可用。&#8221;比如使用 javascript:location.replace(this.href); event.returnValue=false; </p>
<p><br />2.服务器端的处理（这里只说Struts框架的处理）<br />利用同步令牌（Token）机制来解决Web应用中重复提交的问题，Struts也给出了一个参考实现。</p>
<p>基本原理：<br />服务器端在处理到达的请求之前，会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较，<br />看是否匹配。在处理完该请求后，且在答复发送给客户端之前，将会产生一个新的令牌，该令牌除传给<br />客户端以外，也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次<br />提交的话，客户端传过来的令牌就和服务器端的令牌不一致，从而有效地防止了重复提交的发生。</p>
<p>if (isTokenValid(request, true)) { <br />&nbsp;&nbsp;&nbsp; // your code here <br />&nbsp;&nbsp;&nbsp; return mapping.findForward("success"); <br />} else { <br />&nbsp;&nbsp;&nbsp; saveToken(request); <br />&nbsp;&nbsp;&nbsp; return mapping.findForward("submitagain"); <br />} </p>
<p>Struts根据用户会话ID和当前系统时间来生成一个唯一（对于每个会话）令牌的，具体实现可以参考<br />TokenProcessor类中的generateToken()方法。</p>
<p>1. //验证事务控制令牌,&lt;html:form &gt;会自动根据session中标识生成一个隐含input代表令牌，防止两次提交<br />2. 在action中：</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&lt;input type="hidden" name="org.apache.struts.taglib.html.TOKEN"&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; value="6aa35341f25184fd996c4c918255c3ae"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!isTokenValid(request)) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errors.add(ActionErrors.GLOBAL_ERROR, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new ActionError("error.transaction.token")); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resetToken(request); //删除session中的令牌 </p>
<p>3. action有这样的一个方法生成令牌<br />&nbsp;&nbsp; protected String generateToken(HttpServletRequest request) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession session = request.getSession(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte id[] = session.getId().getBytes(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte now[] = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Long(System.currentTimeMillis()).toString().getBytes(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageDigest md = MessageDigest.getInstance("MD5"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md.update(id); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md.update(now); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (toHex(md.digest())); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IllegalStateException e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (null); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (NoSuchAlgorithmException e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (null); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp; }&nbsp; </p>
<p>总结<br />对于重复提交、重复刷新、防止后退等等都是属于系统为避免重复记录而需要解决的问题，在客户端去处理需要针对每一种的可能提出相应的解决方案，然而在服务器端看来只不过是对于数据真实性的检验问题，基于令牌的处理就是一劳永逸的方法。</p>
<p>同时我们也看到，从不同的角度去看待问题，其解决的方法也是不同的。客户端更追求的是用户的操作，而服务端则将注意力放在了数据的处理上，所以在某个对于服务器端看似容易的问题上，用客户端来解决却麻烦了很多！反之依然。所以在某些问题的处理上我们需要综合考虑和平衡，是用客户端来解决？还是用服务器端来处理？<br /><br />[转载出处] <a id="ArticleContent1_ArticleContent1_AuthorBlogLink" href="http://blog.csdn.net/Killvin/" target="_blank">http://blog.csdn.net/Killvin/</a></p><img src ="http://www.blogjava.net/wshao/aggbug/408287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:25 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 增，删，查，改 cookies</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408286.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408286.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408286.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408286.html</trackback:ping><description><![CDATA[&lt;script&gt;<br /><br />//写cookies函数 作者：翟振凯<br />function SetCookie(name,value)//两个参数，一个是cookie的名子，一个是值<br />{<br />&nbsp;&nbsp;&nbsp; var Days = 30; //此 cookie 将被保存 30 天<br />&nbsp;&nbsp;&nbsp; var exp&nbsp; = new Date();&nbsp;&nbsp;&nbsp; //new Date("December 31, 9998");<br />&nbsp;&nbsp;&nbsp; exp.setTime(exp.getTime() + Days*24*60*60*1000);<br />&nbsp;&nbsp;&nbsp; document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();<br />}<br />function getCookie(name)//取cookies函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />{<br />&nbsp;&nbsp;&nbsp; var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));<br />&nbsp;&nbsp;&nbsp;&nbsp; if(arr != null) return unescape(arr[2]); return null;<br /><br />}<br />function delCookie(name)//删除cookie<br />{<br />&nbsp;&nbsp;&nbsp; var exp = new Date();<br />&nbsp;&nbsp;&nbsp; exp.setTime(exp.getTime() - 1);<br />&nbsp;&nbsp;&nbsp; var cval=getCookie(name);<br />&nbsp;&nbsp;&nbsp; if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();<br />}<br /><br /><br /><br />SetCookie ("xiaoqi", "3")<br />alert(getCookie('xiaoqi'));<br />&lt;/script&gt;<br /><br />一个非常实用的javascript读写Cookie函数<br /><br />一个非常实用的javascript读写Cookie函数&nbsp; <br />function&nbsp; GetCookieVal(offset)<br />//获得Cookie解码后的值<br />{<br />var&nbsp; endstr&nbsp; =&nbsp; documents.cookie.indexOf&nbsp; (";",&nbsp; offset);<br />if&nbsp; (endstr&nbsp; ==&nbsp; -1)<br />endstr&nbsp; =&nbsp; documents.cookie.length;<br />return&nbsp; unescape(documents.cookie.substring(offset,&nbsp; endstr));<br />}<br />function&nbsp; SetCookie(name,&nbsp; value)<br />//设定Cookie值<br />{<br />var&nbsp; expdate&nbsp; =&nbsp; new&nbsp; Date();<br />var&nbsp; argv&nbsp; =&nbsp; SetCookie.arguments;<br />var&nbsp; argc&nbsp; =&nbsp; SetCookie.arguments.length;<br />var&nbsp; expires&nbsp; =&nbsp; (argc&nbsp; &gt;&nbsp; 2)&nbsp; ?&nbsp; argv[2]&nbsp; :&nbsp; null;<br />var&nbsp; path&nbsp; =&nbsp; (argc&nbsp; &gt;&nbsp; 3)&nbsp; ?&nbsp; argv[3]&nbsp; :&nbsp; null;<br />var&nbsp; domain&nbsp; =&nbsp; (argc&nbsp; &gt;&nbsp; 4)&nbsp; ?&nbsp; argv[4]&nbsp; :&nbsp; null;<br />var&nbsp; secure&nbsp; =&nbsp; (argc&nbsp; &gt;&nbsp; 5)&nbsp; ?&nbsp; argv[5]&nbsp; :&nbsp; false;<br />if(expires!=null)&nbsp; expdate.setTime(expdate.getTime()&nbsp; +&nbsp; (&nbsp; expires&nbsp; *&nbsp; 1000&nbsp; ));<br />documents.cookie&nbsp; =&nbsp; name&nbsp; +&nbsp; "="&nbsp; +&nbsp; escape&nbsp; (value)&nbsp; +((expires&nbsp; ==&nbsp; null)&nbsp; ?&nbsp; ""&nbsp; :&nbsp; (";&nbsp; expires="+&nbsp; expdate.toGMTString()))<br />+((path&nbsp; ==&nbsp; null)&nbsp; ?&nbsp; ""&nbsp; :&nbsp; (";&nbsp; path="&nbsp; +&nbsp; path))&nbsp; +((domain&nbsp; ==&nbsp; null)&nbsp; ?&nbsp; ""&nbsp; :&nbsp; (";&nbsp; domain="&nbsp; +&nbsp; domain))<br />+((secure&nbsp; ==&nbsp; true)&nbsp; ?&nbsp; ";&nbsp; secure"&nbsp; :&nbsp; "");<br />}<br />function&nbsp; DelCookie(name)<br />//删除Cookie<br />{<br />var&nbsp; exp&nbsp; =&nbsp; new&nbsp; Date();<br />exp.setTime&nbsp; (exp.getTime()&nbsp; -&nbsp; 1);<br />var&nbsp; cval&nbsp; =&nbsp; GetCookie&nbsp; (name);<br />documents.cookie&nbsp; =&nbsp; name&nbsp; +&nbsp; "="&nbsp; +&nbsp; cval&nbsp; +&nbsp; ";&nbsp; expires="+&nbsp; exp.toGMTString();<br />}<br />function&nbsp; GetCookie(name)<br />//获得Cookie的原始值<br />{<br />var&nbsp; arg&nbsp; =&nbsp; name&nbsp; +&nbsp; "=";<br />var&nbsp; alen&nbsp; =&nbsp; arg.length;<br />var&nbsp; clen&nbsp; =&nbsp; documents.cookie.length;<br />var&nbsp; i&nbsp; =&nbsp; 0;<br />while&nbsp; (i&nbsp; &lt;&nbsp; clen)<br />{<br />var&nbsp; j&nbsp; =&nbsp; i&nbsp; +&nbsp; alen;<br />if&nbsp; (documents.cookie.substring(i,&nbsp; j)&nbsp; ==&nbsp; arg)<br />return&nbsp; GetCookieVal&nbsp; (j);<br />i&nbsp; =&nbsp; documents.cookie.indexOf("&nbsp; ",&nbsp; i)&nbsp; +&nbsp; 1;<br />if&nbsp; (i&nbsp; ==&nbsp; 0)&nbsp; break;<br />}<br />return&nbsp; null;<br />}<br /><br /><br />&lt;SCRIPT&nbsp; language="javascript"&gt;<br />&lt;!--<br />function&nbsp; openpopup(){<br />url="popup.htm"<br />window.open("gonggao.htm","gonggao","width=260,height=212,left=200,top=0")<br />}<br /><br />function&nbsp; get_cookie(Name)&nbsp; {<br />var&nbsp; search&nbsp; =&nbsp; Name&nbsp; +&nbsp; "="<br />var&nbsp; returnvalue&nbsp; =&nbsp; "";<br />if&nbsp; (documents.cookie.length&nbsp; &gt;&nbsp; 0)&nbsp; {<br />offset&nbsp; =&nbsp; documents.cookie.indexOf(search)<br />if&nbsp; (offset&nbsp; !=&nbsp; -1)&nbsp; {<br />offset&nbsp; +=&nbsp; search.length<br />end&nbsp; =&nbsp; documents.cookie.indexOf(";",&nbsp; offset);<br />if&nbsp; (end&nbsp; ==&nbsp; -1)<br />end&nbsp; =&nbsp; documents.cookie.length;<br />returnvalue=unescape(documents.cookie.substring(offset,&nbsp; end))<br />}<br />}<br />return&nbsp; returnvalue;<br />}<br /><br />function&nbsp; helpor_net(){<br />if&nbsp; (get_cookie('popped')==''){<br />openpopup()<br />documents.cookie="popped=yes"<br />}<br />}<br />helpor_net()<br />//--&gt;<br />&lt;/SCRIPT&gt;<br /><br /><br />如果点了确定，只要不清cookie，以后访问都不会再提示，如果不点确定则每次都会提示。放在js文件里，全站包含<br /><br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />var the_cookie = document.cookie;<br />var broken_cookie = the_cookie.split(":");<br />var the_visiteraccepted = unescape(broken_cookie[1]);<br />//<br />if (the_visiteraccepted=="undefined"){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tmp=confirm('中国人何时何地。');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tmp==false){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var the_visiteraccepted = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var the_cookie = "ILoveChina=visiteraccepted:" + escape(the_visiteraccepted);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.cookie = the_cookie;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}<br />//--&gt;<br />&lt;/SCRIPT&gt;<br /><br /><br />1. Cookie的兼容性问题<br /><br />Cookie的格式有2个不同的版本，第一个版本，我们称为Cookie Version 0，是最初由Netscape公司制定的，也被几乎所有的浏览器支持。而较新的版本，Cookie Version 1，则是根据RFC 2109文档制定的。为了确保兼容性，JAVA规定，前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。<br /><br />2. Cookie的内容<br /><br />同样的 Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中，某些特殊的字符，例如：空格，方括号，圆括号，等于号（=），逗号，双引号，斜杠，问号，@符号，冒号，分号都不能作为Cookie的内容。这也就是为什么我们在例子中设定Cookie的内容为"Test_Content"的原因。<br /><br />虽然在Cookie Version 1规定中放宽了限制，可以使用这些字符，但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持，因而为保险起见，我们应该在Cookie的内容中尽量避免使用这些字符<img src ="http://www.blogjava.net/wshao/aggbug/408286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:23 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java的打包jar,war,ear包的作用，区别，打包方式（本文打jar）</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408284.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408284.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408284.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408284.html</trackback:ping><description><![CDATA[<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"><span>一、</span>java<span style="font-family: 宋体">的打包</span>jar,war,ear<span style="font-family: 宋体">包的作用，区别，打包方式</span>.</p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt"><span>a)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">作用与区别</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>jar: <span style="font-family: 宋体">通常是开发时要引用通用</span>(JAVA)<span style="font-family: 宋体">类，打成包便于存放管理</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>war: <span style="font-family: 宋体">是做好一个</span>(web)<span style="font-family: 宋体">应用后，通常是网站，打成包部署到容器中</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ear: <span style="font-family: 宋体">企业级应用，实际上</span>EAR<span style="font-family: 宋体">包中包含</span>WAR<span style="font-family: 宋体">包和几个企业级项目的配置文件而已，一般服务器选择</span>WebSphere<span style="font-family: 宋体">等，都会使用</span>EAR<span style="font-family: 宋体">包。通常是</span>EJB<span style="font-family: 宋体">打成</span>ear<span style="font-family: 宋体">包。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt"><span>b)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">打包方式</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">所有的包都是用</span>jar<span style="font-family: 宋体">打的，只不过目标文件的扩展名不一样</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">也可以用</span>Ant<span style="font-family: 宋体">来安成构建</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt"><span>c)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'simsun','serif'">JET</span><span style="font-family: 宋体">编译成</span><span style="font-family: 'simsun','serif'">EXE</span></p>
<p style="text-indent: -63pt; margin: 0cm 0cm 0pt 63pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>JET<span>&nbsp;&nbsp; </span><span style="font-family: 宋体">是要用钱买的，而且据说</span><span>&nbsp;&nbsp; JET&nbsp;&nbsp; </span><span style="font-family: 宋体">也不是能把所有的</span><span>&nbsp;&nbsp; Java&nbsp;&nbsp; </span><span style="font-family: 宋体">程序都编译成执行文件，性能也要打些折扣。所以，使用制作可执行</span><span>&nbsp;&nbsp; JAR&nbsp;&nbsp; </span><span style="font-family: 宋体">文件包的方法就是最佳选择了，何况它还能保持</span><span>&nbsp;&nbsp; Java&nbsp;&nbsp; </span><span style="font-family: 宋体">的跨平台特性。</span></p><br /><br />二、实例<br /><br />方法一：我现在有test/A.java<br />&nbsp;&nbsp;&nbsp;&nbsp;道理虽然简单，但是在这过程中还是有很多细节需要注意的，哪一个细节注意不到，操作都不会成功。<br />
<div align="center">
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px">
<div align="left"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;test;<br /></span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">static</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[]){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">test&nbsp;java</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div></div>&nbsp;&nbsp;&nbsp;&nbsp;写好后，保存为A.java，存在D:\Java\jdk1.6\test_jar\test\目录下面，打开cmd，进入这个目录，即D:\Java \jdk1.6\test_jar\test\然后用javac命令编译，会生成一个A.class文件，此时类的编写工作已经完成。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;2，在D:\Java\jdk1.6\test_jar目录下新建一个文件夹META-INF，再新建mainclass.mf文件，在其中写入下面一行信息<br />&nbsp;&nbsp;&nbsp;&nbsp;Main-Class: com/hp/HelloWorld<br />&nbsp;&nbsp;&nbsp;&nbsp;这一句有两个注意的地方，首先行尾要有回车换行；其次&#8220;:&#8221;和&#8220;com&#8221;之间要有一个空格。<br />&nbsp;&nbsp;&nbsp;&nbsp;这一行信息的作用是标明主类。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;3，最后就是生成jar包并测试了，在cmd中进入D:\Java\jdk1.6\test_jar目录，输入下列命令&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;jar cvfm test.jar META-INF/mainclass.mf test/A.class(<strong>这是指定文件，当然也可以test指向文件夹)<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;上述命令执行成功的话，会提示&#8220;标明清单（manifest）...&#8221;，<br />&nbsp;&nbsp;&nbsp;&nbsp;然后再在当前目录下输入java -jar test.jar 命令，可以看到&#8220;test java&#8221;。&nbsp;<br />&nbsp;<br /><br /><br />方法二：<br />&nbsp;&nbsp;&nbsp;&nbsp;用简单的jar -cvf test.jar&nbsp;&nbsp;&nbsp;&nbsp;test目录,jar会自动生成META-INF/mainclass.mf，我们只需要在里面去加一句&nbsp;Main-Class: com/hp/HelloWorld<br />就可以了<br /><br /><br /><br />方法三：myeclipse工具　（<strong>推荐</strong>）<br />&nbsp;&nbsp;&nbsp;&nbsp;右击项目--Export--Jar File-要选择Main-Class<br /><br />方法四：ant<img src ="http://www.blogjava.net/wshao/aggbug/408284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:22 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java枚举</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408283.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408283.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408283.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408283.html</trackback:ping><description><![CDATA[1.枚举是jdk5.0以后的全新类，跟class,interface,annotation的级别一样；关键字enum。<br /><br />2.第一个实例　<br />&nbsp;&nbsp;&nbsp;&nbsp;public enum Color{ //定义<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Red,White,Blue;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static void&nbsp;main(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color xx = Color.Red;//使用<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />3.enum　提供的常用方法<br />&nbsp;&nbsp;&nbsp;&nbsp;//两个常用的静态方法 values(),valueOf()<br />&nbsp;&nbsp;&nbsp;&nbsp;for(Color c : c.values()){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />4.enum 的<span style="color: red">构造方法</span><br />&nbsp;&nbsp;&nbsp;&nbsp;publc enum Coin{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;penney(1),nickel(3),dime(10),quarter(25);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private int value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Coin(int value){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value=value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String args[]){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Coin c = Coin.quarter;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c.getValue());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}　<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />5.enum的使用场所<br />&nbsp;&nbsp;&nbsp;&nbsp;权限控制、游戏方向、需要固定产生类对象的数量<img src ="http://www.blogjava.net/wshao/aggbug/408283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:21 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中json对象和string对象之间的转化</title><link>http://www.blogjava.net/wshao/archive/2013/12/31/408281.html</link><dc:creator>午后星期午</dc:creator><author>午后星期午</author><pubDate>Tue, 31 Dec 2013 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/wshao/archive/2013/12/31/408281.html</guid><wfw:comment>http://www.blogjava.net/wshao/comments/408281.html</wfw:comment><comments>http://www.blogjava.net/wshao/archive/2013/12/31/408281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshao/comments/commentRss/408281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshao/services/trackbacks/408281.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>json对象<br />var json = {aa:true,bb:true};<br />var json1 = {aa:'b',bb:{cc:true,dd:true}};<br />1：js操作json对象<br />&nbsp;&nbsp; for(var item in json){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(item);&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //结果是 aa,bb, 类型是 string<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(typeof(item));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(ev<wbr>al("json."+item));&nbsp;&nbsp; //结果是true，true类型是boolean<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ev<wbr>al(("json."+item+"=false;"));&nbsp;&nbsp; //改变json对象的值<br />&nbsp;&nbsp; }<br /><br />2：json对象转化为String对象的方法<br /><font color="#008080">1</font> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">*<br /></span><span style="color: #008080">2</span> <span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * json对象转字符串形式<br /></span><span style="color: #008080">3</span> <span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #008080">4</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000"> json2str(o) {<br /></span><span style="color: #008080">5</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000"> arr </span><span style="color: #000000">=</span><span style="color: #000000"> [];<br /></span><span style="color: #008080">6</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000"> fmt </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">function</span><span style="color: #000000">(s) {<br /></span><span style="color: #008080">7</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #0000ff">typeof</span><span style="color: #000000"> s </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #000000">'</span><span style="color: #000000">object</span><span style="color: #000000">'</span><span style="color: #000000"> </span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"> s </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">) </span><span style="color: #0000ff">return</span><span style="color: #000000"> json2str(s);<br /></span><span style="color: #008080">8</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">/</span><span style="color: #000000">^(string|number)$</span><span style="color: #000000">/</span><span style="color: #000000">.test(</span><span style="color: #0000ff">typeof</span><span style="color: #000000"> s) </span><span style="color: #000000">?</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> s </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000"> : s;<br /></span><span style="color: #008080">9</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /></span><span style="color: #008080">10</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">var</span><span style="color: #000000"> i </span><span style="color: #0000ff">in</span><span style="color: #000000"> o) arr.push(</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> i </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">':</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> fmt(o[i]));<br /></span><span style="color: #008080">11</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">'</span><span style="color: #000000">{</span><span style="color: #000000">'</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> arr.join(</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">) </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">'</span><span style="color: #000000">}</span><span style="color: #000000">'</span><span style="color: #000000">;<br /></span><span style="color: #008080">12</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br />3:string对象转化为json对象<br />function stringToJson(stringValue)<br />{<br />&nbsp;&nbsp; ev<wbr>al("var theJsonValue = "+stringValue);<br />&nbsp;&nbsp; return theJsonValue;<br />}<br /><br />4:json数组转化为 String对象的方法（要掉要上面那个方法）<br />function JsonArrayToStringCfz(jsonArray)<br /><br />&nbsp;&nbsp; var JsonArrayString = "[";<br />&nbsp;&nbsp; for(var i=0;i&lt;jsonArray.length;i++){<br />&nbsp;&nbsp; JsonArrayString=JsonArrayString+JsonToStringCfz(jsonArray[i])+",";<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; JsonArrayString = JsonArrayString.substring(0,JsonArrayString.length-1)+"]";<br />&nbsp;&nbsp; return JsonArrayString;<br />}<br />5 利用json.js json转string</p>
<p>&lt;script src="json2.js"&gt;&lt;/script&gt;<br />&lt;script&gt;<br />var date = {myArr : ["a" , "b" , "c" , "d"] , count : 4};<br />var str = JSON.stringify(date);<br />alert(str);<br />&lt;/script&gt;</p></div><img src ="http://www.blogjava.net/wshao/aggbug/408281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshao/" target="_blank">午后星期午</a> 2013-12-31 14:20 <a href="http://www.blogjava.net/wshao/archive/2013/12/31/408281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>