牛客中级项目学习:
Controller 解析web请求
Service 业务层
DAO(data access object)数据处理层
database 底层数据库
重定向
代码如下:
@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.");
return "redirect:/";
}
redirect前缀,跳到首页,默认是302跳转。
从一个页面跳到另一个页面,所有的访问都是同一个HttpSession,可以在redirect中添加session的一些特性,返回到首页的时候,把session的信息读取出来,显示在首页。用户体验较好。
301和302的区别
301是终究迁移,如果是301,会把信息存入浏览器,下次浏览器访问网址,会直接定位到另一个地方。
301是临时迁移。
Spring IOC
IOC控制反转 spring 体现在代码中就是用依赖注入的方法定义一个service,
不用再Controller层中去创建一个service 能够把实现写在单独的地方,把用到的地方在注入进来,没有初始化顺序,类与类之间的依赖这些烦恼
通过配置互相引入,通过注解方式或者配置文件方式注入类。
两种方式:
一、注解
二、xml配置文件 实现类与类之间的关系
AOP
面向切面,适用于不是特定任务的,所有服务都会用到的任务。
日志业务部门,所有服务需要打log。
需求:所有机器在运行,肯定会调用很多controller的入口,统计每个入口情况,如每个页面打开次数,每次打开时间。现在有很多服务,用log将所有服务切下来。
Spring AOP底层Aspectj
代码如下:
@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: ");
}
}
JoinPoint是个包装类,相当于面向切面的交汇点,通过getArgs方法可以获得所有的进入controller的输入参数。
可以在afterMethod和beforeMethod中记录时间,相减就得到了服务的运行时间。 可以做优化,日志统计,报警。
第二节课
数据库字段设计
数据库基本操作
MyBatis集成
MyBatis 可以通过注解和xml的方式操作数据库,只关心读取写入,不用关心数据库如何连接的。
xml方式操作数据库比注解的好处是可以进行逻辑复杂的操作
MyBatis框架的好处,只关注sql语句获取数据,