JavaWeb 问题总结
1 启动HspTomcatV3 的main 方法时,报错 NoClassDefFoundError: javax/servlet/http/HttpServlet
tomcat本身是有servlet的jar 的,tomcat 运行 可以找到HttpServlet
package com.hspedu.tomcat;
import com.hspedu.tomcat.handler.HspRequestHandler;
import com.hspedu.tomcat.servlet.CallServlet;
import com.hspedu.tomcat.servlet.HspHttpServlet;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import javax.servlet.Filter;
import javax.servlet.http.HttpServlet;
import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author yangda
* @description: 通过 反射 + xml来初始化容器
* @create 2023-06-04-22:08
*/
public class HspTomcatV3 {
//1. 存放容器 servletMapping
// -ConcurrentHashMap
// -HashMap
// key - value
// ServletName 对应的实例
public static final ConcurrentHashMap<String, HspHttpServlet>
servletMapping = new ConcurrentHashMap<>();
//2容器 servletUrlMapping
// -ConcurrentHashMap
// -HashMap
// key - value
// url-pattern ServletName
public static final ConcurrentHashMap<String, String>
servletUrlMapping = new ConcurrentHashMap<>();
public static final ConcurrentHashMap<String, Filter>
filterMapping = new ConcurrentHashMap<>();
public static final ConcurrentHashMap<String, String>
filterUrlMapping = new ConcurrentHashMap<>();
public static void main(String[] args) throws IOException {
System.out.println("========");
/*
下面这行代码 会抛出异常
Exception in thread "main" java.lang.NoClassDefFoundError:
javax/servlet/http/HttpServlet
public class CallServlet extends HttpServlet {}
运行时找不到 类HttpServlet
https://www.ibashu.cn/news/show_118694.html
NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。
*/
// 如果写了下面的代码也会报错 NoClassDefFoundError