thinking

one platform thousands thinking

java需要了解的东西

1、forward redirect的区别
答:1.forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
2.redirect  可以跨页面访问,而forward, 得根据上下文环境。
3.forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。
 
    forward 会将 request state , bean 等等信息带往下一个 jsp
redirect 是送到 client 端后再一次 request , 所以资料不被保留.
使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料

2、jsp有哪些内置对象?作用分别是什么?
答:JSP共有以下9种基本内置组件(可与ASP6种内部组件相对应):
 request 对象表示一个HTTP请求

   response
对象存储处理结果返回给用户的响应。
   out 对象用于将内容写入JSP页面实例的输出流中
   pageContext 对象描述某个JSP文档的运行环境,此外,它还实现将控制权从当前页面传输至其他页面的方法
   session
对象在用户访问一个Web站点的多个页面时共享信息

   application 对象存储运行文档的环境的有关信息

   config 对象将Servlet配置数据以Servlet的初始化参数形式存储

   page 对象表示JSP
网页本身
,更是Servlet类的实例,可以调用由Servlet类定义的任何方法
   exception
针对错误网页,未捕捉的例外
,只适用于JSP错误页面
3、
jsp有哪些动作?作用分别是什么?
:JSP共有以下7种基本动作
   jsp:include
:在页面被请求的时候引入一个文件。
   jsp:useBean
它用来实例化JavaBean,或者定位一个已经存在的Bean实例,并且把它赋给一个变量名(或者id)。并给定一个具体的范围来确定对象的生命周期。
   jsp:setProperty
:设置JavaBean的属性。

   jsp:getProperty
:输出某个JavaBean的属性。

   jsp:forward
:把请求转到一个新的页面。

   jsp:plugin
:根据浏览器类型为Java插件生成OBJECTEMBED标记
  jsp:param:
为其他标签提供附加信息。
4、
JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDEjsp:include动作实现
   <jsp:include page="included.jsp" flush="true" />
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
  
静态INCLUDEinclude伪码实现,定不会检查所含文件的变化,适用于包含静态页面
   <%@ include file="included.htm" %>
5、
两种跳转方式分别是什么?有什么区别?
答:有两种,分别为:
  <jsp:include page="included.jsp" flush="true">
  <jsp:forward page= "nextpage.jsp"/>
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。


代码和编程
1、写一个Singleton出来
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {
    private Singleton(){}
    //在自己内部定义自己一个实例,是不是很奇怪?
    //注意这是private 只供内部调用
    private static Singleton instance = new Singleton();
    //这里提供了一个供外部访问本class的静态方法,可以直接访问  
    public static Singleton getInstance() {
    return instance;   
    }
    }

    第二种形式:

public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
//使用时生成实例,提高了效率!

if (instance==null)
instance=new Singleton();
        return instance;   }
}

其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些

2、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
答:Server端程序:

package test;
import java.net.*;
import java.io.*;

public class Server
{
 
private ServerSocket ss;
 
private Socket socket;
 
private BufferedReader in;
 
private PrintWriter out;
 
public Server()
 {
  
try
  {
   ss
=new ServerSocket(10000);
   
while(true)
   {
    socket 
= ss.accept();
    String RemoteIP 
= socket.getInetAddress().getHostAddress();
    String RemotePort 
= ":"+socket.getLocalPort();
    System.out.println(
"A client come in!IP:"+RemoteIP+RemotePort);
    in 
= new BufferedReader(new

InputStreamReader(socket.getInputStream()));
    String line 
= in.readLine();
    System.out.println(
"Cleint send is :" + line);
    out 
= new PrintWriter(socket.getOutputStream(),true);
    out.println(
"Your Message Received!");
    out.close();
    in.close();
    socket.close();
   }
  }
catch (IOException e)
  {
   out.println(
"wrong");
  }
 }
 
public static void main(String[] args)
 {
  
new Server();
 }
};

Client端程序:

package test;

import java.io.*;

import java.net.*;

 

public class Client

{

Socket socket;

BufferedReader in;

PrintWriter out;

public Client()

{

try

{

System.out.println("Try to Connect to 127.0.0.1:10000");

socket = new Socket("127.0.0.1",10000);

System.out.println("The Server Connected!");

System.out.println("Please enter some Character:");

BufferedReader line = new BufferedReader(new

 

InputStreamReader(System.in));

out = new PrintWriter(socket.getOutputStream(),true);

out.println(line.readLine());

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(in.readLine());

out.close();

in.close();

socket.close();

}catch(IOException e)

{

out.println("Wrong");

}

}

public static void main(String[] args)

{

new Client();

}

};


3、JAVA实现一种排序,JAVA类实现序列化的方法(二种) 如在COLLECTION框架中,实现比较要实现什么样的接口?

:用插入法进行排序代码如下

package test;
import java.util.*;
class  InsertSort
{
 ArrayList al;
 
public InsertSort(int num,int mod)
 {
  al 
= new ArrayList(num);
  Random rand 
= new Random();
  System.out.println(
"The ArrayList Sort Before:");
  
for (int i=0;i<num ;i++ )
  {
   al.add(
new Integer(Math.abs(rand.nextInt()) % mod + 1));
   System.out.println(
"al["+i+"]="+al.get(i));
  }
 }
 
public void SortIt()
 {
  Integer tempInt;
  
int MaxSize=1;
  
for(int i=1;i<al.size();i++)
  {
       tempInt 
= (Integer)al.remove(i);
    
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
    {
     al.add(MaxSize,tempInt);
     MaxSize
++;
     System.out.println(al.toString());
    } 
else {
     
for (int j=0;j<MaxSize ;j++ )
     {
      
if

(((Integer)al.get(j)).intValue()
>=tempInt.intValue())
      {
       al.add(j,tempInt);
       MaxSize
++;
       System.out.println(al.toString());
       
break;
      }
     }
    }
  }
  System.out.println(
"The ArrayList Sort After:");
  
for(int i=0;i<al.size();i++)
  {
   System.out.println(
"al["+i+"]="+al.get(i));
  }
 }
 
public static void main(String[] args)
 {
  InsertSort is 
= new InsertSort(10,100);
  is.SortIt();
 }
}

4、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如ABC”4,应该截为AB”,输入ABCDEF”6,应该输出为ABC”而不是ABC+汉的半个

答:代码如下:

package test;

class  SplitString
{
 String SplitStr;
 
int SplitByte;
 
public SplitString(String str,int bytes)
 {
  SplitStr
=str;
  SplitByte
=bytes;
  System.out.println(
"The String is:'"+SplitStr+"';SplitBytes="+SplitByte);
 }
 
public void SplitIt()
 {
  
int loopCount;
  

loopCount
=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

Byte
+1);
  System.out.println(
"Will Split into "+loopCount);
  
for (int i=1;i<=loopCount ;i++ )
  {
   
if (i==loopCount){
    

System.out.println(SplitStr.substring((i
-1)*SplitByte,SplitStr.length()));
   } 
else {
    

System.out.println(SplitStr.substring((i
-1)*SplitByte,(i*SplitByte)));
   }
  }
 }
 
public static void main(String[] args)
 {
  SplitString ss 
= new SplitString("test中dd文dsaf中男大3443n中国43中国人

0ewldfls
=103",4);
  ss.SplitIt();
 }
}

5、可能会让你写一段JdbcOracle的程序,并实现数据查询.

:程序如下:

package hello.ant;
import java.sql.*;
public class  jdbc
{
 String dbUrl
="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
 String theUser
="admin";
 String thePw
="manager";
 Connection c
=null;
 Statement conn;
 ResultSet rs
=null;
 
public jdbc()
 {
  
try{
    Class.forName(
"oracle.jdbc.driver.OracleDriver").newInstance();
          c 
= DriverManager.getConnection(dbUrl,theUser,thePw);
    conn
=c.createStatement();
  }
catch(Exception e){
   e.printStackTrace();
  }
 }
 
public boolean executeUpdate(String sql)
 {
   
try
   {
     conn.executeUpdate(sql);
     
return true;
   }
   
catch (SQLException e)
   {
     e.printStackTrace();
     
return false;
   }
 }
 
public ResultSet executeQuery(String sql)
 {
   rs
=null;
   
try
   {
     rs
=conn.executeQuery(sql);
   }
   
catch (SQLException e)
   {
     e.printStackTrace();
   }
   
return rs;
 }
 
public void close()
 {
   
try
   {
     conn.close();
     c.close();
   }
   
catch (Exception e)
   {
     e.printStackTrace();
   }
 }
 
public static void main(String[] args)
 {
  ResultSet rs;
  jdbc conn 
= new jdbc();
  rs
=conn.executeQuery("select * from test");
  
try{
  
while (rs.next())
  {
   System.out.println(rs.getString(
"id"));
   System.out.println(rs.getString(
"name"));
  }
  }
catch(Exception e)
  {
   e.printStackTrace();
  }
 }
}

6、jdom解析xml文件时如何解决中文问题?如何解析?

:看如下代码,用编码方式加以解决

package test;
import java.io.*;
public class DOMTest
{
 
private String inFile = "c:\\people.xml";
 
private String outFile = "c:\\people.xml"
 
public static void main(String args[])
 {
     
new DOMTest();
    }
 
public DOMTest()
 {
  
try
     { 
      javax.xml.parsers.DocumentBuilder builder 
=
       

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
      org.w3c.dom.Document doc 
= builder.newDocument();
      org.w3c.dom.Element root 
= doc.createElement("老师");
      org.w3c.dom.Element wang 
= doc.createElement("");
   org.w3c.dom.Element liu 
= doc.createElement("");
      wang.appendChild(doc.createTextNode(
"我是王老师"));
      root.appendChild(wang);
      doc.appendChild(root);
      javax.xml.transform.Transformer transformer 
=
       javax.xml.transform.TransformerFactory.newInstance().newTransformer();
      transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, 
"gb2312");
      transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, 
"yes");  

   
      transformer.transform(
new javax.xml.transform.dom.DOMSource(doc),
            
new

javax.xml.transform.stream.StreamResult(outFile));
     }
     
catch (Exception e)
     {
      System.out.println (e.getMessage());
     }
    }
}

7、将一个键盘输入的数字转化成中文输出

(例如:输入:1234567     输出:一百二拾三万四千五百六拾七)
用java语言实现,,请编一段程序实现!
 

public class Reader {
  
private String strNum;
  
private String strNumChFormat;
  
private String strNumTemp;
  
private int intNumLen;
  
private String strBegin;
  
public Reader(String strNum) {
    
this.strNum = strNum;
  }
  
public boolean check(String strNum) {
    
boolean valid = false;
    
    
if (strNum.substring(0,1).equals("0")){
     
this.strNum = strNum.substring(1);
    }
    
try {
      
new Double(strNum);
      valid 
= true;
    }
    
catch (NumberFormatException ex) {
      System.out.println(
"Bad number format!");
    }
    
return valid;
  }
  
public void init() {
    strNumChFormat 
= "";
    intNumLen 
= strNum.length();
    strNumTemp 
= strNum;
    strNumTemp 
= strNumTemp.replace('1''');
    strNumTemp 
= strNumTemp.replace('2''');
    strNumTemp 
= strNumTemp.replace('3''');
    strNumTemp 
= strNumTemp.replace('4''');
    strNumTemp 
= strNumTemp.replace('5''');
    strNumTemp 
= strNumTemp.replace('6''');
    strNumTemp 
= strNumTemp.replace('7''');
    strNumTemp 
= strNumTemp.replace('8''');
    strNumTemp 
= strNumTemp.replace('9''');
    strNumTemp 
= strNumTemp.replace('0''');
    strNumTemp 
= strNumTemp.replace('.''');
    strBegin 
= strNumTemp.substring(01);
  }
  
public String readNum() {
    
if (check(strNum)) {
      init();
      
try {
        
for (int i = 1, j = 1, k = 1; i < intNumLen; i++) {
          
if (strNumTemp.charAt(intNumLen - 1== '' && i == 1) {
            strNumChFormat 
= "";
          }
          
else if (strNumTemp.charAt(intNumLen - i) == '' && j == 1) {
            strNumChFormat 
= "" + strNumChFormat;
          }
          
else if (strNumTemp.charAt(intNumLen - i) == '') {
            j 
= 1;
            k 
= 1;
            strNumChFormat 
= strNumTemp.charAt(intNumLen - i) + strNumChFormat;
            
continue;
          }
          
else {
            strNumChFormat 
= strNumTemp.charAt(intNumLen - i) + strNumChFormat;
          }
          
if (strNumTemp.charAt(intNumLen - i - 1!= '' &&
              strNumTemp.charAt(intNumLen 
- i - 1!= '') {
            
if (j == 1 && i < intNumLen) {
              strNumChFormat 
= '' + strNumChFormat;
            }
            
else if (j == 2 && i < intNumLen) {
              strNumChFormat 
= '' + strNumChFormat;
            }
            
else if (j == 3 && i < intNumLen) {
              strNumChFormat 
= '' + strNumChFormat;
            }
          }
          
if (j == 4 && i < intNumLen) {
            j 
= 0;
          }
          
if (k == 4 && i < intNumLen) {
            strNumChFormat 
= '' + strNumChFormat;
          }
          
else if (k == 8 && i < intNumLen) {
            k 
= 0;
            strNumChFormat 
= '亿' + strNumChFormat;
          }
          j
++;
          k
++;
        }
        
while (strNumChFormat.indexOf(""!= -1) {
          strNumChFormat 
= strNumChFormat.replaceAll(""" ");
        }
        
if (strNumChFormat.substring(02== "一拾") {
          strNumChFormat 
= strNumChFormat.substring(1, strNumChFormat.length());
        }
        
if (strNumChFormat.indexOf("">= 0) {
          String rebegin 
= strNumChFormat.substring(0,
              strNumChFormat.indexOf(
""));
          String relast 
= strNumChFormat.substring(strNumChFormat.indexOf(""),
              strNumChFormat.length());
          
for (int i = 1; i <= relast.length(); i++) {
            relast 
= relast.replaceAll("""");
            relast 
= relast.replaceAll("""");
            relast 
= relast.replaceAll("""");
            relast 
= relast.replaceAll("""");
            relast 
= relast.replaceAll("亿""");
          }
          strNumChFormat 
= rebegin + relast;
        }
      }
      
catch (ArrayIndexOutOfBoundsException ex) {
        ex.printStackTrace();
      }
      
catch (Exception ex) {
        ex.printStackTrace();
      }
      
int off = strNumChFormat.indexOf("");
      strNumChFormat 
= strBegin + strNumChFormat.substring(0);
    }
    
else {
      strNumChFormat 
= "";
    }
    
return strNumChFormat;
  }
  
public static void main(String args[]) {
    
try {
      String number 
= args[0].toString();
      System.out.println(
"The number is: " + number);
      Reader reader 
= new Reader(number);
      System.out.println(
"Output String: " + reader.readNum());
    }
    
catch (Exception ex) {
      System.out.println(
"Please input like that: javac Reader <number>");
    }
  }
}

8、如何校验数字型?

var re=/^\d{1,8}$|\.\d{1,2}$/;
var str
=document.form1.all(i).value;
var r
=str.match(re);
if (r==null)
{
   sign
=-4;
   
break;
}
else{
   document.form1.all(i).value
=parseFloat(str);
}

posted on 2009-03-02 14:32 lau 阅读(232) 评论(0)  编辑  收藏 所属分类: J2SE


只有注册用户登录后才能发表评论。


网站导航: