servlet是服务器端的小程序,但不一定是web服务器的小程序,他也可以是smtp端的小程序,也可以邮件服务器的小程序,它只是sun为javaee定的一个标准,sun为javaSE提供了强大的类库,但sun没有为javaEE提供类库,这也不可能提供的,他只是提供了这样的一套标准。三流公司卖产品,二流公司卖服务,一流公司卖标准,sun可能是一流的公司,只是现在被oracle收购了……
javax.servlet.Servlet是一个接口,它定义了这类程序的标准,所有实现使用Servlet程序的服务器必须去实现这一套标准体系, 而我们经常用的tomcat服务器就实现了这样一套标准的体系。
GenericServlet实现了Servlet接口,而他是一个抽象类,而我们编写http协议的程序,一般使用HttpServlet类,它继承了GenericServlet, 而且HttpServlet类重载了GenericServlet中的service(ServletRequest,ServletResponse)方法, 将其变成了service(HttpServletRequest,HttpServletResponse),这样就更符合了web协议的标准, 而它的实现方式就是简单将ServletRequest和ServletResponse类强制转成了HttpServletRequest,HttpServletResponse。
于是我们写Servlet程序只需直接继承HttpServlet类即可,并且重写里面的某一个方法就行,一般都是doGet,doPost,不建议重写service方法,因为service会去判断浏览器到底请求的是哪个方法,然后调用doGet或者doPost,或者其他方法。
由于tomcat实现了servlet这一套标准体系,则在tomcat的lib目录下就一定存在servlet-api.jar文件,这就是tomcat服务器具体实现的servlet这一套体系。
二.web服务器程序的结构
1.web程序主目录,记为HelloWorld
2.主目录下必须要有WEB-INF目录,WEB-INF目录下一定有一个符合j2ee标准的web.xml文件,最简单的格式如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
这是最简单的web程序,当然静态的网页暂不讨论
3.一般的web程序的WEB-INF目录下还会有classes目录,专门存放编译好的class文件;还会有lib文件夹,存放运行web程序所必需的jar包
三.第一个Servlet程序
1.HelloWorldServlet类:
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Hello World!!!");
}
}
2.将编译好的这个Servlet类的.class文件放入到tomcat的webapps/HelloWorld/WEB-INF/classes目录下,当然详细目应该是这样的:\webapps\HelloWorld\WEB-INF\classes\com\servlet\HelloWorldServlet.class,应该懂什么意思的
3.有Servlet的class文件还不够,还必须在web.xml文件中配置:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.servlet.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
</web-app>
4.开启服务器,访问 http://localhost:8080/HelloWorld/HelloWorldServlet 后台打印出HelloWorld,测试成功