wuheng 2 éve
szülő
commit
a43df657ec

+ 8 - 0
day01/pom.xml

@@ -10,6 +10,14 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>day01</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
 
     <properties>
         <maven.compiler.source>8</maven.compiler.source>

+ 21 - 4
day01/src/main/java/com/lovecoding/springmvc/DemoContorller.java

@@ -8,19 +8,36 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping(value = "/demoContorller")
 public class DemoContorller {
 
-
+    /**
+     * RequestMapping 注解是一个功能强大的 URL映射匹配注解
+     * 我们可以在 SpringMVC里面使用这个注解  对URL 进行匹配
+     * 前端控制器 在匹配完成的时候, 会匹配参数 调用函数
+     * 使用 {}  可以用来参数占位, 我们可以直接获取URL内的占位参数
+     * 一般用来 处理 RestFull 风格的API接口参数  ##用的比较多##
+     * @param username
+     * @return
+     */
     @RequestMapping(
+            //匹配URL路径
             value = {  "/save/{id}" },
+            //限制请求方法
             method = { RequestMethod.POST, RequestMethod.GET }
+            //限制请求参数
             //params = {"username=zhangsan"},
+            //限制 请求Header
             //headers = {"User-Agent"},
-            //consumes = { "multipart/form-data" }, 用来限制 请求数据类型
+            //限制 请求内容
+            //consumes = { "multipart/form-data" },
+            //限制返回内容
             //produces = { "text/html" }
     )
+    /**
+     * RequestParam 有两个用户
+     * 1 映射参数, 可以处理 入参和自定义变量 名称不符问题
+     * 2 标注有些参数 是否是  必须传入的参数
+     */
     public String demo( @RequestParam(value = "user", required = false) String username  ){
-
         System.out.println( "DemoContorller Run!!!" + username );
-
         return "/demo.jsp";
     }
 

+ 97 - 0
day01/src/main/java/com/lovecoding/springmvc/RequestController.java

@@ -0,0 +1,97 @@
+package com.lovecoding.springmvc;
+
+import com.lovecoding.springmvc.pojo.Student;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.support.RequestContext;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+@Controller
+public class RequestController {
+
+    /**
+     * 我们可以直接在 控制器函数 实参内 获取 原生的参数类型
+     * 一般常用的参数有  HttpServletRequest HttpServletResponse  HttpSession
+     * Spring框架会在  Bean对象集合内 帮我们 自动匹配参数, 要求是 实现类必须是 空间构造
+     * @param req
+     * @param resp
+     * @param session
+     * @return
+     */
+    @RequestMapping("/students/req")
+    public String saveStudent(HttpServletRequest req, HttpServletResponse resp, HttpSession session){
+
+
+        System.out.println( "当前URL :" + req.getRequestURL() );
+        System.out.println( "当前编码: " + resp.getCharacterEncoding() );
+        System.out.println( "当前用户SessionID + " + session.getId() );
+
+        return "hello";
+    }
+
+    /**
+     * 我们在设计 API 接口的时候, 一般自定义数据实体
+     * SpringMVC框架 允许我们将自己定义的 Pojo 实体类 当作参数 传入
+     * 这样我们直接就可以拿到 实体类对象了, 非常的方便!
+     * 不需要使用第三方工具 转化对象类型, 和 set 数据了
+     * @param student
+     * @return
+     */
+    @RequestMapping("/students/add")
+    public String saveStudent(Student student){
+
+        System.out.println( student );
+
+        return "/page/hello.jsp";
+    }
+
+    /**
+     * 我们可以在 控制器函数 实参内 定义自己想要的 数据
+     * URL 如果携带了 相关参数(参数名匹配), 那么我们就可以直接获得参数值
+     * Spring 框架会自动入参
+     * @param req
+     * @param name
+     * @param age
+     * @return
+     */
+    @RequestMapping("/students/save")
+    public String saveStudent(HttpServletRequest req, String name, int age ){
+
+        String contextPath = req.getContextPath();
+        System.out.println( "contextPath" + contextPath );
+        System.out.println( "name " + name );
+        System.out.println( "age " + age );
+        return "/page/hello.jsp";
+    }
+
+    /**
+     * 我们可以使用一些  参数内注解, 单独处理请求参数
+     * 比方说  RequestParam 可以修改参数是否是 必填参数
+     * 比方说  RequestHeader 可以直接获取 Header值
+     * @param agent
+     * @return
+     */
+    @RequestMapping("/students/agent")
+    public String saveStudent( @RequestHeader("User-Agent") String agent  ){
+
+        System.out.println( "用户浏览器 Agent:" + agent  );
+
+        return "/student.jsp";
+    }
+
+    @RequestMapping("/students/cookie")
+    public String cookie( @CookieValue("JSESSIONID") String sessionId  ){
+
+        System.out.println( "用户 JSESSIONID:" + sessionId  );
+
+        return "/student.jsp";
+    }
+
+
+
+}

+ 7 - 0
day01/src/main/java/com/lovecoding/springmvc/StudentController.java

@@ -8,6 +8,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpSession;
 
+/**
+ * RestFil 风格API接口
+ * 一般我们设计 RESTFIL 风格接口, 会在类上 注解一个 请求路径
+ * 然后在 方法上 设计 增删改查等操作, 使用不同的 Method 方法处理不同的业务
+ *
+ */
+
 @Controller
 @RequestMapping("/student")
 public class StudentController {

+ 22 - 0
day01/src/main/java/com/lovecoding/springmvc/pojo/Student.java

@@ -0,0 +1,22 @@
+package com.lovecoding.springmvc.pojo;
+
+import lombok.Data;
+
+/**
+ * @Data 是用来创建实体类 set get toString 方法的注解
+ * 有了这个注解 我们开发就方比那多了
+ */
+
+@Data
+public class Student {
+    String user;
+    int age;
+
+    @Override
+    public String toString() {
+        return "Student{" +
+                "user='" + user + '\'' +
+                ", age=" + age +
+                '}';
+    }
+}

+ 6 - 1
day01/src/main/resources/springmcv.xml

@@ -4,9 +4,14 @@
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
 
-
+<!--  开启扫包  -->
     <context:component-scan base-package="com.lovecoding.springmvc" ></context:component-scan>
 
+<!-- 下面这段bean对象是 处理视图层 前缀和后缀  -->
+<!--    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
+<!--        <property name="prefix" value="/page/" ></property>-->
+<!--        <property name="suffix" value=".jsp" ></property>-->
+<!--    </bean>-->
 
 
 </beans>

+ 5 - 0
day01/src/main/webapp/WEB-INF/web.xml

@@ -4,15 +4,20 @@
          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
          version="4.0">
 
+<!--   所谓前端控制器 在Spring框架内 就是一个 Servlet   -->
+<!--  DispatcherServlet 是Spring提供的 前端控制器  -->
+<!--  他要求传入 SpringMVC 的配置档路径  -->
     <servlet>
         <servlet-name>SpringMvc</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
+<!--      Springmvc配置档路径      -->
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:springmcv.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
+<!-- 当前 前端控制器 都控制那些个 请求 在这里配置   -->
     <servlet-mapping>
         <servlet-name>SpringMvc</servlet-name>
         <url-pattern>/</url-pattern>

+ 16 - 0
day01/src/main/webapp/page/hello.jsp

@@ -0,0 +1,16 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: lc
+  Date: 2023-03-25
+  Time: 下午 4:04
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<html>
+<head>
+    <title>Title</title>
+</head>
+<body>
+<h1> Hello JSP </h1>
+</body>
+</html>

+ 16 - 0
day01/src/main/webapp/student.jsp

@@ -0,0 +1,16 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: lc
+  Date: 2023-03-25
+  Time: 下午 3:32
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<html>
+<head>
+    <title>Title</title>
+</head>
+<body>
+    <h1> Student </h1>
+</body>
+</html>