一、Servlet
Java类。由Servlet容器(Tomcat)进行编译->.class ->运行 产生响应结果返回给客户端浏览器。
生命周期:(方法调用流程)
init:初始化方法。在第一次访问servlet时被调用一次。
service:完成servlet所做功能。每次访问servlet时都会被调用。
doGet0:只有get请求。才能访问。
doPost0:只有post请求。才能访问。
destory:销毁。tomcat内存不足、很长时间没有使用、tomcat关闭时。
•四大作用域:
page:当前页面。当前页面不需要通过作用域传值。都是通过全局变量进行传递值,很少使用。
request:请求域。在一次请求中能传递值。一次请求中可以发生多次转发(服务器内部跳转,不会重新发起请求,所以还是一个请求),无论是从一个servlet方法
转发到另外一个servlet中,还是从servlet转发到jsp中,还是从jsp转发到jsp中,因为这个对象没有变,所以这个对象中设置的属性值(作用域值)是一直可以获取的
session:会话。只要浏览器没有关闭(浏览器没有关闭,cookie就不失效,服务器session对象就不会销毁)、没有超出默认时间、tomcat关闭。application:只要不关闭tomcat一直能用。当tomcat启动时,会给每个项目都创建一个application对象。
•如何给作用域设置值和获取值和移除值得API
setAttribute(key,value);
getAttribute(key)
removeAttribute(key);移除值。
●JSP
九大内置对象:当tomcat在解析jsp时会自动创建的9个对象。在jsp文件中可以通过固定的9个对象名直接调用这九个对象。page:当前页面对象。
request:请求对象。
getParameter("name")返回值String。获取请求参数。
session:会话对象。
invilalidate0;销毁session对象。
setMaxlnactivelnterval0;设置session最大存活时间。如果没有设置,默认为tomcat中配置的最大存活时间。
application:应用程序对象。
response:响应对象。
response:sendRedirect0;重定向。
response.addCookie0;把cookie对象设置到响应中。
out:输出对象。
out.println0;
exception:异常对象。
config:配置对象。
●Spring Framework
IOC/DI:1OC控制反转。需要由程序员手动实例化对象的过程转交给SPring进行管理。只有这些对象都交给Spring进行管理了(放在Spring容器中(Container)),容器内部所有依赖的对象可以进行注入(DI)
●spring注入的几种方式
1.set注入(设置注入)
2.构造注入
3.工厂注入(实例工厂、静态工厂)
•<bean>标签的scope属性可取值及默认值
singleton:单例。
prototype:多例。
AOP:面向切面编程。
切点:方法。
切面:由多个切点形成切面。
对方法进行扩展。
通知(Advice)的分类:
前置通知。在切点之前执行事情。
后置通知。后面执行的事情。
环绕通知。把前置和后置合并。
●声明式事务:只需要通过简单的声明,告诉Spring哪些方法需要进行事务管理,所有事务相关代码都不需要由程序员进行编写。实现了只声明方法就可以实现事务管理的机制。
编程式事务:需要由程序员编写事务的开启、提交、回滚代码。
•如何判断是否需要进行回滚?
判断方法是否出现异常。只要有声明式事务的方法里面绝对不会进行异常处理 (try..catch)
isolation:(隔离级别),只有在多线程编程中(高并发)才能出现的情况。当出现多人同时访问数据库某个表或行数据时如何保证数据的安全性。
脏读、不可重复读、幻读。
ISOLATION_DEFAULT 使用后端数据库默认的隔离级别。
ISOLATION READ UNCOMMITTED 允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
ISOLATION READ COMMITTED 允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。
ISOLATION REPEATABLE READ 对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。
ISOLATION SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。
propagation(传播行为):出现在当一个方法调用另一个方法的场景中。(这些方法必须出现多个DML操作)
PROPAGATION_REQUIRES 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。
PROPAGATION SUPPORTS 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION MANDATORY 表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常。
PROPAGATION REQUIRES NEW 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION NOT SUPPORTED 表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION NEVER 表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。
●Spring MVC
•@Controller
@RestController相当于所有类中方法都有@ResponseBody
•@RequestMapping
@ResponseBody根据项目中导入的Jackson依赖,把方法返回值转换为json或xml等。
•@CrossOrigin跨域。在响应头中添加允许跨域参数。Access-Control-Allow-Origin*
浏览器同源策略。通过domain(域)域名或ip或端口
•@PathVariable Restful请求时获取参数的注解。
请求中出现/xxxx/mmm/nnn时如果需要获取nnn的值
@RequestMapping("/xxx/mmm/(name")
public String demo(@PathVariable String name=)
•@RequestParam 请求参数
public String demo(@RequestParam("name") String name123)
public String demo(@RequestParam(defaultValue="默认值")String name123)
public String demo(@RequestParam(require=boolean) String name123)是否必须有此参数。如果不满足报异常。
•@RequestBody把请求体中数据转换为对象。常用在通过请求体传递Map或实体类等参数值。
注意get方式没有请求体,常用post时才能有请求体数据。一个post请求只能有一个请求体数据。
•@RequestHeader("请求头参数名”)获取请求头参数
●Maven
•本地仓库,中央仓库。
•优先通过坐标(Artifact Id、group id,version)去本地仓库找,如果找不到,去中央仓库。
•基于pom模型。项目相当于一个对象。项目和项目之间的关系
依赖(dependency)关系
继承(extends)继承的是父项目的pom.xml
•项目类型:
jar:java可执行文件。可以是一个独立web项目,也可以就是工具包。
war:web jar。web项目。打包成war可以直接放入到tomcat中进行运行。
pom:聚合项目中的父项目。
●EasyUI:前端框架,适用做后台项目或管理类型项目。
●RBAC:在做权限时数据库设计的方案。基于角色的权限控制。核心:有角色表。
●Spring Boot支持的配置文件类型
支持的配置文件类型,properties、.yml、yaml其中常用的就是.properties和.yml功能是等效的。区别在于文件内容的格式。
•properties文件格式 key=value
•yml 文件格式
注意:value和c:中间必须有个空格。
当value为特殊字符时(、*)时必须被单引号包含 `:´,`*´
虽然yml文件格式看起来是带有缩进的形式,但是被编译后还是properties文件格式。
优点:
key写起来更加简洁。
缺点:
格式必须严格对齐。缩进是经常出错的地方。