中间件定义: 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算资源和网络通讯。
中间件特点: 满足大量应用的需要 ;
运行于多种硬件和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) |
编辑 收藏