关于java与javaScript的互相访问

关于java与javaScript的互相访问
key words: 脚本编码 中文乱码 js
在jsp中,通过js访问java代码比较容易(不过,也有缺陷,比如java代码的声明必须先于js),反过来则不方便,网上看到有通过其他组件的方式来做,感觉也不是很好,其实平时用的更多的是在js中有中文编码,而需要到下一个jsp页面中得到这个对应的值。

js中有函数escape和unescape,可惜的是java.net.*中的编码和解码与js的不一致,所以他们不能协同工作,有一个方法就是在java中重新实现一遍js里对应的方法,代码如下:
/**
 * java版本的escape和 unescape[对应javaScript里的函数]
 
*/
public   class  EscapeUnescape {
    
/**
     * escape ==> escape
     * 
@param  src
     * 
@return  String
     
*/
    
public   static  String escape(String src) {
        
int  i;
        
char  j;
        StringBuffer tmp 
=   new  StringBuffer();
        tmp.ensureCapacity(src.length() 
*   6 );
        
for  (i  =   0 ; i  <  src.length(); i ++ ) {
            j 
=  src.charAt(i);
            
if  (Character.isDigit(j)  ||  Character.isLowerCase(j)
                    
||  Character.isUpperCase(j))
                tmp.append(j);
            
else   if  (j  <   256 ) {
                tmp.append(
" % " );
                
if  (j  <   16 )
                    tmp.append(
" 0 " );
                tmp.append(Integer.toString(j, 
16 ));
            } 
else  {
                tmp.append(
" %u " );
                tmp.append(Integer.toString(j, 
16 ));
            }
        }
        
return  tmp.toString();
    }

    
/**
     * unescape ===>js
     * 
@param  src
     * 
@return  String
     
*/
    
public   static  String unescape(String src) {
        StringBuffer tmp 
=   new  StringBuffer();
        tmp.ensureCapacity(src.length());
        
int  lastPos  =   0 , pos  =   0 ;
        
char  ch;
        
while  (lastPos  <  src.length()) {
            pos 
=  src.indexOf( " % " , lastPos);
            
if  (pos  ==  lastPos) {
                
if  (src.charAt(pos  +   1 ==   ' u ' ) {
                    ch 
=  ( char ) Integer.parseInt(src.substring(pos  +   2 , pos  +   6 ),  16 );
                    tmp.append(ch);
                    lastPos 
=  pos  +   6 ;
                } 
else  {
                    ch 
=  ( char ) Integer.parseInt(src.substring(pos  +   1 , pos  +   3 ),  16 );
                    tmp.append(ch);
                    lastPos 
=  pos  +   3 ;
                }
            } 
else  {
                
if  (pos  ==   - 1 ) {
                    tmp.append(src.substring(lastPos));
                    lastPos 
=  src.length();
                } 
else  {
                    tmp.append(src.substring(lastPos, pos));
                    lastPos 
=  pos;
                }
            }
        }
        
return  tmp.toString();
    }
}


你可能感兴趣的:(关于java与javaScript的互相访问)