Spring MVC样例Demo

1 SpringMVC

  • 新建Maven web项目
mvn archetype:generate \
-DgroupId=com.test.hellospringmvc \
-DartifactId=HelloSpringMVC \
-DarchetypeArtifactId=maven-archetype-webapp \
-DinteractiveMode=false
  • 项目结构
├── HelloSpringMVC
│   ├── dependency-reduced-pom.xml
│   ├── pom.xml
│   ├── src
│   │   └── main
│   │       ├── java
│   │       │   └── com
│   │       │       └── hello
│   │       │           ├── controller
│   │       │           ├── entity
│   │       │           └── html
│   │       ├── resources
│   │       │   └── config
│   │       │       └── HelloSpringMVC-servlet.xml
│   │       └── webapp
│   │           ├── hello.jsp
│   │           ├── index.jsp
│   │           └── WEB-INF
│   │               ├── jsp
│   │               │   └── hello.jsp
│   │               └── web.xml
│   └── target
│       ├── classes
│       │   ├── com
│       │   │   └── hello
│       │   │       ├── entity
│       │   │       │   ├── Info.class
│       │   │       │   └── Info$InfoBuilder.class
│       │   │       └── HelloController.class
│       │   └── config
│       │       └── HelloSpringMVC-servlet.xml
│       ├── generated-sources
│       │   └── annotations
│       ├── HelloSpringMVC
│       │   ├── hello.jsp
│       │   ├── index.jsp
│       │   ├── META-INF
│       │   └── WEB-INF
│       │       ├── classes
│       │       │   ├── com
│       │       │   │   └── hello
│       │       │   └── config
│       │       │       └── HelloSpringMVC-servlet.xml
│       │       ├── jsp
│       │       │   └── hello.jsp
│       │       ├── lib
│       │       │   ├── aspectjweaver-1.8.9.jar
│       │       │   ├── commons-logging-1.2.jar
│       │       │   ├── jackson-annotations-2.8.2.jar
│       │       │   ├── jackson-core-2.8.2.jar
│       │       │   ├── jackson-databind-2.8.2.jar
│       │       │   ├── jackson-datatype-jsr310-2.8.2.jar
│       │       │   ├── javax.servlet.jsp.jstl-1.2.2.jar
│       │       │   ├── javax.servlet.jsp.jstl-api-1.2.1.jar
│       │       │   ├── log4j-api-2.3.jar
│       │       │   ├── log4j-core-2.3.jar
│       │       │   ├── log4j-jcl-2.3.jar
│       │       │   ├── log4j-slf4j-impl-2.3.jar
│       │       │   ├── log4j-taglib-2.3.jar
│       │       │   ├── lombok-1.16.8.jar
│       │       │   ├── slf4j-api-1.7.12.jar
│       │       │   ├── spring-aop-4.3.6.RELEASE.jar
│       │       │   ├── spring-aspects-4.3.6.RELEASE.jar
│       │       │   ├── spring-beans-4.3.6.RELEASE.jar
│       │       │   ├── spring-context-4.3.6.RELEASE.jar
│       │       │   ├── spring-context-support-4.3.6.RELEASE.jar
│       │       │   ├── spring-core-4.3.6.RELEASE.jar
│       │       │   ├── spring-expression-4.3.6.RELEASE.jar
│       │       │   ├── spring-instrument-4.3.6.RELEASE.jar
│       │       │   ├── spring-jdbc-4.3.6.RELEASE.jar
│       │       │   ├── spring-jms-4.3.6.RELEASE.jar
│       │       │   ├── spring-messaging-4.3.6.RELEASE.jar
│       │       │   ├── spring-orm-4.3.6.RELEASE.jar
│       │       │   ├── spring-oxm-4.3.6.RELEASE.jar
│       │       │   ├── spring-tx-4.3.6.RELEASE.jar
│       │       │   ├── spring-web-4.3.6.RELEASE.jar
│       │       │   ├── spring-webmvc-4.3.6.RELEASE.jar
│       │       │   ├── spring-webmvc-portlet-4.3.6.RELEASE.jar
│       │       │   └── spring-websocket-4.3.6.RELEASE.jar
│       │       └── web.xml
│       ├── HelloSpringMVC.war
│       ├── maven-archiver
│       │   └── pom.properties
│       ├── maven-status
│       │   └── maven-compiler-plugin
│       │       └── compile
│       │           └── default-compile
│       │               ├── createdFiles.lst
│       │               └── inputFiles.lst
│       └── original-HelloSpringMVC.war

2 项目解析

2.1 配置文件

2.1.0 POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test.hellospringmvc</groupId>
  <artifactId>HelloSpringMVC</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>HelloSpringMVC Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <spring.framework.version>4.3.6.RELEASE</spring.framework.version>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <jackson.version>2.8.2</jackson.version>
    <log4j.version>2.3</log4j.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- 日志 -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- spring-aop -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-aspects -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-context-support -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-core -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-expression -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-instrument -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-instrument</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-instrument-tomcat -->
    <!-- <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-instrument-tomcat</artifactId>
      <version>4.3.25.RELEASE</version>
    </dependency> -->
    <!-- spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-jms -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-messaging -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-orm -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-oxm -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-test -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.framework.version}</version>
      <scope>test</scope>
    </dependency>
    <!-- spring-tx -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-webmvc-portlet -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc-portlet</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>
    <!-- spring-websocket -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-websocket</artifactId>
      <version>${spring.framework.version}</version>
    </dependency>

    <!-- <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.web.servlet</artifactId>
      <version>3.2.2.RELEASE</version>
    </dependency> -->

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.servlet.jsp.jstl</artifactId>
        <version>1.2.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.servlet.jsp.jstl</groupId>
                <artifactId>jstl-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>${jackson.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-jcl</artifactId>
      <version>${log4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-taglib</artifactId>
      <version>${log4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <!--使用lombok简化实体类的setter和getter方法-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.8</version>
    </dependency>
  
  </dependencies>
  <build>
    <finalName>HelloSpringMVC</finalName>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>2.1</version>
          <executions>
              <execution>
                  <phase>package</phase>
                  <goals>
                      <goal>shade</goal>
                  </goals>
                  <configuration>
                      <transformers>
                          <transformer
                              implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                              <mainClass>com.hello.MainApp</mainClass>
                          </transformer>
                      </transformers>
                  </configuration>
              </execution>
          </executions>
      </plugin>

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.19</version>
      </plugin>
    </plugins>
  </build>
</project>

2.1.2 web.xml

<web-app id="WebApp_ID" version="2.4"
          xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Archetype Created Web Application</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/HelloSpringMVC-servlet.xml</param-value>
  </context-param>
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

  <servlet>
    <servlet-name>HelloSpringMVC</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!--classpath:路径为工程的resource目录下-->
      <param-value>classpath:config/HelloSpringMVC-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloSpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

其中,

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

spring-webmvc包含spring-web.

2.1.3 HellpSpringMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/mvc 
   http://www.springframework.org/schema/mvc/spring-mvc.xsd">

   <context:component-scan base-package="com.hello" />

   <mvc:annotation-driven>
        <!--解决@ResponseBody返回的字符出现乱码问题-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>

    </mvc:annotation-driven>

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
</beans>

2.2 类实体(M)

  • entity/Info.java
package com.hello.entity;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;

//使用lombok插件,可不用写setter和getter
@Data
@Accessors(chain = true)
@Builder
public class Info {
    private String name;
    private String sex;
    private String cellphone;

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }

    public void setSex(String sex){
        this.sex =sex;
    }
    public String getSex(){
        return sex;
    }


    public Info(){

    }

    public Info(String name, String sex, String cellphone){
        this.name = name;
        this.sex = sex;
        this.cellphone = cellphone;
    }
}

2.3 控制器©

  • controller/HelloController.java
package com.hello;

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.ui.ModelMap;
import org.springframework.ui.Model;
import javax.servlet.http.HttpServletRequest;

import java.io.*;
import java.net.URLDecoder;

import com.hello.entity.Info;
import java.util.Map;
import java.util.HashMap;
import java.util.List;

@CrossOrigin(origins = "*", maxAge = 3600)
@Controller 
@RequestMapping("/api")
public class HelloController{
    @RequestMapping(value="/datas", method=RequestMethod.GET)
    // @ResponseBody
    public String printHello(HttpServletRequest request, Model model){
        model.addAttribute("message", "Hello Spring MVC Framework!");
        // return "hello";
        return "hello";
    }

    /**
     * URI paramter received.
     * @param request: parameter request object
     * @param model: database model object
     * @return name: user name
     */
    @RequestMapping(value="/get-infos", method=RequestMethod.GET)
    @ResponseBody
    public String returnString(HttpServletRequest request, Model model){
        String name = request.getParameter("name");
        System.out.println("name:"+name);
        // String address = request.getParameter("address");
        return name;
    }

    /**
     * x-www-form-urlencode parameter received.
     * @param name: variable
     * @param address: variable
     * @return name
     */
    @RequestMapping(value="/post-infos", method=RequestMethod.POST)
    @ResponseBody
    public String returnJson(@RequestBody String name, @RequestBody String address){
        System.out.println("data: "+name);
        // String address = request.getParameter("address");
        return name;
    }

    public static String getType(Object o){
        return o.getClass().toString();
    }

    /**
     * Transfer json data and parse it directly.
     * @param request: request object
     * @return request body
     */
    @RequestMapping(value="/post-json", method=RequestMethod.POST)
    @ResponseBody
    public String loadJson(HttpServletRequest request){
        BufferedReader br;
        StringBuilder sb = null;
        String reqBody = null;
        try{
            br = new BufferedReader(new InputStreamReader(
                request.getInputStream()
            ));
            String line = null;
            sb = new StringBuilder();
            while ((line = br.readLine()) != null ){
                sb.append(line);
            }
            reqBody = URLDecoder.decode(sb.toString(), "UTF-8");
            reqBody = reqBody.substring(reqBody.indexOf("{"));
            request.setAttribute("inputParam", reqBody);
            System.out.println("JsonRequest :"+reqBody);
            System.out.println("Type of request data:"+getType(reqBody));
            return reqBody;
        } catch (IOException e){
            e.printStackTrace();
            return "jsonerror";
        }
    }

    /**
     * Received parameter within Class entity.
     * @param info: object
     * @return object
     */
    @RequestMapping(value="/post-class", method=RequestMethod.POST)
    @ResponseBody
    public Info loadClass(@RequestBody Info info){
        System.out.println("info:"+info);
        System.out.println("info type:"+getType(info));
        System.out.println("name:"+info.getName());
        String compare_name = "hello";
        
        // info.setName("xiaohong");
        System.out.println("source name: "+info.getName());
        System.out.println("source name type: "+getType(info.getName()));
        if(info.getName().equals(compare_name)){
            info.setName("xiaohong");
            System.out.println("judge name: "+info.getName());
        }else{
            System.out.println("Name changed error");
        }
        System.out.println("After name changed:"+info.getName());
        return info; 
    }
    /**
     * Create class and set parameter.
     * @return
     */
    @RequestMapping(value="/post-class-new", method=RequestMethod.POST)
    @ResponseBody
    public Info classNew(){
        Info info = new Info();
        info.setSex("male");
        return info;
    }

    /**
     * Parsing json data with class entity.
     * @param info
     * @param request
     * @return
     */
    @RequestMapping(value="/post-class-json", method=RequestMethod.POST)
    @ResponseBody
    public String classJson(@RequestBody Info info, HttpServletRequest request){
        request.setAttribute("test_name", info.getName());
        String test_name = info.getName();
        return test_name;
    }
    /**
     * Parsing json data with class entity and received with map data. 
     * @param info
     * @return
     */
    @RequestMapping(value="/post-class-map", method=RequestMethod.POST)
    @ResponseBody
    public Map<String, String> classMap(@RequestBody Info info){
        Map<String, String> datas = new HashMap<String, String>();
        datas.put("username", info.getName());
        datas.put("sex", info.getSex());
        System.out.println("datas:"+datas);
        return datas;
    }
    /**
     * Tranfering map data.
     * @param map
     * @return
     */
    @RequestMapping(value="/post-map", method=RequestMethod.POST)
    @ResponseBody
    public String postMap(@RequestBody Map<String, String> map){
        String name = "hello";
        String sex = "male";
        if(map.containsKey("name")){
            name = map.get("name").toString();
        }
        if(map.containsKey("sex")){
            sex = map.get("sex").toString();
        }
        return name;
    }
    /**
     * Transfering list data.
     * @param lists
     * @return
     */
    @RequestMapping(value="/post-list", method=RequestMethod.POST)
    @ResponseBody
    public List<Info> postList(@RequestBody List<Info> lists){
        for(Info info : lists){
            System.out.println("data:"+info.toString());
        }
        return lists;
    }
    /**
     * Transfering x-www-from-urlencode data.
     * @param name
     * @return
     */
    @RequestMapping(value="/post-param", method=RequestMethod.POST)
    @ResponseBody
    public String postParam(@RequestParam("name") String name){
        System.out.println("name:"+name);
        return name;
    }
}

2.4 视图(V)

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello Spring MVC World</title>
</head>
<body>
   <!-- <h2>${message}</h2> -->
   <h3>Hello SpringMVC world!</h3>
</body>
</html>

【参考文献】
[1]https://spring.io/guides/gs/spring-boot/
[2]https://www.w3cschool.cn/wkspring/9pf81ha5.html
[3]http://how2j.cn/k/springmvc/springmvc-springmvc/615.html
[4]https://zhidao.baidu.com/question/1048617034937436259.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值