姿姿霸霸~~!
贵在坚持!
posts - 106,  comments - 50,  trackbacks - 0
第三阶段
流行MVC架构和Java对象持久化技术。包括Struts、Spring、Hibernate。
要求:
MVC-------理解MVC设计模式、处理过程。(其实jsp+servlet+javaBean就是一个最基本的MVC框架)
Struts-------理解Struts实现MVC的机制、工作流程。掌握配置Struts应用、(Struts-Config.xml,ActionAction、ActionForm)的运用,Struts应用的国际化(感觉就是标签加配置文件,property那个文件)、Validator验证框架(可以联系下JS)、Struts标签库。
Spring-------掌握控制反转(IoC),也就是DI,然后是面向方面编程(AOP),其他的晃一眼。。。
Hibernate--------理解ORM,掌握映射对象标识符、映射关系(一对多、多对多、一对一)、映射类型、检索策略、检索方式、数据库事务与并发、管理Hibernate的缓存。 (可以和EJB里面的EntityBean对起来看)

学习过程:先学习Struts,再学习Hibernate,最后学Spring,再最后把几个框架结合在一起,注意XML的配置。。。还有注意要积累对一些常见的异常的处理方法。总的来说,我觉得框架就是会使用就行了,平时多去想想它带来的好处,也就是为啥子要用它们,也就是它们的一些思想,比如说spring的DI,使用了框架后的松耦合等等。

有时间的话,看一下ajax,JSF,webwork,有用的东西。对了,还有CVS等一些版本控制工具。(这些都是霸霸说的^_^)
posted @ 2007-01-31 00:28 xrzp 阅读(623) | 评论 (1)编辑 收藏
第二阶段:
JAVA网络编程(Socket)、HTML、XML、JSP、JavaBean、Servlet(后面3个是重点)。
要求:
Socket--------掌握java.io包中的套接口类和服务器套接口类的使用。
HTML--------了解HTML语言的语法、各种标签。
XML--------掌握XML语言的语法,其他的了解下。
JSP-------掌握JSP2.0语法、五大元素、内置对象、EL、JSTL1.1、JSP自定标签。
JavaBean-------理解JavaBean的特点和事件模型。
Servlet---------掌握HTTP协议、Servlet工作过程、Servlet会话跟踪、Servlet过滤器、Serlvet事件侦听器、配置web.xml。
PS:-------学习过程中学会使用Tomcat、JBoss服务器,学习使用myeclipse、dreamweaver、junit开发工具。
另外,关注一下EJB3.0。
posted @ 2007-01-31 00:15 xrzp 阅读(554) | 评论 (0)编辑 收藏
自己看了几个月JAVA的体会:框架的东西随时会变,而基础是不变的;所以基础很重要。
第一阶段:
JAVA语言基础知识。包括异常、IO流、多线程、集合类。常见的几个包、几个接口。
要求:
异常------掌握try-catch-finally的使用
IO流------掌握字节流、字符流和对象序列化的处理。熟练使用各种输入、输出流类(InputStream、OutputStream、FileInputStream、FileOutputStream、DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、BufferReader、BufferedWriter、ObjectInputStream、ObjectOutputStream)。
多线程-------掌握多线程实现的两种实现方法,分别是继承Thread类与实现Runnable接口。理解线程间的同步与互斥。
集合类-------掌握Set、Collection、Map、List、Iterator、Enumeration接口的使用,掌握HashSet、ArrayList、Vector、HashMap、HashTable类的使用。
常用的包:java.lang,java.util,java.io,java.net,java.awt,javax.swing

另外-------理解Unicode、GB2132、GBK、UTF-8、ISO8859编码方式。以及怎么处理乱码的方法。
了解javase1.5新增的内容:自动装箱/拆箱,泛型之类的。
posted @ 2007-01-31 00:05 xrzp 阅读(432) | 评论 (0)编辑 收藏
近日在论坛上看到有人在问星期算法,特别整理了一下,这些算法都是从网上搜索而来。希望对大家有所帮助。

一:常用公式

  W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

  Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。

二:蔡勒(Zeller)公式

   w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

  公式中的符号含义如下,w:星期;c:世纪;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。

   相比于通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。

 三:对蔡勒(Zeller)公式的改进

作者:冯思琮
    相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。现将公式列于其下:
W=[y/4]+r (y/7)-2r(c/4)+m’+d

公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意:在笔者给出的公式中,y为润年时1’=5;2’=1)。其他符号与蔡勒(Zeller)公式中的含义相同。

四:基姆拉尔森计算公式

  W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

  在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:

 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

posted @ 2007-01-16 23:07 xrzp 阅读(1885) | 评论 (3)编辑 收藏

先来个小总结:

yield()使当前线程暂停。但设置了setPriority(Thread.MAX_PRIORITY);时,yield()不咋管用了。

一般只需要重写run()方法的话,实现runnalbe接口比较方便。

如果在进程类里面需要访问同一个变量的话,就实现接口。如果用继承类的话,同一个变量就有几份的拷贝。但是内部类继承类的结和继承接口的效果一样。

启动一个线程
MyThread mt=new MyThread();
new Thread(mt).start();

好多东西都有时间片。时间片是个不确定的东西。

当调用wait(),notify()方法时,应该保证他们是同一个对象sy也要同一个对象。synchronized 中 才能有wait(),notify()方法。

synchronized(Object obj)与synchronized(this)的区别?!(谁能告诉我!!!!!)


下面是生产者与消费者的例子,为了方便,几个类直接写在一起了。


//new 生产者,消费者,队列。并起用生产者,消费者的线程
public class Test {

 public static void main(String[] args) {

  Queue q = new Queue();
  Producer p = new Producer(q);
  Consumer c = new Consumer(q);
  p.start();
  c.start();
 }
}

//生产者,每生产好一个东西后,就往队列中放一个
class Producer extends Thread {

 Queue q;

 Producer(Queue q) {
  this.q = q;
 }

 public void run() {
  for (int i = 0; i < 10; i++) {
   q.setValue(i);
   System.out.println("Producer put:" + i);
  }
 }
}

//消费者,每当队列中有东西通知时,就从队列去拿
class Consumer extends Thread {

 Queue q;

 Consumer(Queue q) {
  this.q = q;
 }

 public void run() {
  while (true) {
   System.out.println("Consumer get:" + q.getValue());
  }
 }
}

//队列
class Queue {

 int value;
 boolean flag = false;

 //生产者往这放它所生产的东西
 public synchronized void setValue(int i) {
  //当生产好一个往队列中放了后,放置一个标志。发个通知,告诉说生产好了,并等待消费者来拿
  if (!flag) {
   value = i;
   flag = true;
   notify();
  }
  try {
   wait();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

 //消费者从这获取东西
 public synchronized int getValue() {
  //消费这先判断队列是否有东西了,有的话,就让其他线程等待,自己取拿,拿好后设置一个标志,发个通告告诉其他线程,我拿好了
  if (!flag) {
   try {
    wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
  flag = false;
  notify();
  return value;
 }
}

posted @ 2007-01-15 00:27 xrzp 阅读(841) | 评论 (0)编辑 收藏

1.
集合框架分为Collection和Map。Collection包括set和List。

2.
Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。
Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。
List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。
Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。

3.
凡是继承了collection的接口的,都有iterator的方法。

4.
对于没有get的集合类,可以用爹带器。而且爹带器是通用的。

5.
collections是类,都是静态的。里面有几个方法是拿来排序的。(如sort方法)。compared是个比较器。
collection是接口。

6.
Stack里面的pop和push有点像get和set。
Queue和Stack差不多,但是是FIFO。

7.
因为hashset计算出对应的函数值,以这个值作为该结点存储在散列表中的地址,所以对查找的效率非常高。
实现set接口的能不能重复。
hashset通过散列码来存储,而散列码的获得靠hashcode来得到。hashcode根据对象的内存的地址来得到散列码。

8.
hashmap靠put填元素,靠get取元素。HashMap对key进行散列。
三个方法keySet()、values()、entrySet()。

9.
在List的开始处增加元素,或者在List中进行插入和删除操作,应该使用LinkedList。如果单单是为了查询,就用ArrayList。因为ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个 引用,分别指向前一个元素和后一个元素。

10.
HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。通常都应该使用HashSet,在需要排序的功能时,我们才使用TreeSet。

11.
和Set类似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的时候,才使用TreeMap。

posted @ 2007-01-14 00:40 xrzp 阅读(344) | 评论 (0)编辑 收藏
运行的时候,要先运行server,再运行client。
服务器 :
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.*;
public class Server {

    
public static void main(String[] args) throws Exception , IOException{
        System.out.println(
"----Server start-----");
        ServerSocket server
=new ServerSocket(1234);
        Socket socket
=server.accept();
        InputStream is
=socket.getInputStream();
        DataInputStream dis
=new DataInputStream(is);
        System.out.println(dis.readUTF());
        
        dis.close();
        is.close();
    }

}


客户端:
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.*;
public class Client {

    
public static void main(String[] args) throws Exception, IOException {
        System.out.println(
"----client is running-----");
        Socket socket
=new Socket("192.168.1.3",1234);
        OutputStream os
=socket.getOutputStream();
        DataOutputStream dos
=new DataOutputStream(os);
        dos.writeUTF(
"哈哈");
        
        dos.close();
        os.close();
    }

    
}

posted @ 2007-01-14 00:23 xrzp 阅读(1703) | 评论 (2)编辑 收藏
JDBC是一个应用程序编程接口API,它描述了标准的JAVA库如何使用结构化查询语言去连接数据源。
我的一个简单模板:(此处用的是mssql数据库)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcTest {
    
    
public void getConnection() throws SQLException, ClassNotFoundException{
        
        Connection conn
=null;
        Statement stmt
=null;
        ResultSet rs
=null;
        
        String url 
="jdbc:microsoft:sqlserver://localhost:1433:DatabaseName=pubs" ;
        String user
="sa";
        String psw
=null;
        String sql
="select * from authors";
        
        Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver");
        conn
=DriverManager.getConnection(url,user,psw);
        stmt
=conn.createStatement();
        rs
=stmt.executeQuery(sql);
        
        
if (rs.next()){
            System.out.println(
"connection is ok!");
        }

        
else{
            System.out.println(
"connection is fail!");
        }

        
        rs.close();
        stmt.close();
        conn.close();
    }

    
    
public static void main(String[] args) throws Exception {
        JdbcTest test
=new JdbcTest();
        test.getConnection();
    }

}

PS: 因为偷懒,所以直接对有异常的地方采用的是抛出异常,并没捕获。

三大数据库的驱动和URL:
MYSQL:
driver是 org.gjt.mm.mysql.driver
 url是 jdbc:mysql://ip:port:databasename
ORACLE
driver是 oracle.jdbc.driver.oracledriver
 url是 jdbc:oracle:thin@ip:port:sid
MSSQL
driver是 com.microsoft.jdbc.sqlserver.SQLServerDriver
 url是 jdbc:microsoft:sqlserver://ip:port
posted @ 2007-01-12 22:11 xrzp 阅读(528) | 评论 (0)编辑 收藏
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

3与2的区别:3没有实体Bean(底层用的hibernate),也没有HOME工厂(用的DI机制了,貌似spring就跟它混的)。

用EJB的原因:1:负载均衡 2:对象池 3:单线程
posted @ 2007-01-10 00:00 xrzp 阅读(542) | 评论 (0)编辑 收藏
很多时候会遇到这样的情况:数据库里面的日期是date型的,而我们从jsp页面获取的日期是String型的,2者之间会有一个转换的问题。转换的方法如下(2种):
1。
        Date date=new Date();
        DateFormat df 
=DateFormat.getDateInstance();
        
try {
            df.parse(date2);
        }
 catch (ParseException e) {
            e.printStackTrace();
        }
        
2。
        Date date=new Date();
        SimpleDateFormat sdf 
=new SimpleDateFormat("yy-MM-dd");
        
try {
            sdf.parse(date);
        }
 catch (ParseException e) {
            e.printStackTrace();
        }
            

PS:
1。建议在数据库里面将日期也设成String(varchar2)型的,然后在jsp里面有关日期的地方,用js来操作,这样会避免一定的麻烦。
2。一般来说,经过上面的处理后,日期在jsp页面的显示格式是yy-MM-dd 00:00:00。你觉得不好看的话,如果用的是ssh框架,那么可以在相应的hbm.xml中将相应的 <property name="xxxx" type="time">中的type改为type="date"。那么显示的日期格式就只有年月日了。
posted @ 2007-01-05 00:44 xrzp 阅读(657) | 评论 (3)编辑 收藏
仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(4)

随笔分类

随笔档案

好友的blog

搜索

  •  

积分与排名

  • 积分 - 116466
  • 排名 - 500

最新评论

阅读排行榜

评论排行榜