栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

SpringMVC

Java 更新时间:发布时间: 百科书网 趣学号
SpringMVC SpringMVC简介
  • SpringMVC技术与Servlet技术功能相同 , 均属于web层开发技术 ( 更为简单 )

SpringMVC 配置方法
  1. 导入坐标 , SpringMVC 和 servlet

      
        
        
          javax.servlet
          javax.servlet-api
          3.1.0
          provided
        
    
        
          org.springframework
          spring-webmvc
          5.2.10.RELEASE
        
      
    
    
      
        
          
          
            org.apache.tomcat.maven
            tomcat7-maven-plugin
            2.1
            
              
              8080
              
              /
              
              UTF-8
            
          
        
      
    
  2. 定义Controller

    //2.定义Controller
    //2.1 使用 @Controller 定义bean
    @Controller
    public class UserController {
    
        //2.2 设置当前方法的访问路径
        @RequestMapping("/save")
        //2.3 设置当前操作的返回值的类型
        @ResponseBody
        public String save() {
            System.out.println("user save ...");
            return "{'module','SpringMVC'}";
        }
    }
    
  3. 创建 springmvc 的配置文件 , 加载controller对应的bean

    //3. 创建 springmvc 的配置文件 , 加载controller对应的bean
    @Configuration                          //设置为配置类
    @ComponentScan("com.lyx.controller")    //扫描包中配置的bean
    public class SpringMvcConfig {
    }
    
  4. 定义一个servlet容器启动的配置类, 在里面加载spring的配置

    //4. 定义一个servlet容器启动的配置类, 在里面加载spring的配置
    public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
        //加载springmvc容器配置
        @Override
        protected WebApplicationContext createServletApplicationContext() {
            AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
            ctx.register(SpringMvcConfig.class);
            return ctx;  //改成返回ctx
        }
    
        //设置哪些请求归属springMVC处理
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"}; //所有请求都归springmvc处理
        }
    
        //加载spring容器配置
        @Override
        protected WebApplicationContext createRootApplicationContext() {
            return null;
        }
    }
    
SpringMVC - bean加载控制

因为功能不同, 避免Spring错误加载到SpringMVC的bean ( 加载Spring控制的bean的时候排除掉SpringMVC控制的bean )

Controller加载控制与业务bean加载控制
  • SpringMVC相关bean ( 表现层bean )

  • Spring控制bean

    • 业务bean ( Service )

    • 功能bean ( DataSource等 )

  • SpringMVC相关bean加载控制

    • SpringMVC加载的bean对应的包均在com.lyx.controller包内
  • Spring相关bean加载控制

    • 方式一: Spring加载的bean设定扫描范围为精准范围, 例如service包, dao包等

    • 方式二: Spring加载的bean设定扫描范围为com.lyx, 排除controller包内的bean

    • 方式三: 不区分Spring与SpringMVC的环境, 加载到同一环境中

方式一
@Configuration
@ComponentScan({"com.lyx.dao","com.lyx.service"})
public class SpringConfig {
}
方式二
@Configuration
@ComponentScan(value = "com.lyx",
        excludeFilters = @ComponentScan.Filter(     //排除
                type = FilterType.ANNOTATION,       //按注解排除
                classes = Controller.class          //排除掉使用COntroller注解的bean
        )
)
public class SpringConfig {
}

请求与响应 设置请求映射路径

在Controller包中的文件创建根目录, 避免因重名阐述报错

@Controller
@RequestMapping("/user")         //根目录
public class UserController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'moudle':'user save'}";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user delete ...");
        return "{'moudle':'user delete'}";
    }
}
请求方式 Get请求
    @RequestMapping("/save")
    @ResponseBody
    public String save(String name,int age){
        System.out.println("book save ...");
        System.out.println("name -->"+ name);
        System.out.println("age -->"+ age);
        return "{'moudle':'book save'}";
    }

添加参数 name age

Post请求

代码修改与get请求一致, Spring整合了get请求和post请求

SpringMVC解决Post请求中文乱码问题 ( 添加过滤器 )

但是请求中不能处理中文,所以添加过滤器 ( Filter )

重写servlet容器启动的配置类中的 getServletFilters() 方法

public class SercletContainersInitConfig 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};
    }
}
5种参数类型的传递
    //普通数据类型
    @RequestMapping("/commonparam")
    @ResponseBody
    public String commonParam(@RequestParam("user") String username,int age){ 
        //@RequestParam给数据取别名
        System.out.println("name ==>"+ username);
        System.out.println("age ==>"+ age);
        return "{'modle':'common param'}";
    }

    //POJO参数
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user){
        System.out.println("user ==>"+ user);
        return "{'modle':'pojo param'}";
    }

    //嵌套POJO参数
    @RequestMapping("/pojoContainPojo")
    @ResponseBody
    public String pojoContaainPojo(User user){
        System.out.println("user ==>"+ user);
        return "{'modle':'pojo param'}";
    }

    //数组参数
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
        System.out.println("数组参数传递likes ==>"+ Arrays.toString(likes));
        return "{'modle':'array param'}";
    }

    //集合参数
    @RequestMapping("/listParam")
    @ResponseBody
    public String listParam(@RequestParam List likes){      //将值作为参数写入集合
        System.out.println("likes ==>"+ likes);
        return "{'modle':'list param'}";
    }

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1076914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号