2005年8月12日
摘要: 今天看了一天原来他们写的代码,越看越郁闷,主要是没有设计文档,而且里面很多被舍弃的功能,但是代码没有去掉,而且也没有写注释,不知道干什么用的,也许是我太菜了吧?简单分析一下这个模块的代码吧模块名称叫“信息简报 ”,功能包括五个部分:信息接受,信息发送,分类管理,组管理,权限配置。其中用户部分会用到公共模块,日志部分就是直接使用System.out.pring通过JBOSS输出...
阅读全文
2005年8月11日
摘要: 今天老大给了我一个任务,要我一个星期之内看懂一个模块的代码。打开第一个类就遇到了JDBC,数据库还是Oracle,2个都不懂,只好先学习一下JDBC这个东西JDBCTM 是一种用于执行 SQL 语句的 JavaTM API(有意思的是,JDBC 本身是个商标名而不是一个缩写字;然而,JDBC常被认为是代表 “Java ...
阅读全文
2005年8月10日
从今天开始,我准备把GOF的23种设计模式重新学习一下,并且用Java语言全部描述一次。
Abstract Factory(抽象工厂) 对象创建型模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2005年8月9日
今天把Structs和EJB稍微了解了一下。
Structs是apache 组织jakarta 项目的一个子项目,用以改善 web 系统的结构,是一个基于J2EE的Web形式MVC模式实现。Structs是由一组类、Servlet和Taglib组成。Structs有其自己的控制器(Controller),基本组件是ActionServlet中定义的Servlet,由ActionMapping定义的,ActionMapping类表示的是Action对象的名字和位置。当一个请求进入控制器时,它将请求的路径映射到Action的位置,并且将请求传送给Action。Structs另外一个重要部分是标签(TagLib),主要由页面制作人员使用。
EJB(Enterprise JavaBean ) 是设计成运行在服务器上,并由客户机调用的非可视远程对象。可通过多个非可视 JavaBean 构建 EJB。它们有一个部署描述符,其目的与 JavaBean 属性相同:它是以后可由工具读取的 bean 的描述。EJB 还独立于平台,一旦编写好,还可以在任何支持 Java 的平台(包括客户机和服务器)上使用。
![j2ee.png](/images/blogjava_net/niaoren/Java学习历程/j2ee.png)
如果不使用EJB,在EJB服务层实现的业务核心将由普通JavaBeans实现,不能很好的保证负责MVC的JavaBeans和负责业务核心的JavaBeans清晰地分开。
采用EJB,Web完全只是一个MVC模式的实现,关键业务核心是在EJB的服务层实现,这样做的优点是,Web只负责界面相关部分,因为,如果是一个智能客户端,如Swing或J2ME,在不需要修改任何业务核心的情况下能够方便地更换。同样,提供Web Services功能,也只是在 Web层修改,不会涉及EJB方面的修改,同样保证了系统的稳定性,保证了系统升级和未来的扩展性。
EJB容器(如JBoss)已经提供了对象池和缓存机制,所以,没有事务机制的无状态Session Bean的性能肯定要强于普通JavaBeans。EJB容器不但在单机中提供了对象池和缓存,而且可以跨服务器实现动态负载平衡,这些都无需开发者自己开发任何软件代码。
EJB提供的事务机制非常周全,但事务机制带来的缺点是性能的降低,在一般企业应用或数据库系统应用中,EJB不会对你构成很重的包袱。
通过一天的学习,虽然没有写出Structs和EJB的实现代码,但是基本上对这两个东西有了初步的了解
2005年8月8日
为了第一天的上班,提前一个小时起床,准备好了,顺便吃了一个早餐(1年没有吃过早餐了,感觉不错)。左等右等终于等到XX路中巴,一群人拥过去,只上了2个人,剩下的都没有上起,只能等下一辆,晕死,没办法打的吧
![](/Emoticons/hitwall.gif)
。
好不容易提前一分钟赶到公司,~_~开发人员才来2个人(窃笑,我就喜欢这样,原来我老迟到)。办公室的人叫我等,我就等,谁叫我是新来的呢。不知道什么时候有个人搬着一台不知道是什么年代的古董显示器进了开发室,
![](/Emoticons/sad_smile.gif)
不会就是我的电脑吧,虽然我不会JAVA,但是我搞开发也有2年了,苍天啊
![](/Emoticons/hitwall.gif)
。
大概10点左右,被叫进了经理室,递给我一份合同,说要签2年的卖身契。第一反应就是这么久啊,我在原来的公司是一年一年的签。经理稍微解释了一下,想想也是,无所谓了,到时候想跑照样跑。翻翻合同,一条看起来不起眼的条款让我蒙了,星期六居然要上班,我差点就拒绝签了,经理在一边解释说,那个不是上班,只是技术交流,有事情可以请假,
![](/Emoticons/cry_smile.gif)
欲哭无泪啊。
出了经理室,就感觉有被卖身的感觉,总不是滋味。办完相关手续,把我带到一电脑旁边,
![](/Emoticons/QQ/21.gif)
15的显示器,我差点就叫起来了,那人忙解释一下说,这个只是暂时的,新显示器下午就到,汗~~~~,瞧瞧配置先,815EP的板子,C1.1G的CPU,512M的内存,晕死,难道开发Java这么低的配置也成
![](/Emoticons/QQ/02.gif)
?
下午配置了一下开发环境,看到同事都在用一个WT P的插件(一个创建、部署和调试 Geronimo 应用程序的很基本的开发环境),试试感觉还不错,但是总是出现项目重新部署不上去的问题?问一同事也解决不了,看来还得用Lomboz了。剩下的时间看了一下JavaBean和Session编程
JavaBean其实就是一些类,把业务逻辑从JSP中分离出来。在JSP中使用一个标签引用JavaBean,先通过<%@ page import="mypack.BookDB"%>导入JavaBean类,然后使用标签引用(<jsp:useBean id="bookDB" scope="application" class="mypack.BookDB" />),这个东西就相当于BookDB bookDB = new BookDB,实例化一个类而已,在JSP可以直接使用这个类了(bookDB.Method();),后面的参数就更简单了,scope是范围,包括:page, request, session, application,默认属性值是page。
Session相对来说要熟悉一些,是用来跟踪用户状态的一个机制。在Servlet API中定义了javax.servlet.http.HttpSession接口。当一个Session开始时,Servlet容器将创建一个HttpSession对象。默认情况下,JSP网页都是支持Session的,也可以通过显示声明支持Session:(<%@ page session="true"%>),最大的问题就是当客户端禁止了Cookie就麻烦一些。需要重写客户请求的URL,把Session ID添加到URL信息中。HttpServletResponse接口提供了重写URL的方法<a href="<%=response.encodeURL("next.jsp")%>">。Session的持久化我原来在.Net中没有发现有这个功能(可能是我菜吧^_^)。需要配置FileStore、JDBCStore,现在暂时还用不上,以后在研究吧。
2005年8月7日
终于看到JSP了,进入实际应用阶段,我原来以为JSP跟ASP或者ASP.NET差不多,今天了解了一下,感觉不是那么回事。JSP是Java Server Page的缩写,是Servlet的扩展。书上解释说:“在传统的网页HTML文件中加入Java程序片断和JSP标签,就构成了JSP网页”
![jsp.JPG](/images/blogjava_net/niaoren/Java学习历程/jsp.JPG)
看起来很简单,但是JSP语法都没有看完就遇到问题了:
<% if(false){ %>
She is a girl
<% }else{ %>
He is a boy.
<% } %>
结果是He is a boy, 这里有点不能够理解,不知道JSP容器是怎么解释的,暂时把“He is a boy”当作一个字符串处理
JSP语法:
<%@ %>用来设置和整个JSP网页相关的属性,常用的由Page, include, taglib
<%! %>用于声明JSP代表的Servlet类的成员变量和方法
<% %>用于直接嵌入任何有效的Java语言代码
<%= %>用于显示表达式的值,int或者float类型的值都自动转换成字符串加以显示
<%! int hitcount=1; %> 和<% int count=1; %>的区别?是类成员变量和局部变量的区别。在<%! %>声明中的都是类成员变量。
隐含对象:
使用这些对象的引用变量时不需要做任何变量声明
request javax.servlet.HttpServletRequest
reponse javax.servlet.HttpServletResponse
pageContext javax.servlet.jsp.PageCntext
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.ServletConfig
page java.lang.Object (相当于Java中的this关键字)
session javax.servlet.http.HttpSession
exception java.lang.Exception
JSP与Cookie:只要客户端不禁止,使用很简单
Cokie[] cookies = request.getCookies();
cookies[0].getName;
cookies[0].getValue();
cookies[0].setMaxAge(30);
cookies[0].getMaxAge();
response.addCookie(new Cookie("cookieName", "cookieValue"));
JSP转发请求:
<jsp:forward page="重新定向的文件" />
如果在a.jsp中,a.jsp请求转发给b.jsp, a.jsp所有的数据输出都无效;此外a.jsp和a.jsp共享同一个HttpRequest对象,因此b.jsp可以通过request.getParameter("name")方法读取请求参数
JSP异常处理:
JSP异常处理是针对每个页面的,不知道能不能在Web.xml中配置,让所有页面的异常处理指向通一个页面(应该有,只是我不知道而已^_^),每个页面都去设置errorpage感觉很麻烦。
<%@ page errorPage="errorpage.jsp" %>
<%@ page isErrorPage="true" %>默认为true
在处理异常的网页中可以直接访问exception隐含对象:<%=exception.getMessage() %> <% exception.printStackTrace(new PrintWriter(out));%>在异常处理页面中也是共享一个HttpRequest对象,应此也可以使用<%=request.getParameter("name");%>
今天就学这么一点点,玩会儿wow先^_^
昨天了解了一下Servlet技术,感觉就是一套服务器组件,跟ASP.Net的服务器控件类似,只要继承HttpServlet抽象类就可以了。
![Servlet.JPG](/images/blogjava_net/niaoren/Java学习历程/Servlet.JPG)
Http的请求方式包括Delete,Get,Options,Post,Put和Trace,在HttpServlet类中分别提供了相应的方法,它们是doDelete(), doGet(),doOptions(),doPost(),doPut()和doTrace()。
Servlet容器是否在启动时自动装载Servlet,这是由在Web.xml中为Servlet设置的<load-on-startup>属性决定的(慢慢感觉到了java的配置多起来了)。
在家休息了一个月,2年的.Net开发要告一段落了,重新找了一家开发Java的公司,在新公司面试的时候,借助这2年的开发经验,瞎吹了一顿(我对JAVA一窍不通,没有写过一行JAVA代码),总算通过了,3天以后上班。
今天早上一起来第一件事情就是上书店买Java书,到书店一看才傻眼了,昨天到网上查到的一些书,这里根本就没有(暗自骂了几句,我怎么就选择这个鸟不拉屎的地方),好不容易找了一本《Tomcat与JavaWeb开发技术详解》,而且是最后一本,老天总算给了点面子,剩下就随便找了几本垃圾,反正也只是做入门用。
不知道不觉就浪费了一个上午。回家先浏览了买回来的书,前面全是TMD的教你怎么安装JDK,Tomcat,Eclipse。索性花一个下午把Java开发环境搭起来再说。一口气把Jdk,Eclipse,Tomcat,MySql,Ant全部下载下来(想想还是VS2003方便),下载是小事,配置就费功夫了,刚开始配置Jdk,Tomcat,MySql还顺利,Eclipse就麻烦了,还好可以编译,但是不知道怎么写Jsp,到网上一查才知道要下载一个Lomboz,按照版本下载了,折腾了一个多小时都没有搞定,还好找到一个EclipseColor的插件,可以点亮JSP语法,将就用一下吧,那个鸟Lomboz等上班问问同事。
一切搞定,写个HelloWorld先。
package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
![](/Images/OutliningIndicators/None.gif)
public class HelloServlet extends HttpServlet // 第一步: 扩展 HttpServlet 抽象类。
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
//第二步:覆盖doGet()方法
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException ,ServletException
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//第三步:获取HTTP 请求中的参数信息
String clientName=request.getParameter("clientName");
if(clientName!=null)
clientName=new String(clientName.getBytes("ISO-8859-1"),"GB2312");
else
clientName="我的朋友";
// 第四步:生成 HTTP 响应结果。
![](/Images/OutliningIndicators/InBlock.gif)
PrintWriter out;
String title="HelloServlet";
String heading1="This is output from HelloServlet by doGet:";
// set content type.
response.setContentType("text/html;charset=GB2312");
// write html page.
out = response.getWriter();
out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
out.print("</HEAD><BODY>");
out.print(heading1);
out.println("<h1><P> "+clientName+" : 您好</h1>");
out.print("</BODY></HTML>");
//close out.
out.close();
![](/Images/OutliningIndicators/InBlock.gif)
}
} 编译运行。。。,没反应(习惯ASP.Net),Copy->配置->启动TomCat,
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>mypack.HelloServlet</servlet-class>
</servlet>
![](/Images/OutliningIndicators/None.gif)
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
<servlet>
<servlet-name>CounterServlet</servlet-name>
<servlet-class>mypack.CounterServlet</servlet-class>
</servlet>
![](/Images/OutliningIndicators/None.gif)
<servlet-mapping>
<servlet-name>CounterServlet</servlet-name>
<url-pattern>/counter</url-pattern>
</servlet-mapping> 总算完了,问题又来了,“你好”变成了“??”,早就听说Jsp的中文问题了,改成HelloWorld正常,翻了一下书,没有找到解决办法,算了,以后再解决^_^