From fa8a3bf44b68ae5dec9cdc85c978f57f7dd896e2 Mon Sep 17 00:00:00 2001
From: TangZhaoZhen <207525215@qq.com>
Date: Sun, 29 Oct 2023 22:17:00 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=9D=E8=B5=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/inspectionProfiles/Project_Default.xml | 63 ++++++++++++++++
.idea/workspace.xml | 72 +++++++++++++------
pom.xml | 46 ++++++++++++
.../mvc/annaotation/EnjoyRequestParam.java | 2 +-
.../tzz/mvc/service/impl/JvmServiceIml.java | 2 +-
.../impl => servlet}/DispatcherServlet.java | 47 ++++++------
src/main/webapp/WEB-INF/web.xml | 5 +-
7 files changed, 186 insertions(+), 51 deletions(-)
rename src/main/java/com/tzz/mvc/{service/impl => servlet}/DispatcherServlet.java (86%)
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 8d66637..ee9f695 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -1,5 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e25be97..0d74adc 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -9,7 +9,15 @@
-
+
+
+
+
+
+
+
+
+
@@ -45,24 +53,28 @@
- {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "last_opened_file_path": "D:/idea/spring-mvc/src/main/java/com/tzz/mvc/bb",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "project.structure.last.edited": "模块",
+ "project.structure.proportion": "0.15",
+ "project.structure.side.proportion": "0.2",
+ "settings.editor.selected.configurable": "MavenSettings",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
+
+
+
@@ -70,11 +82,11 @@
-
+
-
+
@@ -154,6 +166,10 @@
+
+
+
+
@@ -177,11 +193,27 @@
-
+
+
+
+
+
+ 1698579199143
+
+
+
+ 1698579199143
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fe95b1a..b2e374e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,8 +20,54 @@
2.5
provided
+
+
+ dom4j
+ dom4j
+ 1.6.1
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.5
+
+
spring-mvc
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+
+ maven-resources-plugin
+ 3.3.0
+
+
+ maven-compiler-plugin
+ 3.10.1
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+ maven-war-plugin
+ 3.4.0
+
+
+ maven-install-plugin
+ 3.0.1
+
+
+ maven-deploy-plugin
+ 3.0.0
+
+
+
diff --git a/src/main/java/com/tzz/mvc/annaotation/EnjoyRequestParam.java b/src/main/java/com/tzz/mvc/annaotation/EnjoyRequestParam.java
index 6672a8c..d1cf4dc 100644
--- a/src/main/java/com/tzz/mvc/annaotation/EnjoyRequestParam.java
+++ b/src/main/java/com/tzz/mvc/annaotation/EnjoyRequestParam.java
@@ -9,7 +9,7 @@ import java.lang.annotation.*;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
-public @interface EnjoyRequestParam {
+public @interface EnjoyRequestParam {
String value() default "";
}
diff --git a/src/main/java/com/tzz/mvc/service/impl/JvmServiceIml.java b/src/main/java/com/tzz/mvc/service/impl/JvmServiceIml.java
index 814ef21..dc5c351 100644
--- a/src/main/java/com/tzz/mvc/service/impl/JvmServiceIml.java
+++ b/src/main/java/com/tzz/mvc/service/impl/JvmServiceIml.java
@@ -14,6 +14,6 @@ public class JvmServiceIml implements JvmService {
@Override
public String query(String name, String age) {
- return "name==="+name+"age==="+age;
+ return "name==="+name + ";"+"age==="+age;
}
}
diff --git a/src/main/java/com/tzz/mvc/service/impl/DispatcherServlet.java b/src/main/java/com/tzz/mvc/servlet/DispatcherServlet.java
similarity index 86%
rename from src/main/java/com/tzz/mvc/service/impl/DispatcherServlet.java
rename to src/main/java/com/tzz/mvc/servlet/DispatcherServlet.java
index fe6b10e..88bf509 100644
--- a/src/main/java/com/tzz/mvc/service/impl/DispatcherServlet.java
+++ b/src/main/java/com/tzz/mvc/servlet/DispatcherServlet.java
@@ -1,4 +1,5 @@
-package com.tzz.mvc.service.impl;
+package com.tzz.mvc.servlet;
+
import com.tzz.mvc.annaotation.*;
import com.tzz.mvc.controller.JvmController;
@@ -27,14 +28,13 @@ import java.util.*;
public class DispatcherServlet extends HttpServlet {
- public static List classNames = new ArrayList();
- public static Map beans = new HashMap();
+ List classNames = new ArrayList();
+ Map beans = new HashMap();
- public static Map handerMap = new HashMap();
+ Map handerMap = new HashMap();
- @Override
- public void init(ServletConfig config) {
+ public void init(ServletConfig config) throws ServletException {
//把所有的bean扫描---扫描所有的class文件
scanPackage("com.tzz");
//根据全类名创建bean
@@ -73,7 +73,7 @@ public class DispatcherServlet extends HttpServlet {
for (String className : classNames) {
String cn = className.replace(".class","");
try {
- Class> clazz = Class.forName(cn);//com.tzz.mvc.com.tzz.mvc.service.controller...
+ Class> clazz = Class.forName(cn);//com.tzz.mvc.com.tzz.mvc.aa.service.controller...
if (clazz.isAnnotationPresent(EnjoyController.class)) {
Object instace = clazz.newInstance(); //创建控制类
EnjoyRequestMapping requestMapping = clazz.getAnnotation(EnjoyRequestMapping.class);
@@ -131,6 +131,7 @@ public class DispatcherServlet extends HttpServlet {
}
+
}
private void buildUrlMapping() {
@@ -170,60 +171,54 @@ public class DispatcherServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取请求路径 spring-mvc/mvc/query
+ // 获取请求路径
String uri = req.getRequestURI();
- System.out.println("路径URl为:"+uri);
-// String context = req.getContextPath(); //spring-mvc
-// String path = uri.replaceAll(context, ""); //mvc/query
- String result = uri.substring( 11);
- Method method = (Method) handerMap.get(result);
+ String context = req.getContextPath();
+ String path = uri.replace(context, "");
+ Method method = (Method) handerMap.get(path);
- int index = result.indexOf("/"); // 获取第一个斜杠的索引
- String mvc = result.substring(index, result.indexOf("/", index + 1)); // 获取/mvc字符串
+ JvmController instance = (JvmController) beans.get("/"+path.split("/")[1]);
- //根据 key=/mvc 到map去拿
- JvmController instance = (JvmController) beans.get(mvc); //
-
- //
- Object[] hand = hand(req, resp, method);
+ Object[] args = hand(req, resp, method);
try {
- method.invoke(instance, hand);
+ method.invoke(instance, args);
} catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ e.printStackTrace();
} catch (InvocationTargetException e) {
- throw new RuntimeException(e);
+ e.printStackTrace();
}
}
private static Object[] hand(HttpServletRequest request, HttpServletResponse response, Method method) {
+ //拿到待执行的方法有哪些参数
Class>[] paramClazzs = method.getParameterTypes();
+ //根据参数的个数,new 一个参数的数组,将方法的所有参数赋值到args
Object[] args = new Object[paramClazzs.length];
int args_i = 0;
int index = 0;
-
for (Class> paramClazz : paramClazzs) {
if (ServletRequest.class.isAssignableFrom(paramClazz)) {
args[args_i++] = request;
}
if (ServletResponse.class.isAssignableFrom(paramClazz)) {
- args[args_i++] = request;
+ args[args_i++] = response;
}
Annotation[] paramAns = method.getParameterAnnotations()[index];
if (paramAns.length > 0) {
for (Annotation paramAn : paramAns) {
if (EnjoyRequestParam.class.isAssignableFrom(paramAn.getClass())) {
EnjoyRequestParam rp = (EnjoyRequestParam) paramAn;
+
args[args_i++] = request.getParameter(rp.value());
}
}
}
index++;
-
}
return args;
}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 9fcb8d9..e746de3 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -5,11 +5,10 @@
spring-mvc
+
DispatcherServlet
- com.tzz.mvc.service.impl.DispatcherServlet
-
- 0
+ com.tzz.mvc.servlet.DispatcherServlet