Servlet:模拟Servlet本质
Servlet:模拟Servlet本质
CAMELLIA!!! note 目录
Servlet:模拟Servlet本质
一、模拟Servlet的代码
充当SUN公司的角色,制定Servlet规范
javax.servlet.Servlet
接口1
2
3
4
5
6
7
8
9package javax.servlet;
/*
我们现在充当的角色是SUN公司。
SUN公司把Servlet接口/规范制定出来了。
*/
public interface Servlet{
// 一个专门提供服务的方法
void service();
}
充当Tomcat服务器的开发者
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46package org.apache;
import java.util.Scanner;
import java.util.Properties;
import java.io.FileReader;
import javax.servlet.Servlet;
// 充当Tomcat服务器的开发者
public class Tomcat {
public static void main(String[] args) throws Exception {
System.out.println("Tomcat服务器启动成功,开始接收用户的访问。");
/* 简单的使用Scanner来模拟一下用户的请求
用户访问服务器是通过浏览器上的“请求路径”
也就是说用户请求路径不同,后台执行的Servlet不同。
/userList UserListServlet
/login UserLoginServlet
/bank BankServlet
......*/
System.out.print("请输入您的访问路径:");
Scanner s = new Scanner(System.in);
// 用户的请求路径 /bbbb
String key = s.nextLine(); // Tomcat服务器已经获取到了用户的请求路径了。
// Tomcat服务器应该通过用户的请求路径找对应的XXXServlet
// 请求路径和XXXServlet之间的关系应该由谁指定呢?
// 对于Tomcat服务器来说需要解析配置文件
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();
// 通过key获取value
String className = pro.getProperty(key);
// 通过反射机制创建对象
Class clazz = Class.forName(className);
Object obj = clazz.newInstance(); // obj的类型对于Tomcat服务器开发人员来说不知道。
// 但是Tomcat服务器的开发者知道,你写的XXXXServlet一定实现了Servlet接口
Servlet servlet = (Servlet)obj;
servlet.service();
}
}配置文件
1
2
3/aaaa=com.bjpowernode.servlet.UserListServlet
/bbbb=com.bjpowernode.servlet.UserLoginServlet
/cccc=com.bjpowernode.servlet.BankServlet充当Webapp的开发者
BankServlet
implementsServlet
1
2
3
4
5
6
7
8
9
10
11package com.bjpowernode.servlet;
import javax.servlet.Servlet;
// 充当的角色发生了改变:webapp开发者
// 只要是我们webapp开发者写的XXXServlet都要实现Servlet接口
public class BankServlet implements Servlet {
public void service() {
System.out.println("BankServlet's service...");
}
}UserListServlet
implementsServlet
1
2
3
4
5
6
7
8
9
10package com.bjpowernode.servlet;
import javax.servlet.Servlet;
// 充当的角色发生了改变:webapp开发者
public class UserListServlet implements Servlet {
public void service() {
System.out.println("UserListServlet's service...");
}
}UserLoginServlet
implementsServlet
1
2
3
4
5
6
7
8
9
10package com.bjpowernode.servlet;
import javax.servlet.Servlet;
// 充当的角色发生了改变:webapp开发者
public class UserLoginServlet implements Servlet {
public void service() {
System.out.println("UserLoginServlet's service...");
}
}
二、分析Servlet本质
- 对于Java Web程序员来说,只需要做两件事:
- 编写一个类实现Servlet接口。
- 将编写的类配置到配置文件中,在配置文件中:指定请求路径和类名的关系。
注意:
- 配置文件的文件名是固定的。
- 配置文件的存放路径是固定的。
- 文件名、文件路径都是SUN公司制定的Servlet规范中的明细。
- 严格意义上来说Servlet其实并不是简单的一个接口,Servlet规范中规定了:
- 一个合格的webapp应该是一个怎样的目录结构。
- 一个合格的webapp应该有一个怎样的配置文件。
- 一个合格的webapp配置文件路径放在哪里。
- 一个合格的webapp中java程序放在哪里。
Tomcat服务器要遵循Servlet规范。Java Web程序员也要遵循这个Servlet规范。这样Tomcat服务器和webapp才能解耦合。