springmvc入门案例(从创建到结果以及注解解释详细讲解)

目录

1.SpringMVC简介

2.案例详解 

2.1.创建项目

2.2.直接上项目结构

 2.3.各个类文件及解释

2.4.运行结果

 3.springmvc工作流程

4.springmvc参数传递


1.SpringMVC简介

 SpringMVC技术其实与Servlet技术功能基本相同,都属于web层开发技术。

2.案例详解 

2.1.创建项目

使用原型创建这个模块,后面就一路next

springmvc入门案例(从创建到结果以及注解解释详细讲解)_第1张图片

做案例之前,先导入我们需要的依赖项

    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

    
      com.fasterxml.jackson.core
      jackson-databind
      2.9.0
    
    
      org.springframework
      spring-webmvc
      5.2.10.RELEASE
    

接着就是配置spring的Tomcat来运行项目,也是在pom.xml里添加


    
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.1
        
          80
          /
        
      
    
  

配置好后,来配置服务器。 

springmvc入门案例(从创建到结果以及注解解释详细讲解)_第2张图片

2.2.直接上项目结构

springmvc入门案例(从创建到结果以及注解解释详细讲解)_第3张图片

 2.3.各个类文件及解释

MvcServletConfig.java
package com.example.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

public class MvcServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter  =new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");

        return new Filter[]{filter};
    }
}

这是Tomcat加载Spring的配置类。继承 AbstractAnnotationConfigDispatcherServletInitializer

这个类后就需要重写三个方法:

getServletConfigClasses()方法告诉Tomcat加载springmvc容器配置。

 getServletMappings() 告诉Tomcat哪些请求归springmvc管理,“ / ”代表所有都归springmvc管,也就是拦截所有请求。

getRootConfigClasses() 告诉Tomact加载spring容器配置,和上面的是不一样的。

getServletFilters() 这不是必须重写的,但是项目中需要获取中文数据就需要配置这个过滤器。

SpringMvcConfig.java
package com.example.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("com.example")
@EnableWebMvc
public class SpringMvcConfig {
}

SpringMVC的配置类,前两个注解就不多说了

@EnableWebMvc:开启web MVC的配置支持,把JSON数据转换成相应的实体类 

UserController.java
package com.example.controller;

import com.example.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;
import java.util.List;

@Controller
public class UserController {

    @RequestMapping("/data")
    @ResponseBody
    public String dataParam(Date date,
                            @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
                            @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
        System.out.println("参数传递 date ==> "+date);
        System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
        System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
        return "{'module':'data param'}";
    }

    @RequestMapping("/adduser")
    @ResponseBody
    public String addUser(@RequestParam("name") String name){
        System.out.println("添加了一个人"+name);
        String str="{'name':'"+name+"'}";
        return str;
    }
    @RequestMapping("/alluser")
    @ResponseBody
    public String listUser(@RequestBody List users){
        System.out.println("添加了一个人"+users);

        return "成功";
    }

    @RequestMapping("/yuser")
    @ResponseBody
    public String yUser(@RequestBody User user){
        System.out.println("添加了一个人"+user);

        return "成功";
    }

}

@Controller  这个注解是开发springmvc专用的注解,不能用其他的注解 

 @RequestMapping("/add")  设置访问路径,可以放在类的前面作为请求路径的前缀,防止冲突

@ResponseBody  把返回的内容整体给到页面

@RequestBody 数据在请求体中
@RequestParam  数据是集合,把请求参数名为***的参数赋值给后面自己指定的参数,传字符串数组时也需要加上它,用于直接把值赋值给字符数组。
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss") 指定日期格式,spring默认的格式是yyyy/MM/dd(注:导入Data的包是要导入import java.util.Date这个,其他的会报错)。

参数传递:

方法括号内就可以接收请求的数据 ,可以是实体类,字符串,数组以及实体类列表,这个功能得益于jackson-databind包和注解@EnableWebMvc。上面这个例子就包括了各种参数传递的案例。不得不说,springMvc非常强大是不是。

Address.java
package com.example.entity;

public class Address {
    private String province;
    private String city;

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}
User.java
package com.example.entity;

public class User {
    private String name;
    private int age;

    private Address address;


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2.4.运行结果

springmvc入门案例(从创建到结果以及注解解释详细讲解)_第4张图片

 3.springmvc工作流程

启动服务器时

1.服务器启动,执行MvcServletConfig这个配置类,初始化web容器
2.执行createServletApplicationContext方法,创建了webApplicationcontext对象

 3.加载SpringMvcConfig
4.执行@ComponentScan加载对应的bean
5.加载Usercontroller,每个@RequestMapping的名称对应一个具体的方法

6.执行getservletMappings方法,定义所有的请求都通过SpringMvc

发送请求时:

1.发送请求localhost/adduser
2. web容器发现所有请求都经过SpringMNc,将请求交给SpringMVC处理

3.解析请求路径/adduser
4.由/save匹配执行对应的方法adduser()

5.执行adduser()
6.检测到有@ResponseBody直接将adduser()方法的返回值作为响应体返回给请求页面

4.springmvc请求与响应

响应页面及页面跳转

不需要@ResponseBody,也就是不需要把返回内容给页面,加上就是把纯文本返回去。

    @RequestMapping("/topage")
    public String topage(){
        System.out.println("页面跳转");
        return "index.jsp";
    }

响应实体对象

    @RequestMapping("/touser")
    @ResponseBody
    public User touser(){
        User user=new User("张三",22);
        return user;
    }

响应实体集合对象

    @RequestMapping("/listuser")
    @ResponseBody
    public List toalluser(){
        User user=new User("张三",22);
        User user1=new User("李四",28);
        List users =new ArrayList<>();
        users.add(user1);
        users.add(user);
        return users;
    }

说一点,这些转换都是HttpMessageConverter接口 帮我们转换的。

到这里就已经完成SpringMvc的基础案例,加上前面的sping就能把数据显示到页面了,这个以后慢慢实验吧。

你可能感兴趣的:(spring,spring,java,servlet)