﻿<?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/llscp/</link><description>Easy things should be easy, and hard things should be possible.</description><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 17:41:47 GMT</lastBuildDate><pubDate>Tue, 21 Apr 2026 17:41:47 GMT</pubDate><ttl>60</ttl><item><title>java中堆和栈的区别</title><link>http://www.blogjava.net/llscp/archive/2012/03/17/372102.html</link><dc:creator>杲杲</dc:creator><author>杲杲</author><pubDate>Sat, 17 Mar 2012 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/llscp/archive/2012/03/17/372102.html</guid><wfw:comment>http://www.blogjava.net/llscp/comments/372102.html</wfw:comment><comments>http://www.blogjava.net/llscp/archive/2012/03/17/372102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/llscp/comments/commentRss/372102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llscp/services/trackbacks/372102.html</trackback:ping><description><![CDATA[<pre id="best-answer-content" class="reply-text mb10">Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立，它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的，堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，因为它是在运行时 动态分配内存的，Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是，由于要在运行时动态分配内存，存取速度较慢。 

栈的优势是，存取速度比堆要快，仅次于寄存器，栈数据可以共享。但缺点是，存在栈中的数据大小与生存期必须是确定的，缺乏灵活性。栈中主要存放一些基本类 型的变量（,int, short, long, byte, float, double, boolean, char）和对象句柄。 

栈有一个很重要的特殊性，就是存在栈中的数据可以共享。假设我们同时定义： 
int a = 3; 
int b = 3； 
编译器先处理int a = 3；首先它会在栈中创建一个变量为a的引用，然后查找栈中是否有3这个值，如果没找到，就将3存放进来，然后将a指向3。接着处理int b = 3；在创建完b的引用变量后，因为在栈中已经有3这个值，便将b直接指向3。这样，就出现了a与b同时均指向3的情况。 

这时，如果再令a=4；那么编译器会重新搜索栈中是否有4值，如果没有，则将4存放进来，并令a指向4；如果已经有了，则直接将a指向这个地址。因此a值的改变不会影响到b的值。 

要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的，因为这种情况a的修改并不会影响到b, 它是由编译器完成的，它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态，会影响到另一个对象引用变量。 

String是一个特殊的包装类数据。可以用： 
String str = new String("abc"); 
String str = "abc"; 
两种的形式来创建，第一种是用new()来新建对象的，它会在存放于堆中。每调用一次就会创建一个新的对象。 
而第二种是先在栈中创建一个对String类的对象引用变量str，然后查找栈中有没有存放"abc"，如果没有，则将"abc"存放进栈，并令str指向&#8221;abc&#8221;，如果已经有&#8221;abc&#8221; 则直接令str指向&#8220;abc&#8221;。 

比较类里面的数值是否相等时，用equals()方法；当测试两个包装类的引用是否指向同一个对象时，用==，下面用例子说明上面的理论。 
String str1 = "abc"; 
String str2 = "abc"; 
System.out.println(str1==str2); //true 
可以看出str1和str2是指向同一个对象的。 

String str1 =new String ("abc"); 
String str2 =new String ("abc"); 
System.out.println(str1==str2); // false 
用new的方式是生成不同的对象。每一次生成一个。 


因此用第一种方式创建多个&#8221;abc&#8221;字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度，因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc")；的代码，则一概在堆中创建新对象，而不管其字符串值是否相等，是否有必要创建新对象，从而加重了程序的负担。 

另一方面, 要注意: 我们在使用诸如String str = "abc"；的格式定义类时，总是想当然地认为，创建了String类的对象str。担心陷阱！对象可能并没有被创建！而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。 
由于String类的immutable性质，当String变量需要经常变换其值时，应该考虑使用StringBuffer类，以提高程序效率。</pre>
<div class="details float-r">
<div class="value-block  ">
<div class="value-block-inner">
<div style="display: none" class="value-tip">赞同</div>
<div class="value-num value-num-fixed">28</div></div></div><span style="line-height: 26px; vertical-align: baseline" class="v-split">|</span> <span style="line-height: 26px; zoom: 1; vertical-align: baseline" id="comment-link-704946607" class="comment-link">评论</span> </div><img src ="http://www.blogjava.net/llscp/aggbug/372102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llscp/" target="_blank">杲杲</a> 2012-03-17 19:49 <a href="http://www.blogjava.net/llscp/archive/2012/03/17/372102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的BigInteger(</title><link>http://www.blogjava.net/llscp/archive/2012/03/14/371887.html</link><dc:creator>杲杲</dc:creator><author>杲杲</author><pubDate>Wed, 14 Mar 2012 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/llscp/archive/2012/03/14/371887.html</guid><wfw:comment>http://www.blogjava.net/llscp/comments/371887.html</wfw:comment><comments>http://www.blogjava.net/llscp/archive/2012/03/14/371887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/llscp/comments/commentRss/371887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llscp/services/trackbacks/371887.html</trackback:ping><description><![CDATA[<div>JAVA之BigInteger</div>                                         <div>             <p align="left"> </p>             <p align="left">用<a href="http://hi.baidu.com/buptyoyo/blog/item/:;" target="_self"><u><strong>Java</strong></u></a>来处理高精度问题，相信对很多ACMer来说都是一件很happy的事，简单易懂。用Java刷了一些题，感觉Java还不错，在处理高精度和进制转换中，调用库函数的来处理。下面是写的一些Java中一些基本的函数的及其&#8230;&#8230;</p>             <p align="left">头文件：import java.io.*;</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>import java.util.*;</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>import java.math.*;</p>             <p align="left">读入： <wbr>Scanner cin = Scanner (System.in);</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>while(cin.hasNext())//等价于!=EOF</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>n=cin.nextInt();//读入一个int型的数</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>n=cin.nextBigInteger();//读入一个大整数</p>             <p align="left">输出： <wbr>System.out.print(n);//打印n</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println();//换行</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>System.out.printf("%d\n",n);//也可以类似c++里的输出方式</p>             <p align="left">定义： <wbr>int i,j,k,a[];</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>a = new int[100];</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>BigInteger n,m;</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>BigDecimal n;</p>             <p align="left"><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>String s;</p>             <p align="left">数据类型：</p>             <p align="left">数据类型 <wbr><wbr><wbr><wbr>类型名 <wbr><wbr><wbr><wbr>位长 <wbr><wbr><wbr><wbr><wbr><wbr><wbr>取值范围 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>默认值</p>             <p align="left">布尔型 <wbr><wbr><wbr><wbr><wbr><wbr>boolean <wbr><wbr><wbr><wbr><wbr>1 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>true,false <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>false</p>             <p align="left">字节型 <wbr><wbr><wbr><wbr><wbr><wbr>byte <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>8 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>-128-127 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0</p>             <p align="left">字符型 <wbr><wbr><wbr><wbr><wbr><wbr>char <wbr><wbr><wbr><wbr><wbr><wbr><wbr>16 <wbr><wbr><wbr><wbr><wbr>&#8216;\u000&#8217;-\uffff <wbr><wbr><wbr><wbr><wbr>&#8216;\u0000&#8217;</p>             <p align="left">短整型 <wbr><wbr><wbr><wbr><wbr><wbr>short <wbr><wbr><wbr><wbr><wbr><wbr>16 <wbr><wbr><wbr><wbr><wbr><wbr><wbr>-32768-32767 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0</p>             <p align="left">整型 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>int <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>32 <wbr>-2147483648,2147483647 <wbr><wbr><wbr><wbr><wbr>0</p>             <p align="left">长整型 <wbr><wbr><wbr><wbr><wbr><wbr>long <wbr><wbr><wbr><wbr><wbr><wbr><wbr>64 <wbr><wbr><wbr><wbr><wbr>-9.22E18,9.22E18 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0</p>             <p align="left">浮点型 <wbr><wbr><wbr><wbr><wbr><wbr>float <wbr><wbr><wbr><wbr><wbr><wbr>32 <wbr><wbr><wbr><wbr><wbr>1.4E-45-3.4028E+38 <wbr><wbr><wbr><wbr><wbr><wbr>0.0</p>             <p align="left">双精度型 <wbr><wbr><wbr><wbr>double <wbr><wbr><wbr><wbr><wbr>64 <wbr>4.9E-324,1.7977E+308 <wbr><wbr><wbr><wbr><wbr><wbr>0.0</p>             <p align="left">这里特别要提出出的两种类型：</p>             <p align="left">BigInteger 任意大的整数，原则上是，只要你的计算机的内存足够大，可以有无限位的</p>             <p align="left">BigInteger 任意大的实数，可以处理小数精度问题。</p>             <p align="left">BigInteger中一些常见的函数：</p>             <p align="left">A=BigInteger.ONE</p>             <p align="left">B=BigInteger.TEN</p>             <p align="left">C=BigInteger.ZERO</p>             <p align="left">一些常见的数的赋初值。将int型的数赋值给BigInteger，BigInteger.valueOf(k);</p>             <p align="left">基本的函数：</p>             <p align="left">valueOf:赋初值</p>             <p align="left">add:+ <wbr><wbr><wbr><wbr>a.add(b);</p>             <p align="left">subtract:-</p>             <p align="left">multiply:*</p>             <p align="left">divide:/</p>             <p align="left">remainder：this % val</p>             <p align="left">divideAndRemainder：a[0]=this / val; a[1]=this % val</p>             <p align="left">pow：a.pow(b)=a^b</p>             <p align="left">gcd,abs:公约数，绝对值</p>             <p align="left">negate：取负数</p>             <p align="left">signum：符号函数</p>             <p align="left">mod：a.mod(b)=a%b;</p>             <p align="left">shiftLeft:左移，this &lt;&lt; n ，this*2^n;</p>             <p align="left">shiftRight:右移，this &gt;&gt; n，this/2^n;</p>             <p align="left">and:等同于c++的&amp;&amp;,且；</p>             <p align="left">or：||，或;</p>             <p align="left">xor:异或，BigInteger xor(BigInteger val),this^val</p>             <p align="left">not:!,非；</p>             <p align="left">bitLength：返回该数的最小二进制补码表示的位的个数，即 *不包括* 符号位 (ceil(log2(this &lt;0 ? -this : this + 1)))。对正数来说，这等价于普通二进制表示的位的个数。</p>             <p align="left">bitCount：返回该数的二进制补码表示中不包扩符号位在内的位的个数。该方法在 BigIntegers 之上实现位向量风格的集合时很有用。</p>             <p align="left">isProbablePrime：如果该 BigInteger 可能是素数，则返回  true ；如果它很明确是一个合数，则返回 false 。 参数 certainty  是对调用者愿意忍受的不确定性的度量：如果该数是素数的概率超过了 1 - 1/2**certainty方法，则该方法返回 true  。执行时间正比于参数确定性的值。</p>             <p align="left">compareTo：根据该数值是小于、等于、或大于 val 返回 -1、0 或 1；</p>             <p align="left">equals：判断两数是否相等，也可以用compareTo来代替；</p>             <p align="left">min，max：取两个数的较小、大者；</p>             <p align="left">intValue，longValue，floatValue，doublue：把该数转换为该类型的数的值。</p>             <p align="left"><wbr></p>             <p align="left"><wbr></p>             <p align="left"><wbr></p>             <p align="left"><wbr></p>             <p align="left">今天参考课本写了一个关于二进制与十进制转换的程序，程序算法不难，但写完后测试发现不论是二转十还是十转二，对于大于21亿即超过整数范围的数不能很好的转换。都会变成0.<br />             参考书籍发现使用使用BigInteger可以解决这个问题。<br />             于是查找了下JDK,然后测试几次终于写成功了！<br />             使用心得如下：</p>             <p align="left">1，BigInteger属于java.math.BigInteger,因此在每次使用前都要import 这个类。偶开始就忘记import了，于是总提示找不到提示符。</p>             <p align="left">2，其构造方法有很多，但现在偶用到的有： BigInteger(String val)<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>将 BigInteger 的十进制字符串表示形式转换为 BigInteger。<br />             BigInteger(String val, int radix)<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。<br />             如要将int型的2转换为BigInteger型，要写为BigInteger two=new BigInteger("2"); //注意2双引号不能省略</p>             <p align="left">3，BigInteger类模拟了所有的int型数学操作，如add()==&#8220;+&#8221;,divide()==&#8220;-&#8221;等，但注意其内容进行数学运算时不能直接使用数学运算符进行运算，必须使用其内部方法。而且其操作数也必须为BigInteger型。<br />             如：two.add(2)就是一种错误的操作，因为2没有变为BigInteger型。</p>             <p align="left">4，当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串，详细说明如下：<br />             <wbr>String toString()<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>返回此 BigInteger 的十进制字符串表示形式。<br />             输出方法：System.out.print(two.toString());</p>             <p align="left">5,另外说明三个个用到的函数。 <wbr><wbr><wbr><wbr>BigInteger remainder(BigInteger val)<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>返回其值为 (this % val) 的 BigInteger。<br />             <wbr>BigInteger negate()<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>返回其值是 (-this) 的 BigInteger。<br />             <wbr>int <wbr><wbr><wbr><wbr><wbr><wbr><wbr>compareTo(BigInteger val)<br />             <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>将此 BigInteger 与指定的 BigInteger 进行比较。<br />             remainder用来求余数。<br />             negate将操作数变为相反数。<br />             compare的详解如下：</p>             <p align="left">compareTo<br />             public int compareTo(BigInteger val)将此 BigInteger 与指定的  BigInteger 进行比较。对于针对六个布尔比较运算符 (&lt;, ==, &gt;, &gt;=, !=, &lt;=)  中的每一个运算符的各个方法，优先提供此方法。执行这些比较的建议语句是：(x.compareTo(y) &lt;op&gt; 0)，其中  &lt;op&gt; 是六个比较运算符之一。<br />             指定者：<br />             接口 Comparable&lt;BigInteger&gt; 中的 compareTo<br />             参数：<br />             val - 将此 BigInteger 与之比较的 BigInteger。<br />             返回：</p>             <p align="left">将BigInteger的数转为2进制：</p>             <p align="left">public class TestChange {<br />             public static void main(String[] args) {<br />             System.out.println(change("3",10,2));<br />             }<br />             //num 要转换的数 from源数的进制 to要转换成的进制<br />             private static String change(String num,int from, int to){<br />             return new java.math.BigInteger(num, from).toString(to);<br />             }<br />             }</p>             </div><img src ="http://www.blogjava.net/llscp/aggbug/371887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llscp/" target="_blank">杲杲</a> 2012-03-14 22:01 <a href="http://www.blogjava.net/llscp/archive/2012/03/14/371887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse for JavaEE 下怎么建立一个Servlet类</title><link>http://www.blogjava.net/llscp/archive/2012/03/12/371762.html</link><dc:creator>杲杲</dc:creator><author>杲杲</author><pubDate>Mon, 12 Mar 2012 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/llscp/archive/2012/03/12/371762.html</guid><wfw:comment>http://www.blogjava.net/llscp/comments/371762.html</wfw:comment><comments>http://www.blogjava.net/llscp/archive/2012/03/12/371762.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/llscp/comments/commentRss/371762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llscp/services/trackbacks/371762.html</trackback:ping><description><![CDATA[<p>选中文件夹【<strong>Java Resources: src</strong>】,右击【<strong>new</strong>】-【<strong>other</strong>】-【<strong>Web</strong>】-【<strong>servlet</strong>】</p> <p>建立完成后，可以发现：【<strong>WebContent</strong>】-【<strong>WEB-INF</strong>】-【<strong>web.xml</strong>】，已经添加了刚才的那个servlet的信息。</p> <p>&nbsp;</p> <p>---------</p> 需要注意：需要把<strong>tomcat</strong>中的<strong>servlet-api.jar import</strong> 到：【<strong>WebContent</strong>】-【<strong>WEB-INF</strong>】-【lib】中<img src ="http://www.blogjava.net/llscp/aggbug/371762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llscp/" target="_blank">杲杲</a> 2012-03-12 22:38 <a href="http://www.blogjava.net/llscp/archive/2012/03/12/371762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web术语—request、forward、redirect、error、GET、POST、URL、URI </title><link>http://www.blogjava.net/llscp/archive/2012/03/11/371692.html</link><dc:creator>杲杲</dc:creator><author>杲杲</author><pubDate>Sun, 11 Mar 2012 15:33:00 GMT</pubDate><guid>http://www.blogjava.net/llscp/archive/2012/03/11/371692.html</guid><wfw:comment>http://www.blogjava.net/llscp/comments/371692.html</wfw:comment><comments>http://www.blogjava.net/llscp/archive/2012/03/11/371692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/llscp/comments/commentRss/371692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llscp/services/trackbacks/371692.html</trackback:ping><description><![CDATA[<div>        <p>1.浏览器的刷新与转到的区别</p><p>2.Web环境下request、forward、redirect、error之间的关联与区别</p><p>3.Web环境下请求方式GET与POST的区别</p><p>4.URL与URI的区别</p><p>关于HTTP请求流程参见下面的URL地址：</p><p><a href="http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html">http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html</a></p><br /><p>一.浏览器的刷新与转到的区别</p><p>刷新：在现有网页的基础上检查网页的是否有更新的内容。在检查时会保留之前的一些变量的值，因此有时可能会造成刷新后网页出现错误，或者无法打开的情况。与转到的区别是浏览器取网页的新内容来更新本机缓存，在更新的同时保留之前的一些变量。</p><p>转到：相当于在地址栏中重新输入网页的URL访问，浏览器会尽量使用已经存于本机中的缓存。相对于刷新，转到是一种全新的访问，它会尽量使用本机中的缓存文件，但不保留之前的变量。</p><p>二.web环境下request、forward、redirect、error之间的关联与区别</p><p>request：向服务器发送一个请求，然后服务器会返回一个结果给请求客户端，并附带一个response code。</p><p>forward：是服务器内部重定向，程序收到请求后重新定向到另一个程序，而客户机并不知晓。客户端页面的url地址不会发生改变。</p><p>redirect：是服务器收到请求后发送一个状态头给客户，客户将再次请求，就有两次网络通行的来往。并且对于客户来说url地址已经发生了变化。</p><p>区别:</p><table style="border-right: medium none; border-top: medium none; margin: auto auto auto 41.4pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0"><tbody><tr><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 54pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="72"><div>类别</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>概念</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>共享数据</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 114.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="153"><div>应用</div></td></tr><tr><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 54pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="72"><div>Redirect</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>URL重新定向：可以是任意的URL</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>不能共享request里面的数据</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 114.7pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="153"><div>一般用于用户注销登录时返回主页面和跳转到其它的网站等等</div></td></tr><tr><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 54pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="72"><div>Forward</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>页面的转发：只能是同一个Web应用程序的其他Web组件</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 108pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="144"><div>转发页面和转发到的页面可以共性request里面的数据</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #d4d0c8; padding-bottom: 0cm; width: 114.7pt; border-top-color: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="153"><div>一般用于用户登录的时候根据角色转发到相应的模块等等</div></td></tr></tbody></table><p>三.GET与POST方法的区别</p><p>HTTP  定义了与服务器交互的不同方法，最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求，而保留 POST 仅用于更新站点。根据  HTTP 规范，GET 用于信息获取，而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说，GET  请求一般不应产生副作用。幂等的意味着对同一 URL  的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲，其目标是当用户打开一个链接时，她可以确信从自身的角度来看没有改变资源。 比如，新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻，该操作仍然被认为是安全的和幂等的，因为它总是返回当前的新闻。反之亦然。POST  请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例，读者对文章的注解应该通过 POST  请求实现，因为在注解提交之后站点已经不同了（比方说文章下面出现一条注解）；<br /><br />在FORM提交的时候，如果不指定Method，则默认为 GET请求，Form中提交的数据将会附加在url之后，以?分开与url分开。字母数字字符原样发送，但空格转换为&#8220;+&#8220;号，其它符号转换为%XX,其 中XX为该符号以16进制表示的ASCII（或ISO  Latin-1）值。GET请求请提交的数据放置在HTTP请求协议头中，而POST提交的数据则放在实体数据中； </p><p>GET方式提交的数据最多只能有1024字节，而POST则没有此限制。</p><p>四.URL与URI的区别</p><p>url:同一资源定位符 <br />uri:同一资源标志符</p><p>url定位客户端连接到服务器所需要的信息，如 <br />http://www.csdn.net <br />http://tcc.com:8080/servlet/logon?name=zhangsan&amp;addr=tttt <br />完整构成 <br />&lt;protocol&gt;://&lt;servername&gt;[:port]/&lt;url-path&gt;[?query-string] <br /><br />uri是url组成的一部分，没有域名和查询字符串，<br />即域名之后查询字符串之前所有的信息，用于制定资源。 <br /><br />例如，对于请求地址 <br />http://java.sun.com/products/servlet/index.html?id=09 <br /><br />url---&gt;http://java.sun.com/products/servlet/index.html?id=09 <br />uri---&gt;/products/servlet/index.html </p>           </div><img src ="http://www.blogjava.net/llscp/aggbug/371692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llscp/" target="_blank">杲杲</a> 2012-03-11 23:33 <a href="http://www.blogjava.net/llscp/archive/2012/03/11/371692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>