目录
一、 SpringBoot
1.基本介绍
Spring Boot将很多魔法带入了Spring应用程序的开发中,其中最重要的是以下四个核心:
自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
命令行界面:这是Spring Boot的可选特征,借此你只需要写代码就能够完成完整的应用程序,无需传统的项目构建。
Actuator:让你能够深入运行中的Spring Boot程序,一探究竟。
可以使用Spring INITIALIZR创建一个SpringBoot项目。添加一些基础依赖,把项目的脚手架弄好。
2. Spring对于请求的响应模型
二、HTTP Method
三、Velocity 基础语法
“ ” 双引号里的东西,才会对模版语言进行解析,‘ ’ 单引号则直接输出文本。
$!{变量/表达式}:如果有值则输出,如果为空,则不显示;
${变量/表达式}:如果有值则输出,如果为空,则将该代码原样输出;
## 注释
#*
多行注释
*#
for 循环:
#foreach($color in $ colors)
Color $!{foreach.count} / ${foreach.index} : $!{color}
#end
模版继承:
include 纯文本继承
parse 变量解析
四、Response/Request
@CookieValue
value:参数名称
required:是否必须
defaultValue:默认值
@RequestMapping(value = {"/response"})
@ResponseBody
public String response(@CookieValue(value = "nowcoderid", defaultValue = "a") String nowcoderId,
@RequestParam(value = "key", defaultValue = "key") String key,
@RequestParam(value = "value", defaultValue = "value") String value,
HttpServletResponse response) {
response.addCookie(new Cookie(key, value));
response.addHeader(key, value);
return "NowCoderId From Cookie:" + nowcoderId;
}
五、重定向/error
重定向:
301: 永久转移
302:临时转移
@RequestMapping("/redirect/{code}")
public String redirect(@PathVariable("code") int code,
HttpSession session) {
/*
//强制跳转到首页
RedirectView red = new RedirectView("/", true);
if (code == 301) {
red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
}
return red;*/
session.setAttribute("msg", "Jump from redirect.");
//下面这种跳转默认是302跳转
return "redirect:/";
}
@RequestMapping("/admin")
@ResponseBody
public String admin(@RequestParam(value = "key", required = false) String key) {
if ("admin".equals(key)) {
return "hello admin";
}
throw new IllegalArgumentException("Key 错误");
}
//Spring MVC外的Exception或Spring MVC没有处理的Exception
@ExceptionHandler()
@ResponseBody
public String error(Exception e) {
return "error:" + e.getMessage();
}
六、IoC(控制反转)
依赖注入:
一种通过注解:@Autowired
还可以通过配置文件xml进行注入
七、AOP
@Aspect
@Component
public class LogAspect {
//日志记录
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Before("execution(* com.nowcoder.controller.*Controller.*(..))")
public void beforeMethod(JoinPoint joinPoint) {
StringBuilder sb = new StringBuilder();
for (Object arg : joinPoint.getArgs()) {
sb.append("arg:" + arg.toString() + "|");
}
logger.info("before method: " + sb.toString());
}
@After("execution(* com.nowcoder.controller.IndexController.*(..))")
public void afterMethod(JoinPoint joinPoint) {
logger.info("after method: ");
}
}