【spring(五)】SpringMvc总结 SSM整合流程

简介: 【spring(五)】SpringMvc总结 SSM整合流程

一、SpringMVC简介:

1.SpringMVC是一种表现层框架技术

2.SpringMVC用于进行表现层功能开发

与原始Servlet对比

二、SpringMVC快速入门:

①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version><scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.10.RELEASE</version>
</dependency>

②:创建SpringMVC控制器类(等同于Servlet功能)

@RestController
public class BookController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        return null;
    }
}

③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

@Configuration
@ComponentScan({"com.itpan.controller"})
@EnableWebMvc
public class SpringMVCConfig {
}

三、SpringMVC bean的管理:⭐

       ①配置bean

               ①三层架构中的bean

                       控制层controller:@restcontroller = @controller + @responsebody

                       业务层service:@service

                       持久层dao:@reposity

               ②其他bean(第三方,自己写的……)

                       加入@bean注解

       ②扫描bean

               在springconfig配置文件上加入@ComponentScan({"包名1", "包名2",……})

总结:

SpringMVC入门程序开发总结(1+N

       一次性工作

               创建工程,设置服务器,加载工程

               导入坐标

               创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径

               SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean

       多次工作

               定义处理请求的控制器类

               定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody

四、SpringMVC配置类:⭐

SpringMVC等同于Web容器,Spring是Spring-web的子容器,所以同时加载Spring和SpringMVC会有bean加载冲突问题

解决办法:ServletConfig配置类

加载SpringMVC配置

加载Spring配置

设定SpringMVC拦截请求路径

五、SpringMVC 请求与响应

见文章:http://t.csdnimg.cn/puThL

获取请求参数:http://t.csdnimg.cn/pu0KD

六、SpringMVC REST风格

与原始风格做对比

优点:

       隐藏业务行为,无法通过地址得知对资源的何种操作

       简化书写

通过请求类型区分业务操作

七、SSM整合 异常处理:

程序遇到异常会抛给他的调用者,就这样一层一层往上抛,如果不处理,最后会抛给jvm

步骤分析:

  • 判定异常分类:
  • 业务异常(用户请求有误)
  • 运行异常(代码有BUG)
  • 其他异常(不确定异常,例如系统崩了,服务器坏了等等)
  • 创建异常类:
  • 在可能出现异常的地方抛出异常,统一处理:
  • 定义异常处理类:

模拟实现:

       AOP思想

//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
    //@ExceptionHandler用于设置当前处理器类对应的异常类型
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex){
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(ex.getCode(),null,ex.getMessage());
    }
 
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex){
        return new Result(ex.getCode(),null,ex.getMessage());
    }
 
    //除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex){
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统繁忙,请稍后再试!");
    }
}

模拟异常:

public Book getById(Integer id) {
        //模拟业务异常,包装成自定义异常
        if(id == 1){
            throw new BusinessException(Code.BUSINESS_ERR,"请不要使用你的技术挑战我的耐性!");
        }
        //模拟系统异常,将可能出现的异常进行包装,转换成自定义异常
        try{
            int i = 1/0;
        }catch (Exception e){
            throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请重试!",e);
        }
        return bookDao.getById(id);
    }

八、SSM整合流程:⭐

前面已经学了 Mybatis 、 Spring 和 SpringMVC 三个框架,现在要整合这三个框架,完成业务功能的简单开发。

SpringConfig配置类:

@Configuration
@ComponentScan({"com.itpan.service"}) // 组件扫描 为防止spring和springMVC重复扫描只扫描到service
@PropertySource({"classpath:jdbc.properties"}) // 加载数据库配置文件
@Import({JdbcConfig.class, MybatisConfig.class}) // 导入配置文件
public class SpringConfig {
}

jdbcConfig配置类:

public class JdbcConfig {
 
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
 
 
    // 管理第三方的bean,供spring使用
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

jdbc.properties:略

jdbc.driver=com.itpan.jdbc.Driver
jdbc.url=jdbc:mysql//localhost:3306/ssm_db
jdbc.username=root
jdbc.password=root

MybatisConfig配置类:

public class MybatisConfig {
 
    // 配置数据库连接池的bean,方法的参数也是bean的自动装配
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.itpan.domain");
        return factoryBean;
    }
 
    // 配置扫描Dao包下的bean
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itpan.dao");
        return msc;
    }
}

ServletConfig配置类:

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
 
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }
 
    // 拦截路径
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

SpringMVC配置类:

@Configuration
@ComponentScan({"com.itpan.controller"})
@EnableWebMvc
public class SpringMVCConfig {
}

九、SpringMVC 拦截器:

见文章:http://t.csdnimg.cn/JqJ6b

相关文章
|
19天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
Java 持续交付 Maven
Spring Boot程序的打包与运行:构建高效部署流程
构建高效的Spring Boot部署流程对于保障应用的快速、稳定上线至关重要。通过采用上述策略,您可以确保部署过程的自动化、可靠性和高效性,从而将专注点放在开发上面。无论是通过Maven的生命周期命令进行打包,还是通过容器技术对部署过程进行优化,选择正确的工具与实践是成功实现这一目标的关键。
111 2
|
2月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
48 0
|
4月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
49 1
|
4月前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
3月前
|
XML 前端开发 Java
Spring Boot与Spring MVC的区别和联系
Spring Boot与Spring MVC的区别和联系
|
4月前
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18
|
4月前
|
应用服务中间件
从代码角度戳一下springMVC的运行过程-spring16
从代码角度戳一下springMVC的运行过程-spring16
下一篇
无影云桌面