??xml version="1.0" encoding="utf-8" standalone="yes"?>特级西西444www大精品视频,国产三区四区在线观看,水莓100国产免费av在线播放http://www.aygfsteel.com/shaolijun/zh-cnFri, 20 Jun 2025 00:27:17 GMTFri, 20 Jun 2025 00:27:17 GMT60基础才是最重要??(?http://www.aygfsteel.com/shaolijun/archive/2007/06/02/121529.htmlCHUANDAOJUNCHUANDAOJUNSat, 02 Jun 2007 12:02:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/06/02/121529.htmlString s = "Hello world!";
许多人都做过q样的事情,但是Q我们到底声明了什么?回答通常是:一个StringQ内Ҏ“Hello world!”。这hp的回答通常是概念不清的Ҏ。如果要准确的回{,一半的人大概会回答错误?br>q个语句声明的是一个指向对象的引用Q名?#8220;s”Q可以指向类型ؓString的Q何对象,目前指向"Hello world!"q个Stringcd的对象。这是真正发生的事情。我们ƈ没有声明一个String对象Q我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:
String string = s;
我们是声明了另外一个只能指向String对象的引用,名ؓstringQƈ没有W二个对象生,stringq是指向原来那个对象Q也是Q和s指向同一个对象?br>问题二:"=="和equalsҎI竟有什么区别?
==操作W专门用来比较变量的值是否相{。比较好理解的一ҎQ?br>int a=10;
int b=10;
则a==b是true?br>但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b返回false?br>Ҏ前一帖说q,对象变量其实是一个引用,它们的值是指向对象所在的内存地址Q而不是对象本w。a和b都用了new操作W,意味着在内存中生两个内容ؓ"foo"的字W串Q既然是“两个”Q它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的|所以?=="操作W,l果会是false。诚Ӟa和b所指的对象Q它们的内容都是"foo"Q应该是“相等”Q但?=操作Wƈ不涉及到对象内容的比较?br>对象内容的比较,正是equalsҎ做的事?br>看一下Object对象的equalsҎ是如何实现的Q?br>boolean equals(Object o){
return this==o;
}
Object对象默认使用?=操作W。所以如果你自创的类没有覆盖equalsҎQ那你的cM用equals和?=会得到同Ll果。同样也可以看出QObject的equalsҎ没有辑ֈequalsҎ应该辑ֈ的目标:比较两个对象内容是否相等。因为答案应该由cȝ创徏者决定,所以Object把这个Q务留l了cȝ创徏者?br>看一下一个极端的c:
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}
}
我覆盖了equalsҎ。这个实CD无论Monster实例内容如何Q它们之间的比较永远q回true?br>所以当你是用equalsҎ判断对象的内Ҏ否相{,请不要想当然。因为可能你认ؓ相等Q而这个类的作者不q样认ؓQ而类的equalsҎ的实现是׃掌握的。如果你需要用equalsҎQ或者用Q何基于散列码的集合(HashSet,HashMap,HashTableQ,请察看一下java doc以确认这个类的equals逻辑是如何实现的?br>问题三:String到底变了没有Q?br>没有。因为String被设计成不可?immutable)c,所以它的所有对象都是不可变对象。请看下列代码:
String s = "Hello";
s = s + " world!";
s所指向的对象是否改变了呢?从本pdW一的l论很容易导个结论。我们来看看发生了什么事情。在q段代码中,s原先指向一个String对象Q内Ҏ"Hello"Q然后我们对sq行?操作Q那么s所指向的那个对象是否发生了改变呢?{案是没有。这Ӟs不指向原来那个对象了Q而指向了另一个String对象Q内容ؓ"Hello world!"Q原来那个对象还存在于内存之中,只是sq个引用变量不再指向它了?br>通过上面的说明,我们很容易导出另一个结论,如果l常对字W串q行各种各样的修改,或者说Q不可预见的修改Q那么用String来代表字W串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符Ԍ都需要一个String对象来表C。这Ӟ应该考虑使用StringBufferc,它允怿改,而不是每个不同的字符串都要生成一个新的对象。ƈ且,q两U类的对象{换十分容易?br>同时Q我们还可以知道Q如果要使用内容相同的字W串Q不必每ơ都new一个String。例如我们要在构造器中对一个名叫s的String引用变量q行初始化,把它讄为初始|应当q样做:
public class Demo {
private String s;
...
public Demo {
s = "Initial Value";
}
...
}
而非
s = new String("Initial Value");
后者每ơ都会调用构造器Q生成新对象Q性能低下且内存开销大,q且没有意义Q因为String对象不可改变Q所以对于内容相同的字符Ԍ只要一个String对象来表C就可以了。也pQ多ơ调用上面的构造器创徏多个对象Q他们的Stringcd属性s都指向同一个对象?br>上面的结Zq样一个事实:对于字符串常量,如果内容相同QJava认ؓ它们代表同一个String对象。而用关键字new调用构造器QL会创Z个新的对象,无论内容是否相同?br>至于Z么要把Stringc设计成不可变类Q是它的用途决定的。其实不只StringQ很多Java标准cd中的c都是不可变的。在开发一个系l的时候,我们有时候也需要设计不可变c,来传递一l相关的|q也是面向对象思想的体现。不可变cL一些优点,比如因ؓ它的对象是只ȝQ所以多U程q发讉K也不会有M问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表Q可能会造成性能上的问题。所以Java标准cdq提供了一个可变版本,即StringBuffer?br>问题四:final关键字到底修C什么?
final使得被修饰的变量"不变"Q但是由于对象型变量的本质是“引用”Q?#8220;不变”也有了两U含义:引用本n的不变,和引用指向的对象不变?br>引用本n的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//~译期错?br>引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //~译通过
可见Qfinal只对引用?#8220;?#8221;(也即它所指向的那个对象的内存地址)有效Q它q引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化Qfinal是不负责的。这很类?=操作W:==操作W只负责引用?#8220;?#8221;相等Q至于这个地址所指向的对象内Ҏ否相{,==操作W是不管的?br>理解final问题有很重要的含义。许多程序漏z都Z?---final只能保证引用永远指向固定对象Q不能保证那个对象的状态不变。在多线E的操作?一个对象会被多个线E共享或修改Q一个线E对对象无意识的修改可能会导致另一个用此对象的线E崩溃。一个错误的解决Ҏ是在此对象新徏的时候把它声明ؓfinalQ意图得它“永远不变”。其实那是徒劳的?br>问题五:到底要怎么样初始化Q?br>本问题讨论变量的初始化,所以先来看一下Java中有哪些U类的变量?br>1. cȝ属性,或者叫值域
2. Ҏ里的局部变?br>3. Ҏ的参?br>对于W一U变量,Java虚拟Z自动q行初始化。如果给Z初始|则初始化初始倹{如果没有给出,则把它初始化cd变量的默认初始倹{?br>intcd变量默认初始gؓ0
floatcd变量默认初始gؓ0.0f
doublecd变量默认初始gؓ0.0
booleancd变量默认初始gؓfalse
charcd变量默认初始gؓ0(ASCII?
longcd变量默认初始gؓ0
所有对象引用类型变量默认初始gؓnullQ即不指向Q何对象。注意数l本w也是对象,所以没有初始化的数l引用在自动初始化后其g是null?br>对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创徏实例的时候初始化Qstatic属性在cd载,也就是第一ơ用到这个类的时候初始化Q对于后来的实例的创建,不再ơ进行初始化。这个问题会在以后的pd中进行详l讨论?br>对于W二U变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,~译器会抗议。如果初始化的语句在try块中或if块中Q也必须要让它在W一ơ用前一定能够得到赋倹{也是_把初始化语句攑֜只有if块的条g判断语句中编译器也会抗议Q因为执行的时候可能不W合if后面的判断条Ӟ如此一来初始化语句׃会被执行了,q就q反了局部变量用前必须初始化的规定。但如果在else块中也有初始化语句,可以通过~译Q因为无论如何,L臛_一条初始化语句会被执行Q不会发生用前未被初始化的事情。对于try-catch也是一P如果只有在try块里才有初始化语句,~译部通过。如果在catch或finally里也有,则可以通过~译。MQ要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要Z化成什么值好Q就用上面的默认值吧Q?br>其实W三U变量和W二U本质上是一LQ都是方法中的局部变量。只不过作ؓ参数Q肯定是被初始化q的Q传入的值就是初始|所以不需要初始化?br>问题六:instance of是什么东东?
instance of是Java的一个二元操作符Q和==Q?gt;Q?lt;是同一cM东。由于它是由字母l成的,所以也是Java的保留关键字。它的作用是试它左边的对象是否是它双的类的实例,q回booleancd的数据。D个例子:
String s = "I AM an Object!";
boolean is Object = s instance of Object;
我们声明了一个String对象引用Q指向一个String对象Q然后用instanc of来测试它所指向的对象是否是Objectcȝ一个实例,昄Q这是真的,所以返回trueQ也是isObject的gؓTrue?br>instance of有一些用处。比如我们写了一个处理̎单的pȝQ其中有q样三个c:
public class Bill {//省略l节}
public class PhoneBill extends Bill {//省略l节}
public class GasBill extends Bill {//省略l节}
在处理程序里有一个方法,接受一个Billcd的对象,计算金额。假设两U̎单计方法不同,而传入的Bill对象可能是两U中的Q何一U,所以要用instanceof来判断:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
q样可以用一个方法处理两U子cR?br>然而,q种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实玎ͼq是面向对象变成应有的做法,避免回到l构化编E模式。只要提供两个名字和q回值都相同Q接受参数类型不同的Ҏ可以了Q?br>public double calculate(PhoneBill bill) {
//计算电话账单
}
public double calculate(GasBill bill) {
//计算燃气账单
}
所以,使用instanceof在绝大多数情况下q不是推荐的做法Q应当好好利用多态?br>

CHUANDAOJUN 2007-06-02 20:02 发表评论
]]>
软g技术文撰写要?http://www.aygfsteel.com/shaolijun/archive/2007/05/27/120247.htmlCHUANDAOJUNCHUANDAOJUNSun, 27 May 2007 00:21:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/05/27/120247.htmlhttp://www.aygfsteel.com/shaolijun/comments/120247.htmlhttp://www.aygfsteel.com/shaolijun/archive/2007/05/27/120247.html#Feedback0http://www.aygfsteel.com/shaolijun/comments/commentRss/120247.htmlhttp://www.aygfsteel.com/shaolijun/services/trackbacks/120247.html1 针对?/span>

 文~制以前应分清读者对象,按不同的cd、不同层ơ的读者,军_怎样适应他们的需要?/span>    

   ?/span> 对于面向理人员和用L文Q不应像开发文?/span>(面向软g开发h?/span>)那样q多C用Y件的专业术语?/span> 难以避免使用的词汇,应在文中添加词汇表Q进行解释?/span>    

   ?/span> 开发文用的专业词汇未被q泛认知的,应添加注释进行说明?/span>

   ?/span> ~写词未被广泛认知的Q应在其后跟上完整的拼写?/span>    
        

2  正确?/span> 

   ?/span> 没有错字Q漏字?/span>

   ?/span> 文档间引用关pL?/span> 

   ?/span> 文l节(Title/History)正确?/span>    
        
3  
准确?/span>

   ?/span> 意思表辑և清?/span>Q?/span>没有二义性?/span>

   ?/span> 正确使用标点W号Q?/span>避免产生歧义?/span>    
        
4  
完整?/span> 

   ?/span> 意思表辑֮_能找C语、谓语、宾语,没有省略主语Q特别是谓语?/span>

   ?/span> 一句话中不能出现几个动词一个宾语的现象?/span>

   ?/span> 不遗漏要求和必需的信息?/span>    
        
5  
z?/span> 

   ?/span> 量不要采用较长的句子来描述Q无法避免时Q应注意使用正确的标点符受?/span>

   ?/span> z明了,不篏赘冗余,每个意思只在文档中表达一ơ?/span>  

   ?/span> 每个陈述语句Q只表达一个意思?/span>    

   ?/span> 力求明,如有可能Q配以适当的图表,以增强其清晰性?/span>    
        
6  
l一?/span> 

   ?/span> l一采用专业术语和项目规定的术语集?/span>

   ?/span> 同一个意思和名称Q前后描q的用语要一致?/span> 

   ?/span> 文档前后使用的字体要l一?/span>    

   ?/span> 同一N若干文内容应该协调一_没有矛盾?/span>    
        
7  
易读?/span> 

   ?/span> 文字描述要通俗易懂?/span> 

   ?/span> 前后文关联词使用恰当?/span>  

   ?/span> 文变更内容用其他颜色与上个版本区别开来?/span> 

   ?/span> 试步骤要采用列表的方式Q用1)?/span>2)?/span>3)…{数字序h注?/span> 

 



CHUANDAOJUN 2007-05-27 08:21 发表评论
]]>
RMI基础教程http://www.aygfsteel.com/shaolijun/archive/2007/05/22/119213.htmlCHUANDAOJUNCHUANDAOJUNTue, 22 May 2007 12:08:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/05/22/119213.htmlhttp://www.aygfsteel.com/shaolijun/comments/119213.htmlhttp://www.aygfsteel.com/shaolijun/archive/2007/05/22/119213.html#Feedback2http://www.aygfsteel.com/shaolijun/comments/commentRss/119213.htmlhttp://www.aygfsteel.com/shaolijun/services/trackbacks/119213.html  RMI的基是接口,RMI构架Z一个重要的原理Q定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的q程计算服务和用它的客L?br>一个正常工作的RMIpȝ׃面几个部分组成: 
  • q程服务的接口定?
  • q程服务接口的具体实?
  • Stub ?nbsp;Skeleton 文g
  • 一个运行远E服务的服务?
  • 一个RMI命名服务Q它允许客户端去发现q个q程服务
  • cL件的提供者(一个HTTP或者FTP服务器)
  • 一个需要这个远E服务的客户端程?

  •   下面我们一步一步徏立一个简单的RMIpȝ。首先在你的机器里徏立一个新的文件夹Q以便放|我们创建的文gQؓ了简单v见,我们只用一个文件夹存放客户端和服务端代码,q且在同一个目录下q行服务端和客户端?br>  如果所有的RMI文g都已l设计好了,那么你需要下面的几个步骤ȝ成你的系l:
      1?nbsp; ~写q且~译接口的Java代码
      2?nbsp; ~写q且~译接口实现的Java代码
      3?nbsp; 从接口实现类中生?nbsp;Stub ?nbsp;Skeleton cL?br>  4?nbsp; ~写q程服务的主q行E序
      5?nbsp; ~写RMI的客LE序
      6?nbsp; 安装q且q行RMIpȝ

    我的E序是在NetBeans IDE 5.5和JDK1.6下编写的Q当然运行是在命令提C符下进行的


    1、接?br>W一步就是徏立和~译服务接口的Java代码。这个接口定义了所有的提供q程服务的功能,在这里我们所有完成的是加减乘除Q下面是源程序:

    1. package rmiDemo;
    2. //Calculator.java
    3. //define the interface
    4. import java.rmi.Remote;
    5. public interface Calculator extends Remote
    6. {
    7.     public long add(long a, long b) 
    8.         throws java.rmi.RemoteException
    9.     public long sub(long a, long b) 
    10.         throws java.rmi.RemoteException
    11.     public long mul(long a, long b) 
    12.         throws java.rmi.RemoteException
    13.     public long div(long a, long b) 
    14.         throws java.rmi.RemoteException

    注意Q这个接口承自RemoteQ每一个定义的Ҏ都必LZ个RemoteException异常对象?br>建立q个文gQ把它存攑֜刚才的目录下Qƈ且编译?br>
    2、接口的具体实现

      下一步,我们p写远E服务的具体实现Q这是一个CalculatorImplcLӞ

    1. package rmiDemo;
    2. //CalculatorImpl.java
    3. //Implementation
    4. import java.rmi.server.UnicastRemoteObject;
    5. public class CalculatorImpl extends UnicastRemoteObject implements Calculator 
    6.     // q个实现必须有一个显式的构造函敎ͼq且要抛Z个RemoteException异常 
    7.     public CalculatorImpl() 
    8.         throws java.rmi.RemoteException { 
    9.         super(); 
    10.     } 
    11.     public long add(long a, long b) 
    12.         throws java.rmi.RemoteException { 
    13.         return a + b; 
    14.     } 
    15.     public long sub(long a, long b) 
    16.         throws java.rmi.RemoteException { 
    17.         return a - b; 
    18.     } 
    19.     public long mul(long a, long b) 
    20.         throws java.rmi.RemoteException { 
    21.         return a * b; 
    22.     } 
    23.     public long div(long a, long b) 
    24.         throws java.rmi.RemoteException { 
    25.         return a / b; 
    26.     } 

      q个实现cM用了UnicastRemoteObject去联接RMIpȝ。在我们的例子中Q我们是直接的从UnicastRemoteObjectq个cMl承的,事实上ƈ不一定要q样做,如果一个类不是从UnicastRmeoteObject上承,那必M用它的exportObject()Ҏ去联接到RMI?br>  如果一个类l承自UnicastRemoteObjectQ那么它必须提供一个构造函数ƈ且声明抛Z个RemoteException对象。当q个构造函数调用了super()Q它久激zUnicastRemoteObject中的代码完成RMI的连接和q程对象的初始化?br>3、Stubs 和Skeletons

      下一步就是要使用RMI~译器rmic来生成桩和框架文Ӟq个~译q行在远E服务实现类文g上?br>       在IDE中build所有程?br>  >rmic rmiDemoCalculatorImpl

      在你的目录下q行上面的命令,成功执行完上面的命o你可以发C个Calculator_stub.class文gQ如果你是用的Java2SDKQ那么你q可以发现Calculator_Skel.class文g?br>
      4、主机服务器

      q程RMI服务必须是在一个服务器中运行的。CalculatorServercL一个非常简单的服务器?br>

    1. package rmiDemo;
    2. //CalculatorServer.java
    3. import java.rmi.Naming;
    4. public class CalculatorServer {
    5.    public CalculatorServer() {
    6.      try {
    7.        Calculator c = new CalculatorImpl();
    8.        Naming.rebind("rmi://localhost:1099/CalculatorService", c);
    9.      } catch (Exception e) {
    10.        System.out.println("Trouble: " + e);
    11.      }
    12.    }
    13.    public static void main(String args[]) {
    14.      new CalculatorServer();
    15.    }
    16. }

      5、客L

      客户端源代码如下Q?br>

    1. package rmiDemo;
    2. //CalculatorClient.java
    3. import java.rmi.Naming
    4. import java.rmi.RemoteException
    5. import java.net.MalformedURLException
    6. import java.rmi.NotBoundException
    7. public class CalculatorClient { 
    8.     public static void main(String[] args) { 
    9.         try { 
    10.             Calculator c = (Calculator)
    11.                            Naming.lookup(
    12.                  "rmi://localhost
    13.                         /CalculatorService"); 
    14.             System.out.println( c.sub(4, 3) ); 
    15.             System.out.println( c.add(4, 5) ); 
    16.             System.out.println( c.mul(3, 6) ); 
    17.             System.out.println( c.div(9, 3) ); 
    18.         } 
    19.         catch (MalformedURLException murle) { 
    20.             System.out.println(); 
    21.             System.out.println(
    22.               "MalformedURLException"); 
    23.             System.out.println(murle); 
    24.         } 
    25.         catch (RemoteException re) { 
    26.             System.out.println(); 
    27.             System.out.println(
    28.                         "RemoteException"); 
    29.             System.out.println(re); 
    30.         } 
    31.         catch (NotBoundException nbe) { 
    32.             System.out.println(); 
    33.             System.out.println(
    34.                        "NotBoundException"); 
    35.             System.out.println(nbe); 
    36.         } 
    37.         catch (
    38.             java.lang.ArithmeticException
    39.                                       ae) { 
    40.             System.out.println(); 
    41.             System.out.println(
    42.              "java.lang.ArithmeticException"); 
    43.             System.out.println(ae); 
    44.         } 
    45.     } 

      保存q个客户端程序到你的目录下(注意q个目录是一开始徏立那个,所有的我们的文仉在那个目录下Q?br>         在IDE中build所有程序?br>  6、运行RMIpȝ

      现在我们建立了所有运行这个简单RMIpȝ所需的文Ӟ现在我们l于可以q行q个RMIpȝ啦!来n受吧?br>
      我们是在命o控制Cq行q个pȝ的,你必d启三个控制台H口Q一个运行服务器Q一个运行客LQ还有一个运行RMIRegistry?br>
      首先q行注册E序RMIRegistryQ你必须在包含你刚写的类的那么目录下q行q个注册E序?br>
      >rmiregistry

      好,q个命o成功的话Q注册程序已l开始运行了Q不要管他,现在切换到另外一个控制台Q在W二个控制台里,我们q行服务器CalculatorServiceQ因为RMI的安全机制将在服务端发生作用,所以你必须增加一条安全策略。以下是对应安全{略的例?nbsp;
    grant {
    permission java.security.AllPermission "", "";
    };

      注意:q是一条最单的安全{略,它允怓Q何h做Q何事,对于你的更加关键性的应用,你必L定更加详l安全策略?br>
      现在Zq行服务端,你需要除客户c?CalculatorClient.class)之外的所有的cL件。确认安全策略在policy.txt文g之后,使用如下命o来运行服务器?br>
      > java -Djava.security.policy=C:\Documents and Settings\Administrator\RMI\build\classes\  rmiDemo.CalculatorServer

      q个服务器就开始工作了Q把接口的实现加载到内存{待客户端的联接。好现在切换到第三个控制収ͼ启动我们的客L?br>
      Z在其他的机器q行客户端程序你需要一个远E接?Calculator.class) 和一个stub(CalculatorImpl_Stub.class)?nbsp;使用如下命oq行客户?br>
       > java -Djava.security.policy=C:\Documents and Settings\Administrator\RMI\build\classes\ rmiDemo. CalculatorClient

      如果所有的q些都成功运行,你应该看C面的输出Q?br>  1
      9
      18
      3

      



  • CHUANDAOJUN 2007-05-22 20:08 发表评论
    ]]>
    重定向与h分派http://www.aygfsteel.com/shaolijun/archive/2007/05/21/118985.htmlCHUANDAOJUNCHUANDAOJUNMon, 21 May 2007 13:21:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/05/21/118985.htmlhttp://www.aygfsteel.com/shaolijun/comments/118985.htmlhttp://www.aygfsteel.com/shaolijun/archive/2007/05/21/118985.html#Feedback0http://www.aygfsteel.com/shaolijun/comments/commentRss/118985.htmlhttp://www.aygfsteel.com/shaolijun/services/trackbacks/118985.htmlhttp://localhost:8080/foo/stuff.htmlQ?br>
    重定向:   URL地址不是?#8220;/”开_

                       response.sendRedirect(http://www.google.com);

                      现在的地址是:http://www.google.com



                       URL地址是以“/”开_

                       response.sendRedirect(/http://www.google.com);

                      现在的地址是:http://localhost:8080/http://www.google.comQ当让这L地址你会看到一?04错误Q在q我只是Z理解更方便一点)

    ȝQ从上面的内Ҏ们看刎ͼ通过sendRedirect后url 的地址发生了变化, 我们通常叫他客户端蟩转?br>

    h分派QRequestDispatcher有两U方法得刎ͼ
                        1、request.getRequestDispatcher("/result.jsp");或request.getRequestDispatcher("result.jsp");
                              如果是由request引导的,那么“/”可有可无
                        2、getServletContext().getRequestDispatcher("/result.jsp");
                               如果是由getServletContext()引导的,那么必须?#8220;/”开?br>ȝQ尝试后Q你会发玎ͼ通过getRequestDispatcher后url 的地址没有发生变化Q?我们通常叫他服务器端跌{?br>
    另外再多嘴一句:ServletContext 接口下有一个getNamedDispatcher("name");name是Servlet或jsp的名字而不是\径(需要在web.xml中定义他们的路径Q是Z以后修改方便


    CHUANDAOJUN 2007-05-21 21:21 发表评论
    ]]>
    处理多个parameter的妙?/title><link>http://www.aygfsteel.com/shaolijun/archive/2007/05/21/118975.html</link><dc:creator>CHUANDAOJUN</dc:creator><author>CHUANDAOJUN</author><pubDate>Mon, 21 May 2007 12:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/shaolijun/archive/2007/05/21/118975.html</guid><wfw:comment>http://www.aygfsteel.com/shaolijun/comments/118975.html</wfw:comment><comments>http://www.aygfsteel.com/shaolijun/archive/2007/05/21/118975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shaolijun/comments/commentRss/118975.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shaolijun/services/trackbacks/118975.html</trackback:ping><description><![CDATA[提交面demo.htm<br><html><br><body><br> <form action="demo.jsp" method="post"><br>  用户名:<input type="text" name="uname"><br><br>  密码Q?lt;input type="password" name="upass"><br><br>  兴趣Q?br>  <input type="checkbox" name="**inst" value="球">球<br>  <input type="checkbox" name="**inst" value="游泳">游泳<br>  <input type="checkbox" name="**inst" value="唱歌">唱歌<br>  <input type="checkbox" name="**inst" value="跌">跌<br>  <input type="checkbox" name="**inst" value="看书">看书<br>  <br><br>  <input type="submit" value="提交"><br> </form><br></body><br></html><br><br>数据处理面demo.jspQ精华部分)<br><%@ page contentType="text/html;charset=gbk"%><br><%@ page import="java.util.*"%><br><html><br><body><br><%<br>      // 接收内容<br>      request.setCharacterEncoding("GBK") ;<br>     Enumeration enu = request.getParameterNames() ;<br>%><br><%=request.getMethod()%><br><%    <br>     while(enu.hasMoreElements())<br> {<br>     String name = (String)enu.nextElement() ;<br>     if(name.startsWith("**"))<br>  {<br>    String temp[] = request.getParameterValues(name) ;<br>%><br>   <h1><%=new StringBuffer(name).replace(0,2,"")%> --><br><%<br>   for(int i=0;i<temp.length;i++)<br>   {<br>%><br>    <%=temp[i]%>?br><%<br>   }<br>%><br>   </h1><br><%<br>  }<br>   else<br>  {<br>%><br>   <h1><%=name%> --> <%=request.getParameter(name)%></h1><br><%<br>  }<br> }<br>%><br></h1><br></body><br></html> <img src ="http://www.aygfsteel.com/shaolijun/aggbug/118975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shaolijun/" target="_blank">CHUANDAOJUN</a> 2007-05-21 20:21 <a href="http://www.aygfsteel.com/shaolijun/archive/2007/05/21/118975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP动作元素http://www.aygfsteel.com/shaolijun/archive/2007/05/18/118354.htmlCHUANDAOJUNCHUANDAOJUNFri, 18 May 2007 06:29:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/05/18/118354.htmlhttp://www.aygfsteel.com/shaolijun/comments/118354.htmlhttp://www.aygfsteel.com/shaolijun/archive/2007/05/18/118354.html#Feedback0http://www.aygfsteel.com/shaolijun/comments/commentRss/118354.htmlhttp://www.aygfsteel.com/shaolijun/services/trackbacks/118354.html<jsp:param name="" value=""/>定义一个属?通常?lt;jsp:include>?lt;jsp:forward>?lt;jsp:plugin>一起?br>
    <jsp:include page=""  flush="True"/>把另一个网导入到当前|页
    <%@include%>?<jsp:include>的区别?
    如果Q被包含的页面是静态的<%@include%>先将其导入,如页面中有jsp代码Q导入后处理Q?lt;jsp:include>则是把其导入不做M处理Q直接显C?br>如果Q被包含的页面是动态的<%@include%>先将其导入,让后处理Q?lt;jsp:include>则是先处理让后导入?br>?lt;jsp:include page=""  flush="True"/>中我们还可以通过<jsp:param name="" value="">l被包含面传|格式如下Q?br><jsp:include page=""  flush="True">
       <jsp:param name="" value=""/>
       <jsp:param name="" value=""/>
         . 
         .
         .
       <jsp:param name="" value=""/>
    </jsp:include>

    <jsp:forward page=""/>
    面内容转向目标面Qurl内容q是保持原页面的状况Q属于服务器端蟩转)
    ?lt;jsp:forward page="">中我们还可以通过<jsp:param name="" value="">l被指向面传|格式如下Q?br><jsp:forward page=""  flush="True">
       <jsp:param name="" value="">
       <jsp:param name="" value="">
         . 
         .
         .
       <jsp:param name="" value="">
    </jsp:forward>



    CHUANDAOJUN 2007-05-18 14:29 发表评论
    ]]>
    JSP三个使用指o代码http://www.aygfsteel.com/shaolijun/archive/2007/05/18/118325.htmlCHUANDAOJUNCHUANDAOJUNFri, 18 May 2007 05:30:00 GMThttp://www.aygfsteel.com/shaolijun/archive/2007/05/18/118325.htmlb、include
    c、taglib

    具体格式如下Q?br>
    <%@page import="" session= ""  contentType = "" isELgnored= ""%>
    <%@include file= ""%>
    <%@taglib>





    CHUANDAOJUN 2007-05-18 13:30 发表评论
    ]]>
    վ֩ģ壺 | ²| | | | Į| º| Ϫ| | | ƽ| ʯ| ٲ| | | | ׺| | ˫| | | | ͺ| | ƽ| Ϫ| ɽ| ƽ| ϳ| | Դ| ޳| ƽ| ̳| | пǰ| ǰ| | | Ӣɳ| ء|