第三阶段
流行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) |
编辑 收藏