??xml version="1.0" encoding="utf-8" standalone="yes"?>
java中当前日期的获取Ҏ
旧方法(已不常用Q:
int year = 0;
int month = 0;
int day = 0;
java.util.Date now = new java.util.Date();
year = now.getYear() + 1900;
month = now.getMonth() + 1;
day = now.getDate();
新方法:
SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-mm-dd?;
Calendar cal_today = Calendar.getInstance();
int m_day = cal_today.get(cal_today.DAY_OF_MONTH);
int m_month = cal_today.get(cal_today.MONTH) + 1;
int m_hour = cal_today.get(cal_today.HOUR_OF_DAY);
int m_minute = cal_today.get(cal_today.MINUTE);
String d = formatter.format(cal_today.getTime());
我采用前一U方法实C按日期生成文件夹.
2
jsp传给mysql当前pȝ旉的方?/P>
insert into youDB(date) values(NOW())
不过q样只能获得当前日期
3
判断要徏立的文gҎ否存?如果不则新徏立一个文件夹
int year,mm,dd;
String month,day;
Date d1=new Date();
year=d1.getYear()+1900;
mm=d1.getMonth()+1;
if (mm<10) month="0"+mm;
else month=""+mm;
dd=d1.getDate();
if (dd<10) day="0"+dd;
else day=""+dd;
String filepath="d:\\upload"+"\\"+year+month+day+"\\";
if(!new File(filepath).isDirectory())
new File(filepath).mkdirs();
d我毕业设计时候做的一个项目是毕业设计理pȝ。当时老师l我们的要求是用Jsp ?Javabean来实现。我主要负责目建模和Javabean部分Q后来负责数据库的同学被SARS困在家不能返校,所以数据库部分也由我来完成了。当时对java的知识是非常贫乏的,只有单的语法基础Q连jsp?javabean都是W一ơ听到过。不知道从哪里开始,于是qI老师l的一个非常简单的演示目Q首先觉得javabean是个比较单的东西Q于是就先开始分析用户需求?/P>
需求怎么来描q呢Q由于学校教育的局限,加上自己研究了很长时间高敎ͼ政治Q英语(q什么用大家都明白吧Q,造成了知识的严重匮乏。我׃参加毕业设计人员Z心,建立他们的需求列表。但是这L需求描q是非常片面的,几乎都是静态的需求,而且很难设计几个用户的交互过E,和某些状态的改变。而且q种需求是否有真正W合需要是个问题,所以我立刻和同学一赯计web界面Q目的很单,因ؓ用户的需求都是通过界面来实现的Q对界面的设计能늛最l提交用L功能Q而且q能发掘很多非用L需求。这h在实现这些功能的时候会有数。在一q后当我仔细看过用例分析Quml后感觉是如获臛_。心头的l全部打开?/P>
建模该怎么建?当时真是什么概念都没有Q虽然知道umlQ但是仅仅知道皮毛。于是我很单的从对象的角度考虑问题Q首先找毕业设计理pȝ中涉及的人员Q这个是很明显找出来的,涉及到学生,教师Q管理员Q进一步提取出目对象Q各个h员之间通讯的消息对象,毕业设计文档对象Q等{。接下来设计数据库表Q由于学校教数据库的时候只有讲qCER囑ֈ关系模式的{化,而根本没有讲ODL到关pL式的转化Q现在看来,ODL应该更好Q对理解O/R Mapping有更多的帮助。)于是qER图,建立各种表,讑֮主键Q外键,{等?/P>
我遇到的首要问题是学生Q教师,理员该怎么办,每一个对象徏一个表Q似乎也没有什么问题。但是在建立消息对象的时候就有问题了Q因为消息是要在学生Q教师,理员Q意两者都能传送的Q我建消息表的时候是q样设计的:一个消息的内容Q消息的发送hQ消息的接收人(消息内容和发送h一个表Qؓ解决冗余接收人单独一个表Q,q样q个消息有很大的灵zȝ度了Q消息发送h可以是三U角色间的随便一U,更进一步,q样的消息可以是pȝ生成的消息,而且接收者可以是随便哪种角色。但随之带来的问题是Q消息发送h、接收者该d照谁?昄填一个发送者、接收者的id是不够的Q必连发送者的角色也填上。第二种ҎQ每个角色有一个收到消息的列表Q让它去参照单一的消息表idQ这样也能解决问题。第三种ҎQ把学生Q教师,理员合q成一个用戯Q那么消息发送hQ接收h只要单的参照一个通用的用户id了。这U合q子cȝҎ会造成教师Q管理员的行有些null|但是考虑到教师和理员的数目q远于学生的数目,所以这L冗余是忽略不计的。最后我q是选择了最后一U方法。不q我q是觉的是对象模型向关系模型的一U妥协?/P>
接着我着手设计javabeanQ访问数据库用的是单U的JDBC。因为我对前台界面要讉K一个对象的哪些属性是不了解的Q事实上也不该了解。所以我只能从数据库取出一个完整的对象Q让他来军_I竟要访问哪些属性。而且对对象的修改也是q样Q前C改好新的对象的属性,我来q行更数据库的同步。于是我的javabean出Cq样的方法:load()?store()?update()、delete()q样的对象和数据库表同步的方法。这在一q后的今天看来,实际上我已经自己做了一个O/R Mapping的工作了。当时自己做q样的O/R Mapping是相当痛苦的事情Q而且用的Ҏ也是最_浅的,是整个对象更数据库同步Q即使没有修改的属性也同步Q所以要同步的话Q必要先把对象从数据库取出来,修改后再写回。而且要求所有属性必Lnullable的non-primitivecd。第二个问题Q对表中的外键怎么反应到bean中?比如每个学生有一个辅导教师,在数据库中很明显学生表需要一个外键参照教师idQ但是在StudentBean中教师属性是写Teacher对象呢,q是Teacher id值呢Q按照面向对象,很明昑ֺ该Teacher对象Q但是我p得这是个多么heavy的事情呀Q再x教师情况Q一个教师有一个Collection的Student对象是多么“重”!意味着load一个教师要load所有的students。于是我采用的方法是Q还是用对象Q比如teacher 的学生属性,q是一个collection Student对象Q同时提供了一个loadStudents()的方法,load teacher对象的时候ƈ不load 学生属性,只有bean的用h式调用loadStudents()的时候才会加载一lstudent对象Q这在现在看来似乎我自觉不自觉的实现了lazy loadingQ?/P>
现在审视当时~写的javabeanQ犯的最大最大的错误是把data access object和business workflow混在一起了。比如把教师所有要调用的功能都攑֜教师对象里面Q而有些功能有时是要涉及几个bean的。现在看了简直是惨不忍睹的设计,虽然当时也困惑过Q但是却没有动动脑筋来解冻I我现在看了session bean 的思\Ӟ觉得是那么的舒畅、自然?/P>
当时困惑的还有关于jsp的处理,jsp只是负责昄的,但是Z么一个jsp提交的数据要l另外一个jspd理呢Q这是很不舒畅的做法Q于是有了最初的servlet做控制器的想法,但是当时不了研I么多Q也没有最l实玎ͼ毕竟前台不是我负责的。当我现在知道了StructsQMVC Model2的时候,我以前的困惑都随之解冟뀂又一ơ感觉非常舒畅?/P>
以上是我一个新手的W一个项目的一些情况,是在非常闭塞的环境里面做的,上网都是电话卡拨PҎ没有接触C技术,但是正是q种环境下积累的无数困惑Q我遇到EJB、Hibernate、Structs的时候如饮甘Ԍq速的吸收了他们的营养。否则我惛_习这些技术无疑是很耗时间的Q因为根本没有更q种技术生共鸣,不知道他们搞那么多框框究竟想q什么,而我产生了一U共鸣,他们q些框框Q正是开我心头疑惑的锁?/P>
又回到开头孔子的话,事实上我在做目中,一直都是按自己的思考方式在“思”而没有去“学”,所以常常感到疲倦而无所得,即“殆”。但是如果不实际自己d手做Q而光光学j2eeQ必然会很迷惑,即“罔”。我感觉先有困惑再有解决Q是掌握技术的十分有效的而且巩固的方法,而且很有创造性,是属于归U的思考方式。所以碰到问题,首先需要想x常理该怎么去解冻I再去L别h怎么解决的,q样自己提高会十分迅速?/P>
现在我正在用EJB、Structs来重写那个项目。虽然我Ҏ个需求已l相当清楚,毕竟有了W一个项目作为原型,但是我还是试图用比较规范的Ҏ来设计。首先分析了很多use caseQƈ且用Rational的RequisitePro来跟t需求的变化。接着又用Rose对use caseMuse case diagram。对关键对象交互q程M sequence diagramQ对某些对象的状态画了state diagram。最后很自然的导Z最重要的class diagram?/P>
我现在最大的困惑在Entity Bean上面Q徏模的时候很自然会有一个User对象QStudent, Teacher, Manager 对象l承自这个User对象。那数据库表怎么设计呢?W一U,三个对象三个表,对应StudentBean TeacherBean ManagerBean三个EntityBean。第二种Q三个对象一个表Q只有一个UserBean。第三种Q把User单独一个对象,那么是四个对象四个表,q样一个子对象Q要映射两张表EntityBean不行吧?BR>暂时不管I竟用什么设计,来考察一下文档对像DocBeanQ我们主要看看它的cmr部分Q一个cmr是author 属性,它应该是三种角色对象中的一U,问题来了Q如果三个对象三个表Q那么我q里的cmr怎么写?
public abstract StudentLocal getAuthor(); ?
public abstract TeacherLocal getAuthor(); ?
public abstract ManagerLocal getAuthor(); ?
考察W二U,三个对象一个表Q只有一个UserBean。那q个是相当简单的只需?BR>public abstract UserLocal getAuthor();
那最后只有第二种方式才能解决问题Q就是只有一个User对象Q于是我Z使用EntityBean不得不对我的模型q行修改Q把原来清晰的三个对象揉合到一P虽然说以后某个student变成了teacher 或者manager可以很方便的升Q但是这U情况在我这个例子里面是很少有的Q而且数据库这U合q子cȝҎlteacherQmanager形成了很多的null|虽然q是忽略不计的,但是M是优雅的做法Q最关键的是我的对象模型又一ơ向关系模型妥协了?/P>
CMR的另外一个问题是Q要CMR必须把所有相关的Bean放一个包里面Q在一个xml文g里面配置Q我的项目里面的entity bean都是要更user有关pȝQ那我都需要把q些bean打成一个包Q用一个xml描述Q我的还是小目Q如果一个项目有100个entity beanQ这些entity bean都是怺兌的,那我要把q?00个entity bean攑֜打成一个包Q用一个xml配置Q那q个xml文g该有多长Q一个小的错误全部完蛋?/P>
看来Entity Bean实如很多h说的那样不是十分灉|Q我也开始們于用hibernate来做持久化了Q但是我需要有_的灵zL,我想l承和多态的支持q是很重要的Q这h能真正是“object-oriented domain models”方式,而不是以数据库表Z心的方式Q引用Hibernate的一句话“Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier?/P>
我对AOP也是十分xQ因为它实在是太Ȁ动h心的概念了,有了AOP那么我们q要容器q什么,容器的功能完全可以通过AOP来实玎ͼ像Spring框架Q除了没有分布式外几乎都能支持吧。而jboss4.0也已l通过AOP实现了。考察我的目Q我发现有一个这L需求需要满I是Q在执行某些business logic之前必须要检对q个Ҏ的调用是否超q期限了Q比如学生去选择研究NQ如果选择q了׃能再ơ选择Q虽然这个方法可以由前台很简单的解决Q但是我觉得在业务逻辑层防止这U行为的发生是业务完整性的一个部分。而通过AOPQ把q样一个很多方法都要调用的公共功能作ؓ一个aspect是很好的。我的问题是在容器中q行的EJB能够用AOP吗?在Jboss4.0里面各种EJB都是通过AOP方式来提供服务的Q似乎我自己多加一层业务层面的服务应该是可行的Q用jboss aopQ,但是q样的EJB攑֜别的容器里面q行会怎么P会媄响到容器对EJB的干预吗Q请各位前辈指点?/P>