欢迎大家来到IT世界,在知识的湖畔探索吧!
我们知道任何java代码的程序入口都是一个main方法,随着main方法运行结束程序便随之结束。那么大家有没有这么一个疑问,我们平时都是将我们的应用部署到tomcat服务器上,然后tomcat上的应用就能持续接收请求给予响应。应用本身是没有main方法的(SpringBoot这种集成了tomcat的就不说了),tomcat本身也是java代码,java程序的执行入口必定是一个main方法,mian方法执行结束按理来说tomcat就会结束,但是为何tomcat却能一直运行呢?
其实能使main方法一直运行的方法很简单,我们只需要一个简单的while(true)方法即可让程序一直处于运行状态,而实际上tomcat也是这么做的,我们翻看tomcat的源码可以看到,这里确实有一个while(true),只不过这里的是一个变量可以来控制。
下面我们用一个简单的程序来模拟一下tomcat的接收请求的过程
/**
* @author wangpeng
* @version 1.0
* @apiNote tomcat服务器
* @date 2023/7/17 5:46 下午
* @since JDK1.8
**/
public class TomcatDemo {
public static final int post = 8080;
public static void main(String[] args) {
System.out.println(" My Tomcat is Running");
try {
ServerSocket server = new ServerSocket(post);
while (true) {
Socket socket = server.accept();
InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuilder info = new StringBuilder();
String infoline = br.readLine();
while (infoline != null) {
info.append(infoline);
infoline = br.readLine();
}
//解析url地址,然后将对应的每个关键字解析
UrlBean url = UrlUtil.readString(info.toString());
String path = url.getPath();
String className = url.getFileName();
String methodName = url.getParameter();
ClassLoader classloader = ClassLoader.getSystemClassLoader();
try {
classloader.loadClass(path + "." + className);
Class<?> getClass = Class.forName(path + "." + className);
Method method = getClass.getMethod(methodName);
method.invoke(getClass.newInstance());
} catch (Exception e) {
}
}
} catch (IOException e) {
}
}
}
欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到IT世界,在知识的湖畔探索吧!/**
* @author wangpeng
* @version 1.0
* @apiNote 程序客户端
* @date 2023/7/17 5:56 下午
* @since JDK1.8
**/
public class ClientDemo {
private static final String host = "127.0.0.1";
//http://127.0.0.1:8080/com.bboss.zqesp.controller/TestTomcat.java?test
public static void main(String[] args) {
try {
Socket con = new Socket(host, TomcatDemo.post);
System.out.println("请输入URL地址:");
Scanner scanner = new Scanner(System.in);
String info = scanner.nextLine().trim();
Writer writer = new OutputStreamWriter(con.getOutputStream());
writer.write(info);
writer.flush();
writer.close();
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
}
/**
* @author wangpeng
* @version 1.0
* @apiNote 模拟controller
* @date 2023/7/17 6:01 下午
* @since JDK1.8
**/
public class TestTomcat {
public void test(){
System.out.println("请求到了路径!");
}
}
启动”tomcat”:
客户端发起请求:
“tomcat”服务器接收到请求
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37264.html