diff --git a/springmvc_01/.gitignore b/springmvc_01/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/springmvc_01/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/springmvc_01/pom.xml b/springmvc_01/pom.xml
new file mode 100644
index 0000000..41cbf04
--- /dev/null
+++ b/springmvc_01/pom.xml
@@ -0,0 +1,129 @@
+
+ 4.0.0
+ com.msb
+ springmvc_01
+ war
+ 1.0-SNAPSHOT
+ springmvc_01 Maven Webapp
+
+ 17
+ 17
+ 17
+
+
+
+
+
+ org.springframework
+ spring-context
+ 5.3.5
+
+
+
+ org.springframework
+ spring-aspects
+ 5.3.5
+
+
+
+ aopalliance
+ aopalliance
+ 1.0
+
+
+
+ com.alibaba
+ druid
+ 1.1.10
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.22
+
+
+
+ org.springframework
+ spring-jdbc
+ 5.3.5
+
+
+
+ org.springframework
+ spring-tx
+ 5.3.5
+
+
+
+ org.springframework
+ spring-orm
+ 5.3.5
+
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ 2.14.0
+ test
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.12
+ provided
+
+
+
+ org.springframework
+ spring-test
+ 5.3.5
+ test
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.7.0
+ test
+
+
+
+ org.springframework
+ spring-web
+ 5.3.5
+
+
+ org.springframework
+ spring-webmvc
+ 5.3.5
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ javax.servlet.jsp
+ javax.servlet.jsp-api
+ 2.3.3
+ provided
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.1
+
+
+
diff --git a/springmvc_01/src/main/java/com/msb/controller/AjaxController.java b/springmvc_01/src/main/java/com/msb/controller/AjaxController.java
new file mode 100644
index 0000000..be8504a
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/controller/AjaxController.java
@@ -0,0 +1,29 @@
+package com.msb.controller;
+
+
+import com.msb.pojo.Person;
+import com.msb.pojo.Pet;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+
+//@Controller
+@RestController // @Controller+@ResponseBody两个注解的结合
+public class AjaxController {
+
+
+ /*
+ * @ResponseBody
+ * 1方法的返回值不在作为界面跳转依据,而已直接作为返回的数据
+ * 2将方法的返回的数据自动使用ObjectMapper转换为JSON
+ */
+ @RequestMapping("/testAjax")
+// @ResponseBody
+ public Pet testAjax(Person person){
+ System.out.println(person);
+
+ return new Pet("Tom", "Cat");
+ }
+}
diff --git a/springmvc_01/src/main/java/com/msb/controller/DataController.java b/springmvc_01/src/main/java/com/msb/controller/DataController.java
new file mode 100644
index 0000000..6932669
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/controller/DataController.java
@@ -0,0 +1,46 @@
+package com.msb.controller;
+
+import com.msb.pojo.Person;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+public class DataController {
+ /*紧耦合方式参数注入
+ * 使用传统的HttpServletRequest对象获取参数 javax.servlet
+ **/
+ @RequestMapping("/getParamByServlet")
+ public String getParamByServlet(HttpServletRequest req, HttpServletResponse resp){
+ String username = req.getParameter("username");
+ String password = req.getParameter("password");
+ System.out.println("username: "+username+" password: "+password);
+
+ return "success";
+ }
+
+ /*解耦合方式参数注入
+ * HttpServletRequest对象获取参数 通过SpringMVC框架功能,自动转换参数
+ * 处理单元参数列表中参数名必须和请求中的参数名一致
+ * 如不一致,可以通过@RequestParma注解进行转换
+ * */
+ @RequestMapping("/getParamByArgName")
+ public String getParamByArgName(@RequestParam("username")String username, @RequestParam("password")String password){
+ System.out.println("username: "+username+" password: "+password);
+
+ return "success";
+ }
+
+
+ @RequestMapping("/getDataByPojo")
+ public String getDataByPojo(Person p){
+ System.out.println("Person:"+ p);
+
+ return "success";
+ }
+
+
+}
diff --git a/springmvc_01/src/main/java/com/msb/controller/PathController.java b/springmvc_01/src/main/java/com/msb/controller/PathController.java
new file mode 100644
index 0000000..197f77b
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/controller/PathController.java
@@ -0,0 +1,56 @@
+package com.msb.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class PathController {
+
+ // restful 请求链接地址,绑定参数
+ @RequestMapping("/testPathVar/{id}/{username}")
+ public String testPathValue(@PathVariable("id") Integer id, @PathVariable("username") String username){
+ System.out.println("id:"+id);
+ System.out.println("username:"+username);
+ System.out.println("testPathValue");
+ return "success";
+ }
+
+ // get请求
+ @RequestMapping(value = "/testGet/{id}", method = RequestMethod.GET)
+ public String testGet(@PathVariable("id") Integer id){
+ System.out.println("id:"+id);
+ System.out.println("testGet");
+ return "success";
+ }
+
+ // post请求
+ @RequestMapping(value = "/testPost/{id}", method = RequestMethod.POST)
+ public String testPost(@PathVariable("id") Integer id){
+ System.out.println("id:"+id);
+ System.out.println("testPost");
+ return "success";
+ }
+
+ // put请求
+ @RequestMapping(value = "/testPut/{id}", method = RequestMethod.PUT)
+ public String testPut(@PathVariable("id") Integer id){
+ System.out.println("id:"+id);
+ System.out.println("testPut");
+ return "success";
+ }
+
+
+ // delete请求
+ @RequestMapping(value = "/testDelete/{id}", method = RequestMethod.DELETE)
+ public String testDelete(@PathVariable("id") Integer id){
+ System.out.println("id:"+id);
+ System.out.println("testDelete");
+ return "success";
+ }
+
+
+
+
+}
diff --git a/springmvc_01/src/main/java/com/msb/controller/ResponseController.java b/springmvc_01/src/main/java/com/msb/controller/ResponseController.java
new file mode 100644
index 0000000..6258d50
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/controller/ResponseController.java
@@ -0,0 +1,79 @@
+package com.msb.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.View;
+import org.springframework.web.servlet.view.RedirectView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+public class ResponseController {
+ @RequestMapping("testVoid")
+ public void testVoid(){
+ System.out.println("void controller");
+ }
+
+ @RequestMapping("demo1")
+ public void testDemo1(HttpServletRequest req, HttpServletResponse resp) throws Exception {
+ // 请求转发
+// req.getRequestDispatcher("/forwardPage.jsp").forward(req, resp);
+
+ //响应重定向
+ resp.sendRedirect(req.getContextPath()+"/redirectPage.jsp");
+ }
+
+ /*
+ * 返回字符串告诉DispatcherServlet跳转的路径
+ * 在路径之前放上一个forward: 关键字,就是请求转发
+ * 如果路径前的关键字是forward,那么可以省略不写
+ * */
+ @RequestMapping("demo2")
+ public String demo2(){
+ // "forward:forwardPage.jsp"
+ return "/forwardPage.jsp";
+ }
+
+
+ /*
+ * 返回字符串告诉DispatcherServlet跳转的路径
+ * 在路径之前放上一个redirect: 关键字,就是重定向
+ * 如果路径前的关键字是redirect,那么不可以省略
+ * /表示当前项目下.这里不需要项目的上下文路径
+ * */
+ @RequestMapping("demo3")
+ public String demo3(){
+ return "redirect:redirectPage.jsp";
+ }
+
+ // View 转发
+ @RequestMapping("demo4")
+ public View demo4(HttpServletRequest request){
+ View view = null;
+// view = new InternalResourceView("/forwardPage.jsp"); // 请求转发
+
+ view = new RedirectView(request.getContextPath() + "/redirectPage.jsp"); // 响应重定向
+
+ return view;
+ }
+
+ // ModelAndView
+ @RequestMapping("demo5")
+ public ModelAndView demo5(HttpServletRequest request){
+ ModelAndView mv = new ModelAndView();
+ // 请求转发
+// mv.setViewName("forward:forwardPage.jsp");
+// mv.setView(new InternalResourceView("/forwardPage.jsp"));
+
+ // 响应重定向
+// mv.setViewName("redirect:redirectPage.jsp");
+ mv.setView(new RedirectView(request.getContextPath()+"/redirectPage.jsp"));
+
+ return mv;
+ }
+
+
+
+}
diff --git a/springmvc_01/src/main/java/com/msb/pojo/Person.java b/springmvc_01/src/main/java/com/msb/pojo/Person.java
new file mode 100644
index 0000000..da1a741
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/pojo/Person.java
@@ -0,0 +1,31 @@
+package com.msb.pojo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Person {
+ private String pname;
+ private String page;
+ private Integer gender;
+ private Integer[] hobby;
+
+ // 日期转换
+// @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date birthday;
+
+ // List参数
+ private List petList;
+
+ // Map参数
+ private Map petMap;
+}
diff --git a/springmvc_01/src/main/java/com/msb/pojo/Pet.java b/springmvc_01/src/main/java/com/msb/pojo/Pet.java
new file mode 100644
index 0000000..ff6d990
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/pojo/Pet.java
@@ -0,0 +1,13 @@
+package com.msb.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Pet {
+ private String petName;
+ private String petType;
+}
diff --git a/springmvc_01/src/main/java/com/msb/util/StringToDateConverter.java b/springmvc_01/src/main/java/com/msb/util/StringToDateConverter.java
new file mode 100644
index 0000000..291bea1
--- /dev/null
+++ b/springmvc_01/src/main/java/com/msb/util/StringToDateConverter.java
@@ -0,0 +1,22 @@
+package com.msb.util;
+
+import org.springframework.core.convert.converter.Converter;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class StringToDateConverter implements Converter {
+ private final SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyy-MM-dd");
+ @Override
+ public Date convert(String s) {
+ Date date = null;
+ try {
+ date = dateFormat.parse(s);
+ } catch (ParseException e) {
+ throw new RuntimeException("Failed to convert date");
+ }
+
+ return date;
+ }
+}
diff --git a/springmvc_01/src/main/resources/log4j2.xml b/springmvc_01/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..e9d972c
--- /dev/null
+++ b/springmvc_01/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/springmvc_01/src/main/resources/springmvc.xml b/springmvc_01/src/main/resources/springmvc.xml
new file mode 100644
index 0000000..e4b065f
--- /dev/null
+++ b/springmvc_01/src/main/resources/springmvc.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/springmvc_01/src/main/webapp/WEB-INF/view/success.jsp b/springmvc_01/src/main/webapp/WEB-INF/view/success.jsp
new file mode 100644
index 0000000..cade0ac
--- /dev/null
+++ b/springmvc_01/src/main/webapp/WEB-INF/view/success.jsp
@@ -0,0 +1,16 @@
+<%--
+ Created by IntelliJ IDEA.
+ User: lsrong
+ Date: 2023/11/10
+ Time: 22:29
+ To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ Title
+
+
+this is success page, good
+
+
diff --git a/springmvc_01/src/main/webapp/WEB-INF/web.xml b/springmvc_01/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..2631e70
--- /dev/null
+++ b/springmvc_01/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ hiddenHttpMethodFilter
+ org.springframework.web.filter.HiddenHttpMethodFilter
+
+
+ hiddenHttpMethodFilter
+ /*
+
+
+
+
+
+ encFilter
+ org.springframework.web.filter.CharacterEncodingFilter
+
+ encoding
+ utf-8
+
+
+
+ encFilter
+ /*
+
+
+
+
+
+ dispatcherServlet
+ org.springframework.web.servlet.DispatcherServlet
+
+
+ contextConfigLocation
+ classpath:springmvc.xml
+
+ 1
+
+
+
+ dispatcherServlet
+
+ /
+
+
+
+
+
diff --git a/springmvc_01/src/main/webapp/ajax.jsp b/springmvc_01/src/main/webapp/ajax.jsp
new file mode 100644
index 0000000..5b8abe6
--- /dev/null
+++ b/springmvc_01/src/main/webapp/ajax.jsp
@@ -0,0 +1,20 @@
+
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ Title
+
+
+
+
+
+
+