当web服务器接收到用户在客户端的请求后,通过web.xml
中的请求路–Servlet类映射关系,找到指定的Servlet程序,并执行其中的service()方法,以完成具体的服务
对于javaweb开发者来说,需要编写一个个实现Servlet接口的Servlet程序,根据具体需求重写service()方法;并将Servlet类和请求路径绑定,编写web.xml文件
sun公司制定的Servlet接口中提service()等一系列方法,以便开发者根据实际需求重写
/*
Servlet接口
该接口的调用者: web服务器(如:tomcat)
实现者: sun公司
*/
// 每一个Servlet程序多需要直接或间接继承Servlet类
public interface Servlet {
// 这是提供服务的方法
void service();
}
web服务器,以Tomcat为例。web服务器获取来自客户端的用户请求路径,并将其映射到指定的Servlet程序中,并执行指定的服务
/*
服务器开发商,开发的web服务(web容器/web container)
web服务器不知道有哪些Servlet,但唯一确定的是知道所有的Servlet都实现(implement)SUN公司的Servlet接口
*/
import java.util.Scanner;
import java.util.*;
import java.io.*;
public class Tomcat //Tomcat服务器是纯java语言实现的,没有使用其他编程语言
{
public static void main(String[] args) throws Exception{
System.out.println("正在启动Tomcat服务器,请稍后...");
System.out.println("Tomcat服务器启动成功,开始接收浏览器的访问");
Scanner s = new Scanner(System.in);
System.out.print("请输入请求路径:");
//获取用户的请求路径
String requestPath = s.next();
//Tomcat服务器负责解析web.xml文件
//web.xml文件名、存放位置、配置信息都是Servlet规范,不能修改
//web.xml文件的编写者:javaweb程序员
FileReader reader = new FileReader("web.xml");
Properties pro = new Properties();
pro.load(reader);
reader.close();
// 通过key获取value
String className = pro.getProperty(requestPath);
// 通过反射机制创建对象
Class c = Class.forName(className); // 通过类名获取类
Servlet servlet = (Servlet)c.newInstance(); // 多态,父类型的引用指向子类对象
// 面向接口调用即可
// 编译器,检查servlet接口中是否存在service()方法,通过编译期
// 运行期,创建子类对象,调用子类中的方法
servlet.service();
}
}
web.xml提供请求路径–servlet程序的映射关系
/login=LoginServlet
/logout=LogoutServlet
/delete=DeleteServlet
具体的实现某一需求的Servlet程序
/*
服务器端的每一个 java程序,都提供一个独立的服务
LoginServlet.java 系统登录
*/
public class LoginServlet implements Servlet
{
public void service(){
System.out.println("正在登录请稍后....");
}
}
建议阅读:一图理解JavaWeb项目
参考自:动力节点Servlet