目录
服务端的性能和安全
一、技术架构及开发环境
技术架构
Spring Boot
Spring、Spring MVC、MyBatis (ssm框架)
Redis(No SQL数据库,提高服务器处理能力)、Kafka(消息队列)、Elasticsearch(搜索引擎)
Spring Security(提高性能安全)、Spring Actuator(系统运行状况)
开发环境
构建工具:Apeache Maven
IDE:idea
数据库:MySQL,Redis
应用服务器:Apache Tomcat
版本控制:Git
SpringBoot核心作用:起步依赖、自动配置、端点监控
二、Spring
1.Spring全家桶
Spring Framework
Spring Boot
Spring Cloud(项目不涉及)
Spring Cloud Data Flow(也不涉及)
2.Spring Framework
Spring Core
--IOC(面向对象)、AOP(面向切面)(管理对象,Spring的对象一般叫做bean)
Spring Data Access
--Transaction(管理事物)、Spring Mybatis(数据库)
Web Servlet
--Spring MVC
Integration
--Email、Scheduling、AMQP、Security
3.Spring IoC
·Inversion of Control
控制反转,一种面向对象的设计思想,减少bean之间的耦合
·Dependency Injection
依赖注入,是IoC思想的实现方式
·IoC Container
IoC容器,是实现依赖注入的关键,本质上是一个工厂
4.Spring学习
容器是自动创建的
1.容器管理bean:
①创建bean:
在bean前声明@Primary 可以让容器优先选
在@Respository(“XXX”)给他命名作唯一化
②初始化和销毁bean
以AlphaService为例:
添加注解 @PostConstruct 表示方法会在构造器后调用 然后写初始化方法
添加注解@PreDestroy 表示在销毁对象之前会调用这个方法,可以在方法里释放资源
被容器管理bean是单例的,只被实例化一次,getbean多次只返回同一个hashcode值
通过增加注解 @Scope(“prototype”)每次getbean都实例化一个
③装配第三方的bean
自己写一个配置类来装配第三方bean,新建包名为config,把配置类都写在里面,配置类的注解为@Configuration。
在方法前加注解@Bean,方法名就是bean的名字。
用于让bean被扫描的注解 Controller(处理请求)、Repository(数据库访问的注解)、Component(什么地方都能用)、Service(业务组件)、Configuration(声明配置类)
④以上都是主动获取bean的方式,下面介绍依赖注入
添加注解@Autowired
//注解加载成员变量之前,也可以写在set,构造器之前
@Autowired
//表示想要哪个bean,自定义的名称默认的都可以
@Qualifier(“XXX”)
//表示要求Spring容器将AlphaDao注入给属性alphaDao
private AlphaDao alphaDao;
5.由controller处理浏览器请求,调用service组件处理当前业务,业务组件调用dao访问数据库。
service内注入dao内的接口,创建方法返回所需的数据库内的数据
在controller中将service注入,然后创建方法用来处理service返回的数据
每个dao接口要有一个impl用于实现
二、Spring MVC入门
1.http协议(基于TCP的超文本传输协议)
用于传输Html等内容的应用层协议,规定了浏览器和服务器之间如何通信以及通信时的数据格式
2.Spring MVC
三层架构:表现层,业务层,数据层
MVC:Model:模型层;View:视图层;Controller:视图层 (MVC主要解决表现层的东西)
核心组件:前端控制器DispatchServlet 理解怎么调度MVC三层代码
3.模板引擎Thymeleaf: 生成动态HTML的模板引擎
常用语法:标准表达式、判断与循环、模板的布局。
在applications.properties里把Thymeleaf的缓存关掉
4.Spring MVC
视图层:先写controller;再写模板引擎的template
5.HttpServletRequst和HttpServletResponse
HttpServletRequst 获取请求数据
public void http(HttpServletRequest request, HttpServletResponse response) {
// 获取请求的数据
System.out.println(request.getMethod());
System.out.println(request.getServletPath());
Enumeration<String> enumeration = request.getHeaderNames();
//是以key-value形式的数据
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
String value = request.getHeader(name);
System.out.println(name + ": " + value);
}
System.out.println(request.getParameter("code"));
// 向浏览器返回响应数据
//设置返回数据的类型
response.setContentType("text/html;charset=utf-8");
//利用输出流向网页返回相应数据
try (
//java7中 在try括号内写writer,最后会自动通过finally将 writer关闭,前提是这个类要有close方法
PrintWriter writer = response.getWriter();
) {
writer.write("<h1>牛客网</h1>");
} catch (IOException e) {
e.printStackTrace();
}
}