JavaWeb——模拟Servlet本质

JavaWeb——模拟Servlet本质

  • 充当SUN公司的角色,制定Servlet规范
    • javax.servlet.Servlet接口
  • 充当Tomcat服务器的开发者
    • Tomcat
  • 充当Webapp的开发者
    • BankServlet implements Servlet
    • UserListServlet implements Servlet
    • UserLoginServlet implements Servlet
  • 通过我们的分析:
    • 对于我们javaweb程序员来说,我们只需要做两件事:
      • 编写一个类实现Servlet接口。
      • 将编写的类配置到配置文件中,在配置文件中:指定 请求路径 和 类名 的关系。
  • 注意:
    • 这个配置文件的文件名不能乱来。固定的。
    • 这个配置文件的存放路径不能乱来。固定的。
    • 文件名、文件路径都是SUN公司制定的Servlet规范中的明细。
  • 严格意义上来说Servlet其实并不是简单的一个接口:
    • Servlet规范中规定了:
      • 一个合格的webapp应该是一个怎样的目录结构。
      • 一个合格的webapp应该有一个怎样的配置文件。
      • 一个合格的webapp配置文件路径放在哪里。
      • 一个合格的webapp中java程序放在哪里。
      • 这些都是Servlet规范中规定的。
  • Tomcat服务器要遵循Servlet规范。JavaWEB程序员也要遵循这个Servlet规范。这样Tomcat服务器和webapp才能解耦合。

web.properties

/aaaa=com.bjpowernode.servlet.UserListServlet
/bbbb=com.bjpowernode.servlet.UserLoginServlet
/cccc=com.bjpowernode.servlet.BankServlet

Servlet

package javax.servlet;

/*
	我们现在充当的角色是SUN公司。
	SUN公司把Servlet接口/规范制定出来了。
*/
public interface Servlet{

	// 一个专门提供服务的方法
	void service();
}

Tomcat.java

package 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();

	}
}

BankServlet

package 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...");
	}
}

UserServlet

package com.bjpowernode.servlet;

import javax.servlet.Servlet;

// 充当的角色发生了改变:webapp开发者

public class UserListServlet implements Servlet{
	public void service(){
		System.out.println("UserListServlet's service...");
	}
}

UserLoginServlet

package com.bjpowernode.servlet;

import javax.servlet.Servlet;

// 充当的角色发生了改变:webapp开发者

public class UserLoginServlet implements Servlet{
	public void service(){
		System.out.println("UserLoginServlet's service...");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值