目录
一、SpringMVC简介:
二、SpringMVC快速入门:
三、SpringMVC bean的管理:⭐
①配置bean
②扫描bean
四、SpringMVC配置类:⭐
五、SpringMVC 请求与响应
六、SpringMVC REST风格
七、SSM整合 异常处理:
八、SSM整合流程:⭐
九、SpringMVC 拦截器:
一、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")@ResponseBodypublic 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使用@Beanpublic 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的自动装配@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setTypeAliasesPackage("com.itpan.domain");return factoryBean;}// 配置扫描Dao包下的bean@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.itpan.dao");return msc;}
}
ServletConfig配置类:
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMVCConfig.class};}// 拦截路径@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}
SpringMVC配置类:
@Configuration
@ComponentScan({"com.itpan.controller"})
@EnableWebMvc
public class SpringMVCConfig {
}
九、SpringMVC 拦截器:
见文章:http://t.csdnimg.cn/JqJ6b