一,什么是SpringBoot:
SpringBoot是当前很火的一种快速开发框架,可以更快的整合第三方框架。
可以从四个方面来说明SpringBoot
- 与Maven依赖关系,继承Maven
- 完全注解化,简化了传统Spring框架的XML配置
- 内置Http服务器,默认Tomcat服务器
- 以java应用程序进行执行(即main()方法)
二,创建一个SpringBoot项目
SpringBoot 2.0框架需要JDK版本必须是JDK8及以上,同样建立一个maven-webapp项目,war类型,在pom.xml中加入常用依赖信息:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
点进这段配置之中,会看到关于SpringBoot中dependencies
再点进去,会发现里面封装很多的jar包配置信息,这里就只截取一段代码图
这里就和开始我提到的SpringBoot定义中的Maven依赖继承关系,parent封装了常用jar与版本号,同时也可以稍微理解SpringBoot快速的原因了,对常见的一些依赖关系进行了封装直接从父类中拿就行了。
看到这儿话不多说,直接整合一下SpringMVC
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 不需要版本号,因为parent中都封装了版本号 -->
</dependency>
SpringBoot是全注解的方式,内置 Http服务器的同时,也就是我们在使用框架的时候,不用再配置web.xml。下面写一个控制层,通过java应用main方法来启动
@Controller
public class FirstSpringBoot {
@ResponseBody
@RequestMapping("/firstSpringBoot.action")
public String toSpringBoot(){
return "My First SpringBoot Cs";
}
}
@SpringBootApplication
public class App {
/**
* 整个程序的入口,启动SpringBoot内置的Tomcat默认服务器,使用tomcat加载SpringMVC 注解启动类
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
启动main方法
来到服务器端:
通过ResponseBody返回json数据到前台服务器。
三,SpringBoot三种装配方法
上面的App.class用到了注解@SpringBootApplication,这是一种装配注解,另外还有两种注解
@EnableAutoConfiguration
嵌套装配注解
@EnableAutoConfiguration
@ComponentScan("*.*")
对于三种注解的解释:
封装 配置相关的注解与配置代码
* 装配方法1:@EnableAutoConfiguration: 自动装配
* 默认扫包范围:当前类里面
* 装配方法2:@EnableAutoConfiguration
* @ComponentScan("com.yc")
* 扫描指定包下的所有类
* 装配方法3:@SpringBootApplication
* 扫描当前包和同级子包
* 缺点:对性能的优化并不好
我的包结构如此:
四,访问静态资源
这里就以访问一张图片为例吧,SpringBoot访问静态资源的默认地址为src/main/resources 下的资源
这里创建一个static文件包,里面放入图片同样用App.class进行启动
访问时注意:访问url中不可以出现static,如果需要static,建双重文件夹static
五,Freemarker视图层 -------- 渲染web视图
1,导入依赖:
<!-- freemarker依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
这个比较简单,直接进行挂代码测试结果(默认src/main/resources 下的Templates中 .ftl文件)
@Controller
public class FtlIndex {
@RequestMapping("/ftlIndex.action")
public String ftl(Map<String,String> map){
map.put("name", "fyh");
map.put("age", "21");
map.put("sex", "男");
//默认跳转后缀为 .ftl
return "FTlIndex";
}
}
六,整合jsp 视图
/**
* JSP整合SpringBoot
* @author Administrator
*
*/
@Controller
public class JspController {
@RequestMapping("/jspIdex.action")
public String indexJsp(){
return "index";
}
}
jsp中的内容
运行结果:
七,全局捕获异常:
作用:
为了避免代码中多个try...catch..,全局捕获异常可以减少代码的冗余度
应用于日志中,监视代码问题
全局捕获异常有两种方式,我主要说明一下json数据的方式
1,全局捕获类:
@ControllerAdvice(basePackages="com.yc.controller")
public class ErrorCatchException {
/**
* 返回的json数据(方法一)
* 使用ModeAndView返回一个页面报异常(方法二)
* @return
*/
@ResponseBody
@ExceptionHandler(RuntimeException.class)
public Map<String,Object> runExce(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("errorCode", 500);
map.put("errorMsg", "系统错误");
return map;
}
}
2,写一个异常类测试
@Controller
public class ErrorException {
private static final Logger logger = LoggerFactory.getLogger(ErrorException.class);
@ResponseBody
@RequestMapping("/error.action")
public String Error(){
logger.info("Spring集成日志");
int i=0;
int j=1/i;
return "success" + j;
}
}
测试演示
八,整合日志log4j
引入依赖:
<!-- 日志依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
下面是我的日志请求内容与记录,返回
@Aspect
@Component
public class WebLogAspect {
private static final Logger logger = LoggerFactory.getLogger(ErrorException.class);
@Pointcut("execution(public * com.yc.controller.*.*(..))")
public void webLog(){
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint){
//接收到的请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//记录以下请求内容
logger.info("URL:" + request.getRequestURL().toString());
logger.info("HTTP_METHOD:" + request.getMethod());
logger.info("IP:" + request.getRemoteAddr());
Enumeration<String> enu = request.getParameterNames();
while(enu.hasMoreElements()){
String name = (String)enu.nextElement();
logger.info("name:{},value:{}",name,request.getParameter(name));
}
}
@AfterReturning(returning ="obj", pointcut="webLog()")
public void doAfterReturning(Object obj){
//处理完请求,返回内容
logger.info("RESPONSE: " + obj);
}
}
上面的异常测试类,日志输出内容演示
自学的SpringBoot基础内容就到这里了,如果还有什么不足也请留言告知,共同进步。