一, 什么是servlet?
servlet是符合servlet api规范的,在web服务器上装载和执行的能够接受客户请求(通过web服务器),执行任务并返回结果的java类,地位像客户端的applet。因为它本身是一个java类,所以它拥有java的所有优点,还有自己的一些优点:与其它资源交互;安全性;与协议无关。
二, 三角关系
规范制定者,容器提供者,组件开发者。
servlet api的正式称呼是jsr(java请求规范),它是jcp(java社团处理过程)的一部分。在jsr公布之前,他会提供示例代码,这不仅用于检验设计,而且为容器提供商(servlet引擎)和开发人员提供示例。这个称做参考实现(ri)。apache tomcat就是jsr的ri,他是apache组织的一部分,apache组织的宪章是“提供基于java平台的优质服务器解决方案,java平台是以开放和合作方式开发的。”
“ 这里感觉很想ejb中的模式,sun制定规范,ibm,bea根据这些规范编写容器,而我们这些应用程序员也根据这些规范编写组件,由于容器与组件实现了同样的接口,或者说遵循同样的规范,就可以使在一个容器上编写的组件在别的实现规范的容器上很好的运行。而在这里呢?sun公司提供了(或者是sun的一些工作人员)提供了servlet api,它们是一些接口,基类以及一些具体的要求规范,然后各个容器厂商根据给反实现接口,编写容器;而我们应用程序员也根据这些规范和容器厂商提供的基类来编写组件,就是servlet或者说类。”
三, tomcat目录问题
bin 启动和停止tomcat的脚本。
common 所有tomcat服务器公用的类和jar文件。
confg 一般的配置信息,例如服务器定义和用户信息。
webapps tomcat开始时自动装载的web应用程序。
logs 由tomcat生成的运行时日志文件。
works 由web应用程序使用的临时工作目录。
注意:logs 和works是第一次启动tomcat时创建的。
四, servlet api
一>,接口名称:javax.servlet.servlet;
实现于:javax.servlet.genericservlet;
1,init();又servlet容器调用。
2,public javax.servlet.servletconfig getservletconfig();
得到servletconfig对象。
3,service();由servlet容器调用,可以让servlet对请求进行响应。
4,public string getservletinfo();
返回有关servlet的信息,如作者,版本,版权等。
5,destroy();让servlet有机会清除所占用的所有资源(内存)。
二>,servletconfig
接口名称:javax.servlet.servletconfig;
由servlet容器建立的servlet配置对象,用于初始化期间向servlet传递信息。
1, public string getservletname();
2, public servletcontext getservletcontext();
返回对执行servlet的servletcontext的引用。
3, pulic enumeration getinitparameternames();
返回servlet初始化参数名称列表。
4, public string getinitparameter(string mystring);
返回具体参数名称的值。
例如在web.xml中我们定义了这样一端:
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>lsmx.myservlet </servlet-class>
<init-param>
<param-name>myparamname</param-name>
<param-value>myparamvalue</param-value>
</init-param>
</servlet>
public class myservlet extends httpservlet {
//略
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
servletconfig config = this.getservletconfig();
system.out.println(config.getservletname());
enumeration enum = config.getinitparameternames();
while (enum.hasmoreelements()) {
string myparametername = (string) enum.nextelement();
string myparametervalue = config.getinitparameter(myparametername);
system.out.println(myparametername);
system.out.println(myparametervalue);
}
//略
}
则会在控制台打印出:
myservlet(<servlet-name>myservlet</servlet-name>),myparamname,myparamvalue
三>,genericservlet
类名称:javax.servlet.genericservlet;
超类:java.lang.object;
直接子类:java.servlet.http.httpsrvlet;
实现于:javax.servlet.servlet;
javax.servlet.servletconfig;
java.io.serializable;
定义普通的,与协议无关的servlet。它具备servlet与servletconfig的所有方法。方法的使用与返回值与以上类似,这里不再阐述。