杀毒软件

_______ >>>>>>>

BlogJava 联系 管理
  5 Posts :: 3 Stories :: 2 Comments :: 0 Trackbacks

2006年7月11日 #

今天看了一片关于OOAD和UML的一个PPT文档,感觉写得非常好,其中写得把现实世界中的实际业务流程转换成适合计算机实现,而且是面向对象的系统流程一种实现方法,说的真是言简意赅。让人一下子就对程序设计的架构有了一种豁然开朗的感觉。我想如果能真正掌握UML的话,对今后的基本设计,详细设计和程序开发有很大的好处! 我想这篇文章,主要的精髓有两个,如下所示:

利用两段式OOAD,开发出三段式WINDOWS DNA应用程式。

两段式OOAD物件导向分析和设计(Object-Oriented Analysis & Design);其中最重要的思想是:

找出企业流程àOOAD分析企业流程,从企业流程导出系统流程àOOAD分析系统流程àOOP写元件。

 

三段式Windows DNA应用程序:

ClientUser界面à中间层企业元件à后端资料库



这篇文章如要下载,请点击此处下载。 呵呵。 :)

posted @ 2006-07-11 10:05 趙守広 阅读(359) | 评论 (1)编辑 收藏

2006年7月6日 #

光说不练,等于纸上谈兵。紧接上第二篇文章所讲的,本节将谈论一下servlet在tomcat环境下的配置。例子虽小,但是他确集中反映了问题的实质。好了,开始进入主题。

我用的tomcat是4.1版本。
准备工作:
     1.安装好JDK,解压缩Eclipse,如果eclipse中没有Tomcat包的话,在eclipse安装目录下添加Tomcat包。
     2.设置好eclipse中tomcat的安装目录和相关配置。
  以上不是本节重点,只是稍微说一下,请读者自己配置。下面进入重点:

1.在tomcat的webapps下面新建目录myServlet目录,然后在Eclipse中新建Java工程,并将工作目录指向刚刚新建的目录上。例如:C:\Program Files\Apache Group\Tomcat 4.1\webapps\myServlet

2.配置myServlet工程。
   A.在myServlet工程下面分别新建WEB-INF,src,lib三个目录,并在刚新建的WEB-INF目录下面再新建classes目录。
  
   B.选择myServlet工程,点击右键,选择“属性”,将src做为代码目录,WEB-INF/classes做为编译后的class目录,把servlet.jar放在lib目录下,并将lib包添加到工程中。

  C.在src目录下面新建HelloWorld.java,这个就是我们要的Servlet。代码如下:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws IOException, ServletException {
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out.println("<title>Hello World!</title>");
  out.println("</head>");
  out.println("<body>");
  out.println("<h1>Hello World!</h1>");
  out.println("</body>");
  out.println("</html>");
 }
}

将代码编译,在WEB-INF/classes目录下就会有HelloWorld.class文件生成。

3.下面是配置web.xml文件,在myServlet/WEB-INF目录下新建web.xml文件,配置文件如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>


4.最后一步是将此工程设置为tomcat工程。打开tomcat安装目录下的conf目录下的server.xml文件。
打开此文件,找到<!-- Tomcat Root Context --> 这一行。在这一行的下面添加如下一段文字:
<Context path="/myServlet" reloadable="true" docBase="myServlet" debug="0"/>

保存以上文件,至此已经完成了全部的配置工作。重启Tomcat,在浏览器中输入:http://localhost:8080/myServlet/HelloWorld 即可看到Hello World!


以上。

posted @ 2006-07-06 10:35 趙守広 阅读(956) | 评论 (0)编辑 收藏

2006年6月30日 #

Servlet是对支持Java的服务器的一般扩充。它最常见的用途是扩展Web服务器,提供非常安全的、可移植的、易于使用的CGI替代品。它是一种动态加载的模块,为来自Web服务器的请求提供服务。它完全运行在Java虚拟机上。由于它在服务器端运行,因此它不依赖于浏览器的兼容性。
servlet容器:
负责处理客户请求、把请求传送给servlet并把结果返回给客户。不同程序的容器实际实现可能有所变化,但容器与servlet之间的接口是由servlet API定义好的,这个接口定义了servlet容器在servlet上要调用的方法及传递给servlet的对象类。
servlet的生命周期:
1、servlet容器创建servlet的一个实例
2、容器调用该实例的init()方法
3、如果容器对该servlet有请求,则调用此实例的service()方法
4、容器在销毁本实例前调用它的destroy()方法
5、销毁并标记该实例以供作为垃圾收集
一旦请求了一个servlet,就没有办法阻止容器执行一个完整的生命周期。
容器在servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。

servlet API
servlet接口:
public interface Servlet
它的生命周期由javax.servlet.servlet接口定义。当你在写servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在实现servlet接口时必须实现它的五个方法:
init():
public void init(ServletConfig config) throws ServletException
一旦对servlet实例化后,容器就调用此方法。容器把一个ServletConfig对象传统给此方法,这样servlet的实例就可以把与容器相关的配置数据保存起来供以后使用。如果此方法没有正常结束就会抛出一个ServletException。一旦抛出该异常,servlet就不再执行,而随后对它的调用会导致容器对它重新载入并再次运行此方法。接口规定对任何servlet实例,此方法只能被调用一次,在任何请求传递给servlet之前,此方法可以在不抛出异常的情况下运行完毕。
service():
public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException
只有成功初始化后此方法才能被调用处理用户请求。前一个参数提供访问初始请求数据的方法和字段,后一个提供servlet构造响应的方法。
destroy():
public void destroy()
容器可以在任何时候终止servlet服务。容器调用此方法前必须给service()线程足够时间来结束执行,因此接口规定当service()正在执行时destroy()不被执行。
getServletConfig():
public ServletConfig getServletConfig()
在servlet初始化时,容器传递进来一个ServletConfig对象并保存在servlet实例中,该对象允许访问两项内容:初始化参数和ServletContext对象,前者通常由容器在文件中指定,允许在运行时向sevrlet传递有关调度信息,后者为servlet提供有关容器的信息。此方法可以让servlet在任何时候获得该对象及配置信息。
getServletInfo():
public String getServletInfo()
此方法返回一个String对象,该对象包含servlet的信息,例如开发者、创建日期、描述信息等。该方法也可用于容器。

GenericServlet类
Public abstract class GenericServlet implants Servlet,ServletConfig,Serializable
此类提供了servlet接口的基本实现部分,其service()方法被申明为abstract,因此需要被派生。init(ServletConfig conf)方法把servletConfig对象存储在一个private transient(私有临时)实例变量里,getServletConfig()方法返回指向本对象的指针,如果你重载此方法,将不能使用getServletConfig来获得ServletConfig对象,如果确实想重载,记住要包含对super.config的调用。2.1版的API提供一个重载的没有参数的init()方法。现在在init(ServletConfig)方法结束时有一个对init()的调用,尽管目前它是空的。2.1版API里面,此类实现了ServletConfig接口,这使得开发者不用获得ServletConfig对象情况下直接调用ServletConfig的方法,这些方法是:getInitParameter(),getInitParameterNames(),getServletContext。此类还包含两个写日志的方法,它们实际上调用的是ServletContext上的对应方法。log(String msg)方法将servlet的名称和msg参数写到容器的日志中,log(String msg,Throwable cause)除了包含servlet外还包含一个异常。

HttpServlet类
该类扩展了GenericServlet类并对servlet接口提供了与HTTP更相关的实现。
service():
protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
该方法作为HTTP请求的分发器,这个方法在任何时候都不能被重载。当请求到来时,service()方法决定请求的类型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把请求分发给相应的处理方法(doGet(),doPost(),doHead(),doOptions(),doDelete(),doPut(),doTrace())每个do方法具有和第一个service()相同的形式。为了响应特定类型的HTTP请求,我们必须重载相应的do方法。如果servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。
getLatModified():
protected long getLastModified(HttpServletRequest req)
该方法返回以毫秒为单位的的自GMT时间1970年1月1日0时0分0秒依赖的最近一次修改servlet的时间,缺省是返回一个负数表示时间未知。当处理GET请求时,调用此方法可以知道servlet的最近修改时间,服务器就可决定是否把结果从缓存中去掉。

HttpServletRequest接口
public interface HttpServletRequest extends ServletRequest
所有实现此接口的对象(例如从servlet容器传递的HTTP请求对象)都能让servlet通过自己的方法访问所有请求的数据。下面是一些用来获取表单数据的基本方法。
getParameter()
public String getParameter(String key)
此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回null。
getParameterValues():
public String[] getParameterValues(String key)
如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回null。
GetParameterNames():
Public Enumeration getParameterNames()
此方法返回一个Enumeration对象,包含对应请求的所有参数名字列表。
HttpServletResponse接口
public interface HttpServletResponse extends servletResponse
servlet容器提供一个实现该接口的对象并通过service()方法将它传递给servlet。通过此对象及其方法,servlet可以修改响应头并返回结果。
setContentType():
public void setContentType(String type)
在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML是就是”text/html”类型。
getWriter():
public PrintWriter getWriter()throws IOException
此方法将返回PrintWriter对象,把servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的UniCode编码字符转换成正确的编码以使客户端能够阅读。
getOutputStream():
public ServletOutputStream getOutputStream() throws IOException
此方法返回ServletOutputStream对象,它是java.io.OutputStream的一个子类。此对象向客户发送二进制数据。
setHeader():
public void setHeader(String name,String value)
此方法用来设置送回给客户的HTTP响应头。有一些快捷的方法用来改变某些常用的响应头,但有时也需要直接调用此方法。
编译条件
需要从http://java.sun.com/products/servlet/ 获得一份JSDK的拷贝,并把servlet.jar移动到JDK安装目录下的\jre\lib\ext目录下。如果是JDK1.1,则移动到\lib下,并在CLASSPATH中加入servlet.jar的绝对路径。
运行条件
需要Apache Jserv,Jrun Servlet Exec,Java Web Server,Weblogic,WebSphere,Tomcat,Resin等servlet服务器端程序。
简单范例

				
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)    throws IOException, ServletException 
  {     
  response.setContentType("text/html");     
   PrintWriter out = response.getWriter();
       out.println("<html>");     
   out.println("<body>");       
out.println("<head>");       
out.println("<title>Hello World!</title>");   
    out.println("</head>");   
     out.println("<body>");   
    out.println("<h1>Hello World!</h1>"); 
      out.println("</body>");   
     out.println("</html>");    }}


servlet的性能和效率
一个servlet仅被初始化一次而执行多次,因此极小的低效性也会随着时间的增加而产生很很大的影响。在代码中需要考虑String对象的使用,如果产生HTML响应需要用到很多字符串时,不应该为每一个字符串生成一个String对象,因为这会产生大量的String和StringBuffer对象,造成大量的对象构造消耗和垃圾收集负担,解决的办法是一行一行的把所有需要写入的直接写入PrintWriter中,或者创建一个StringBuffer对象,并使用append()方法将文本加入。
及时回送
有时,程序需要花费很长时间执行,在这种情况下应该回送给客户端一些信息,而不是长时间显示白屏,这可以在执行到一定程度就回送一些东西,可以使用PrintWriter的flush()方法强制将现有的内容回送给浏览器。

Servlet会话
由于Web服务器使用的协议HTTP是一种无状态的协议,因此要维护单个客户机一系列请求的当前状态就需要使用其它的附加手段,在以前,一般的方法是使用:
l 隐藏的表格字段:在浏览器中,这种类型的字段是不可见的,然而,它在请求中被传送,服务器端程序可以读取它的值。它的优点是实现容易,且大多浏览器都支持;缺点是字段必须按照特定的顺序建立,客户端可以通过查看源代码得到其值,在浏览器中单击“后退”按钮会丢失加到当前页中的附加字段,同时也限制了用户动态的生成文档。
l Cookie:是一些关键的数据片断,由服务器建立并由客户机的浏览器存放。浏览器维护一个它自己的Cookie表,这使得它可以作为一种会话跟踪的解决方案。使用Cookie的好处是它比在URL或表单中储存数据更直观。它的缺点是它可以用于在比一次短会话更长时间内跟踪用户,甚至可以用来跟踪某个用户向站点发送的每一个请求,因此有人担心自己的隐私问题而关闭了Cookie,一些老的浏览器也不支持cookie。Servlet API提供一个Cookie类支持cookie,使用HttpServletResponse.addCookie()和HttpServletResponse.getCookies()方法添加和读取cookie。
l URL重写:修改请求的url,使之包含会话ID。这种方法的缺点是:对于大量的数据,URL会变得很长而失去控制;在某些环境下,URL的字符串长度有一定的限制;数据保密问题,你可能不想让旁边的人或者可以使用同一个计算机的看到你的会话数据。Servlet提供HttpServletRequest类可以获得参数。
Servlet API有自己内置的会话跟踪支持,使用HttpSession对象既可。它的setAttribute()方法绑定一对名字/值数据,把它存到当前会话中,如果会话中已经存在该名字责替换它,语法为:public void setAttribute(String name,Object value)。getAttribute()方法读取存储在会话中的对象,语法为:public Object getAttribute(String name)。getAttributeNames()方法返回存储在会话中的所有名字,语法为:public String[] getAttributeNames()。最后一个方法是removeAttribute()方法,它从会话中删除指定的信息,语法为:public void removeAttribute(String name)。HttpSession对象可以使用HttpServletRequest对象request的getSession(true)方法获得。参数为true意味着如果不存在该对象则创建一个。


以上是关于Servlet的一些概念,在Tomcat的安装文件中有servlet的例子,也可以能运行,但是自己想配置一个servlet的例子海没有成功。 所以下次想找一篇关于如何配置的servlet的例子。当然是在Eclipse+tomcat+JDk1.4下。完工·
posted @ 2006-06-30 14:32 趙守広 阅读(557) | 评论 (0)编辑 收藏

2006年6月23日 #

   今后一段时间,主要是想研究一下JavaWebFrameWork的技术。其中主要是研究:MVC模型,Struts,WebWork等框架。在本文的最后列出技术部列出的技术点。 做为学习这些知识的前提,首先是学习JSP和Servlet技术。


一.什么是JSP?

     Jsp页面是由HTML代码和嵌入其中的JAVA代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。 Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Sevrlet和Jsp的配合才能完成。 Jsp具备了Java技术的简单易用和完全面向对象、具有平台无关性且安全可靠、主要面向Internet的所有特点。
 
   Jsp技术的强项:
   1.一次编写,到处运行。在这一点上Java比Php更出色,除了系统之外,代码不用做任何改动。
   2.系统的多平台支持。
   3.强大的可收缩性。从只有一个小的Jar文件就可以运行Servlet/jsp,到多台服务器进行集群和负载均衡,到多台Application进行事物处理、消息处理,一台服务器到多台服务器,Java显示了一个巨大的生命力。
   4.多样化和功能强大的开发工具支持。比较优秀的商业软件如:JBuilder(当然可以搞到破解版的),优秀的开源软件Eclipse(我们公司很多项目都是用的是Eclipse)。

  JSp技术的弱项:
  1.与ASP一样,java的一些优势正是它的致命的问题所在。正是由于跨平台的功能,为了极度的收缩能力,所以极大的增加了产品的复杂性。
  2.Java的运行速度是用class长驻内存来完成的,所以它在一些情况下所是用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面来说,它还需要硬盘空间来存储一系列的.java文件和.calss文件,以及对应的版本文件。

二. 为什么是用JSP?
 
   JSP技术是由Servlet技术发展起来的,自从有了JSp后,在Java服务器端编程中普遍采用的就是JSp,而不是Servlet。因为JSP在编写表示页面时远远比servlet简单,而且不需要手工编译(由servlet容器自动编译),目前Servlet主要是做试图控制器,处理后台应用等。由于jsp构建在Servlet上,所以它有servlet所有的强大功能。


以上。敬请关注下一篇文章--JavaWebFrameWork研究系列-Servlet。 谢谢!  :)



附录:

JavaWebFrameWork研究对象

4.1 技术点
4.1.1 表现层分离
MVC
Action Map
模仿桌面系统(控件事件驱动模式)
视图模版方式
ADO数据绑定
4.1.2 数据访问层等于Web层间关系
4.1.3 数据校验
4.2 技术构建
4.2.1 .NET
ASP.NET
4.2.2 Java
struts
websphere
weblogic
webwork
JSF
一些构建流行的组合如:struts + spring + hiberanet

posted @ 2006-06-23 14:46 趙守広 阅读(261) | 评论 (0)编辑 收藏

我的Blog申请成功。 自己顶一个!!
posted @ 2006-06-23 13:56 趙守広 阅读(299) | 评论 (1)编辑 收藏

仅列出标题