andy_taoke
大家一起来学JAVA
posts - 9,comments - 3,trackbacks - 0
中间件定义:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算资源和网络通讯。
中间件特点:
满足大量应用的需要 ;
运行于多种硬件和OS平台 ;
支持分布式计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能 ;
支持标准的协议 ;
支持标准的接口。
中间件分类:
分为数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等。
posted @ 2006-03-23 23:23 Fusion KISS 阅读(368) | 评论 (0)编辑 收藏
上次看到处理HEAD请求,下面是关于Web应用程序的配置问题。

Web应用程序是Servlet、JSP、HTML文档、图片、模版以及其他可在支持Servlet的Web服务器上部署的所有Web资源的一个集合。
(这句话好长,总之就是你能在网上看到的东西,或者一些产生动态Web页的程序)。

我们安装了Tomcat就会知道,在webapps文件夹下面有很多的子文件夹,一个文件夹对应一个应用程序。他们是一堆的JSP程序以及配置文件。另外我们可以给他打包,成为一个存档文件,扩展名为:war。

WEB-INF目录
每个Web Apps,都有一个这样的目录,有一个web.xml文件。

现在对xml作一点学习:
XML是eXtensible Markup Language
他与HTML类似,都是用标签标记它的内容,并用尖括号来结束;
XML和HTML的服务目标是不同的:XML文档中的标签没有定义文字的显示格式,而是解释了文本的意思。它是一个可扩展的标记语言,他可以定制一些新的标签来写你自己需要的文档。

有几个要注意的地方:
1、XML区分大小写(大小写敏感)
2、又开始的标签必须有结束(标签必须是一对)要么就这么写:<servlet/>,用来代替一对的符号
3、嵌套的元素不可以重叠!例如这样写就是非法的<outside><inside></outside></inside>
4、所有数值必须加上单引号或者双引号

配置描述符:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
    <servlet>
        <servlet-name>
            hi
        </servlet-name>
        <servlet-class>
            HelloWorld
        </servlet-class>
    </servlet>   
</web-app>

web-app标签表示这些是用来配置一个web应用程序的,servletname是一个你所写的servlet的名字,class是他的类名,可以写成所属包名+类名的形式,有些IDE可以自动的生成。

servlet映射
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
    <servlet>
        <servlet-name>
            hi
        </servlet-name>
        <servlet-class>
            HelloWorld
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>
            hi
        </servlet-name>
        <url-pattern>
            /hello.html
        </url-patter>       
    </servlet-mapping>
</web-app>
servlet-mapping表示他来标示servlet的映射信息,映射过后我们就可以用自己定义的地址来访问他;
其中有两个子标签,一个是name,另一个是url-pattern。第一个不用说就是servlet里面定义的那个name;
url-pattern指的是上面那个servlet-name所指定的servlet可以在浏览器中用什么样的url访问。

设置有几种:
明确映射,就是一个地址,跟普通的相对路径没有什么区别。
路径前缀映射,/lite/*这样子的url-pattern
就是以/开头,/*结尾,处理所有拥有该前缀的请求。这种映射机制,允许一个servlet来控制一个虚拟目录层次的sevlet请求。
扩展名映像:
*.jsp
可以表示这个servlet用来处理所有的JSP请求。
默认映射,/
如果没有与之相匹配的servlet可以处理该请求,则将这个请求扔给这个servlet,等同于/*,要慎用!
posted @ 2005-12-30 13:33 Fusion KISS 阅读(584) | 评论 (1)编辑 收藏
今天动手实践了一下写Servlet的代码,感觉不错.现在写些东西给大家分享一下:

我们是用Servlet的API处理HTTP请求的,现在我给大家看一段代码,它的作用就是在浏览器里面打出一行字,经典的不能再经典(你想说老土我也不反对)就是,Hello,World
package Chap2;

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
{
    // eclipse非要让我加这句话,要么会有一个警告,我看对运行没有什么影响我就加了,不知道哪位高人知道怎么用这个东西
    private static final long serialVersionUID = 1L;

    // 这个方法可以处理GET的请求
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 设置一个Content-Type首部
        response.setContentType("text/html");
       
        // 这个东西就像你拿到了向客户端浏览器写字的一支笔
        PrintWriter out = response.getWriter();       
        // 现在可以往客户端的浏览器写HTML代码了,想怎么写就怎么写,呵呵
        out.println( "<HTML>" );
        out.println( "<HEAD><TITLE>Hello World</TITLE></HEAD>" );
        out.println( "<BODY>" );
        out.println( "<BIG>Hello World</BIG>" );
        out.println( "</BODY></HTML>" );
    }
}

把这个东西发布到你的服务器下面,你就可以看到一行字:Hello,World.
至于怎么配置服务器,近期我会给大家一份资料,里面详细描述了配置JDK+Tomcat+Eclipse+MyEclipse的方法,这些软件都可以到我的网站上去下载,链接在我的签名里面!

下面我们来点动态的东西,做完了以后,学过JSP的人们会发现,这个...不就是JSP么?
对!JSP就是拿这个东西实现的,就如同Windows API和MFC的关系;相信如果你是个肯钻研的主,早就不愿意学MFC那个把你规定的死死的东西了吧.
第二个例子:
package Chap2;

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 Exp2 extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
       
        String name = request.getParameter( "name" );
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>Hello " + name + ".</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( "Hello, " + name + "." );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
    }
   
    public String getServletInfo()
    {
        return "A servlet that knows the name of the person to whom it's saying hello";
    }
}
这个Servlet可以接受一个name的参数,当然你可以新建一个页面来让用户来提交这个参数.
我给大家一个
<HTML>
    <HEAD>
        <TITLE>Introductions</TITLE>
    </HEAD>
   
    <BODY>
        Exp2
        <FORM METHOD=GET ACTION="servlet/Exp2"> If you don't mind me asking, what is your name?
            <INPUT TYPE=TEXT NAME="name"></P>
            <INPUT TYPE=SUBMIT>
        </FORM>
    </BODY>
</HTML>
纯粹的HTML代码,简单的不能再简单,根据你服务器配置的不同和Servlet存放的地方的不同,你要看你的FORM标签上面那个ACTION属性该怎么填!

Exp2那个Servlet就是接受了一个name的变量,然后叫一下你的名字,问候你下你呵呵.

但是有时候用户会发出一个HEAD请求(客户端只想看到响应的首部时发出的请求),这个东西可能会让你很烦,你心里会说这些人就会给我捣乱,发什么HEAD请求啊!确实这个东西看上去微不足道,也没有doHead()的方法可以使用.任何有子类HttpServlet和实现了doGet方法的servlet都支持HEAD请求.

现在我们看一下处理HEAD请求的工作过程:
HttpServlet的service()方法确定HEAD请求并把它特殊对待。它构建一个修改过的HttpServletResponse对象,并把它和原来的请求一起发给doGet方法(你知道了,我们要在doGet那个东西里面做文章!)。很高兴地告诉你,如果是一个HEAD请求,系统可以为我们自动屏蔽后面的输出,但是如果让我们来做一个判断,你可以提高你的程序性能,也能加深我们对这个Servlet的了解。

我们要在Exp2的doGet()方法中加一句话:
if( request.getMethod().equals( "HEAD" ) ) return;
通过request这个对象我们可以看到客户端的请求类型,如果这个字符串时HEAD,哈哈,干掉他!

但是,即使我们只是处理一个HEAD请求,我们也要设置Content-Type首部。
posted @ 2005-12-30 13:32 Fusion KISS 阅读(415) | 评论 (0)编辑 收藏
HTTP servlet基础
内容:编写和运行一个简单的HTTP servlet
包括如何在一个标准的Web应用程序上预见性servlet及其基于XML的配置描述

HTTP基础
重点:GET POST方法

HTTP是一个简单的、无状态的协议。

在访问一个Web服务的时候(方法就是填入一个URL加以访问),浏览器会发出一个请求,类似于ftp里面的各种命令,这种请求要指定一个HTTP请求的名称、URL、HTTP协议的版本;
例子:GET /intro.html HTTP/1.0
这个命令使用了GET方法向一个名为intro.html的文档提出请求,用的是1.0版本的HTTP协议。

之后,浏览器发送一个选择性的首部信息告知服务器关于请求的附加信息,注意,这些信息不直接和你所要请求的那个URL有关,而是可以对服务器的响应有一点帮助。
例子:
User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)
Accept: image/gif, image/jpeg, text/*, */*
User-Agent说明了客户端软件的信息
Accept说明了客户端愿意接受的media(MIME)类型的数据;

发送了附加信息,客户端发送一个空行给服务器,表示已经完成。

下面该服务器响应了,响应的第一行是用来指服务器所用的HTTP/1.0 200 OK
200-是正常的提示
还有一个我们比较常见的状态码:
404-找不到

发送了状态条后,服务器发送响应首部,用来告诉客户端,服务器使用的软件和响应内容类型的信息。

GET和POST
前面提到过,发送请求的时候有一个叫做HTTP请求的东西(也叫做方法),最最常用的就是GET和POST了.
看名字就知道:
GET:取得信息的方法;说白了就是读取
POST:用来发送信息;就像在版上灌水一个道理

GET方法(用来读数据,地球人都知道了现在),请求中可以加入一些自身信息来更好地描述需求.比如在URL中显式地发送一个信息给一个页面;

POST方法,如果要上传一个东西,你可能要传输一个上M的文件,所以它用不同的技术来向服务器发送信息.一个POST请求把它的不限长度的数据作为HTTP请求体的一步分.通常通过Socket发送出去.传送对用户是不可见的(想象一下,如果你的信用卡号传给银行的时候对用户可见,你的钱恐怕早就没有了.呵呵
posted @ 2005-12-30 13:26 Fusion KISS 阅读(372) | 评论 (0)编辑 收藏
与Java一样,servlet主要设计思想是可移植性。Servlet可用于所有支持Java的平台,以及所有主流服务器。
包含在java.servlet包里面;
想要用servlet弄出一点不同寻常的东西,我们除了servlet代码以外,最重要的是一个servlet runner(servlet容器)。
Tomcat是一个经过Sun认可的按照servlet标准参考实现的一个比较优秀的servlet容器。
现在版本已经出到了5.5.12

servlet是java技术的副产品,所以也具有java的优点(当然,JSP也继承了这些优点)
一提到Java,大家都知道它的可移植性造就了它今天的普及和发达程度。当然,servlet的优点还有很多:可移植性、功能强大(说的跟废话似的)、高效、耐久、安全、简洁、集成化、可扩展性、灵活性…………
posted @ 2005-12-28 12:41 Fusion KISS 阅读(469) | 评论 (0)编辑 收藏