【无标题】

自学笔记


Java核心技术:

多线程(线程同步、通信)、网络编程(Socket、SocketServer)、
IO(字节、字符、缓冲流、转换流)、序列化和反序列化、流式思想(数组集合.stream()、Stream.of)、
函数式接口(Supplier、Consumer、Predicate、Function)
单元测试、反射机制(将类的各个组成部分封装为其他类)、
注解:注解属性可用类型:基本数据类型、注解、枚举、String、以上数组
预定义注解:@Override、@Deorecated、@SupressWarings(“all”)
元注解@Target、@Retention、@Documented、@Inherited
解析(使用)注解:获取注解定义的位置的对象、getAnnotation()获取指定注解、调用注解的抽象方法获取配置的属性值

Javaweb:

一、数据库:DDL、DML、DQL、DCL、
DCL:在数据库mysql的user表中
添加用户:create user ’ 用户名’@'主机名 ’ identified by ‘密码’
删除用户:drop user ‘用户名’@‘主机名’
修改密码:update user set password=password(‘新密码’) where user='用户名’或
set password for ‘用户名’@‘主机名’=password(‘新密码’)
无验证密码登录:mysqld --skip-grant-tables
用户权限查询:show grant for ‘用户’@‘主机’
用户权限授予:grant xx on 数据库.表 to ‘用户’@‘主机’
用户权限撤销:remove xx on 数据库.表 from ‘用户’@‘主机’
约束:主键约束primarykey、唯一约束unique、非空约束notnull、外键约束foreignkey
级联:On UPDATE[DELETE] CASEDE。范式
备份和还原:mysqldump -uroot -proot 数据库名 > 文件路径;source 文件路径
多表查询:
内连接查询(1使用where条件隐式2使用inner josin显式查询)
外连接查询(left outer join)左(右)表的全部以及子集
子查询:查询嵌套查询。
单行单列结果:子查询可以作为条件,运算符><做判断。
多行单列:子查询可以作为条件,in做判断条件
多行多列:子查询作为一张虚拟表参与查询
***事务:包含多个操作,要么都成功要么都失败。mysql自动提交事务,如果开启了事务就要手动提交
开启事务:start transaction;rollback;commit;
提交事务:select @@autocommit;–1自动提交,0–手动提交
事物的四大特性:原子性、持久性、隔离性、一致性
事务隔离级别:
查询隔离级别:select @@tx_isolation;
设置隔离级别:set global transaction isolation level 级别字符串;
脏读:读到另一个事务中没提交的事务
不可重复读(虚读):一个事务中两次读的数据不一样
幻读:一个事务正在执行未提交,另一个事务操作时不能进行自己的修改
read uncommitted(读未提交)–>脏读、不可重复读(虚读)、幻读
read committed(oracle默认,读已提交)–>不可重复、幻读
repeatable read(mysql默认,可重复读)–>幻读
serializable(串行化)–解决所有问题
安全性越来越高,效率越来越低

***JDBC:导入驱动jar包->注册驱动(DriverManager)->获取数据库连接对象(Connection)->写sql->
获取执行sql的对象statement->steatement执行sql->释放资源
DriverManager:注册驱动、获取数据库连接
Connection:获取sql执行对象statement、管理事务
数据库连接池:C3p0(放到类路径c3p0.properties或c3p0-config.xml)和Durid
c3p0:数据库连接池对象ComboPooledDataSource获取连接,归还连接池connection.close()
Druid:工厂类DruidDataSourceFactory.createDatasrouce()获取连接
Spring JDBC:Spring跨关键duiJDBC简单封装提供了JDBCTemplate
queryForMap:一条记录的封装
queryForList:多条记录的封装
query:封装为JavaBean对象,传入参数RowMapper接口。一般使用已经定义好的BeanPropertyRowmapper对象
queryForObject:一般为聚合函数的封装


二、前端

HTML+CSS+JavaScript
**JavaScript:ECMAScript(基础语法)+BOM+DOM
1.ECMAScript:
JavaScrpit的基本对象:
Function:function的内置对象arguments数组表示参数的封装
Array:元素类型可变,数组长度可变
Date:getTime(毫秒值),tolocalString(时间转为字符串)
Math:ceil向上舍入、floor向下舍入、roud四舍五入至最接近
RegExp:\d:单数字,\w:单字符,{m,n}m到n,[m,n]m或n,
:0或多 +:1或多?:0或1,^:开始,$:结束
正则格式:new RegExp(“正则表达式”)或 =/正则表达式/;在字符串中的正则表达式使用双反斜杠
Global:全局对象
encodeURI()、decodeURI()、parseInt(逐一判断是否为数字,将数字部分转为number)、isNaN(六亲不认)、eval()将字符串转为Javascript
2.BOM:浏览器对象模型
Navigator(浏览器对象)、window、history、location、Screen
window:可以省略。alert、confirm(确认取消对话框)、prompt(用户输入框)、open、close、setTImeout()、setInterval()、clearTimeout()
localtion:reload()、href属性
history:forword()、back()、go(正数或负数)、length属性
3.DOM:文档对象模型。控制html文档内容,将标记语言文档各个部分封装为对象,对琪进行CRUD操作
DOM:核心DOM、XML DOM、HTML DOM
核心DOM:Document、Element、Attribute、Text、Comment、Node
HTML DOM:innerHTML、style
XMLDOM
DOM里的事件:点击事件、加载事件、鼠标事件(定义形参接收 even对象)、键盘事件、改变事件、提交事件(返回false就会阻止提交)

BootStrap:响应式布局,同一个页面兼容不同分辨率的设备,依赖于栅格系统

XML:可扩展标记语言,标签自定义。主要用于存储数据(配置文件、在网络中传输)
第一行必须是文档声明,有且只有一个根标签,区分大小写
CADATA区:<[!CDATA[]]>中的文本原样展示
xml的约束:DTD(.dtd)和Schema(.xsd)
DTD引入:或
1.填写xml文档的根元素
2.引入xsi前缀. xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
3.引入xsd文件命名空间. xsi:schemaLocation=“http://www.itcast.cn/xml student.xsd”
4.为每一个xsd约束声明一个前缀,作为标识 xmlns=“http://www.itcast.cn/xml”

XML 解析思想:DOM思想*(将标记语言文档一次性加载进内存,可以增删改,占内存)和SAX思想(逐行读取不能增删改,不占内存)
XML解析器:JAXP、DOM4j、Jsoup、PULL
Jsoup:Jsoup.parse()返回Document对象;,document.getElementsByxx()返回Elements数组,Elements数组.html(),Elements数组.text()
selector:document.select(选择器字符串)返回标签,详见文档
Xpath:通过Jsoup获取Document。创建JXDocument对象,传入document对象,jxDocument.selM()详见文档


三、web核心

1.Tomcat和Servlet
web项目部署:
1、将项目放到webaps目录下或打成war包
2、conf/serever.xml中host标签中
3、在conf/Catalina\localhost创建人任意名xml文件,,虚拟目录即文件名
Servlet:运行在服务器端的小程序
配置Servelt:1、实现Servelt接口在web.xml中配置servlet映射2、注解配置@WebServlet(urlPatterns=“资源路径”)或@WebServelt(“”)
Servlet生命周期:被创建init(默认第一次访问被创建,servlet标签下的的值为负数)、提供服务service()、被销毁destory()
Servlet体系结构:Servelt、GenericServlet(对Servlet定义的方法进行了空实现)继承自Servlet、HttpServlet(继承自GenericServlet)

HTTP:Request和Response
Request:Service;ServletRequest(接口)、HttpServletRequest(接口)继承ServletRequest、RequestFacade实现HttpServletRequest
请求行:请求方式 /url 请求协议/版本
request.getMethod、request.getRequestURI()、request.getRequestURL()、getProtocal()协议及版本、getContextPath()虚拟目录、getServletPath()Servelt路径
请求头:键值方式,user-agent、referer(告诉浏览器请求从哪来,防盗链,统计工作)
request.getHeader()、request.getheaderNames()
请求空行:空行,分割POST请求头和请求体
请求体:封装POST请求的请求参数。requset.getReader()、getInputStream()
获取请求参数:getParameter()获取参数值、getParameterValues()参数值、getParameterNames()参数名称、getParamerterMap()
解决中文乱码:setCharacterEncoding(“utf-8”)
转发:request.getRequestDispatcher.forword(),地址栏不发生变化,只能在服务器内部资源转发,转发是一次请求
共享数据:域对象
request域:setAttribute()、getAttribute()、removeAttribute()
BeanUtils:封装JavaBean(类public修饰,成员变量private修饰,有公共的seetter和getter,必须要空参的类)
BeanUtils.populate()封装getParameterMaps()中获取的 参数

Response
响应行:协议/版本 状态码 状态描述
状态码:1xx(服务器响应正在进行)、2xx(成功)、3xx(重定向302重定向304访问缓存)、4xx(客户端错误404路径405doxxt())、5xx(服务器错误)
响应头(Content-Type相应体数据格式和编码、Content-disposition以什么格式打开响应体数据,默认in-line当前页面打开,attachment附件打开)
响应体(就是html)
响应空行
重定向:2、response.setStatus(“302”);resopnser.setHeader(“location”,“资源路径”)2、responser.serndRedirect(“资源路径”)
重定向地址栏变化,可以访问外部资源,是两次请求
相对路径和绝对路径:相对路径以.开头,绝对路径以/开头,绝对路径给客户端使用要加虚拟目录(重定向),给服务器不需要虚拟目录(转发)
中文乱码:response.setHeader(“content-type”,“text/html;charset=0utf-8”)或respnse.setContentType(“text/html;charset=utf-8”)

ServletContext:获取MIME类型(互联网中传输的文件类型)、
获取文件的真实路径:servletContext.getRealPath()。src:/WEB-INFO/classses/xxx,web:/xx, WEB_INFO:/WEB-INFO/xx)、
资源共享:getAttribute()、setAttribute()、removeAttribute()
图片可以被浏览器解析,视频不能所以指向servlet传入文件名称

会话:会话包含多次请求,客户端给服务器发送第一次请求开始直到断开,请求共享数据
客户端会话:Ciokie,服务器会话:session
Cookie:通过内部设置响应头set-cookie和请求头cookie实现,new Cookie(String name,String value)->response.addCookie(cookie);->request.getCookies()
一次可以发送多个cookie,多次调用response.addCookie()
默认Cookie当浏览器关闭被销毁,使用cookie.setMaxAge(int seconds)持久化存储;正数过时间或自动删除,0删除cookie;负数默认值
tomcat8后支持cookie存储中文
cookie的共享:默认情况不同虚拟目录的cookie不能共享,使用setPath(“/”)设置cookie获取的范围,
不同tomcat服务器共享cookie,setDomain(“”)如果一级域名相同可以共享
Cookie一般用于存储不太敏感的少量数据

Session:session是依赖于cookie的
获取session共享数据:request.getSession();session.getAttribute(),session.setAttribute();
关客户端不关服务器:默认session不同,相同:new Cookie(“JESSIONID”,session.getID),设置存活时间cookie.setMaxAge(),让cookie持久化存储
关服务器不管客户端:默认不同,相同:通过session钝化(将session序列化)和session活化(反序列化)完成,Tomcat会完成
session什么时候销毁:session.invalidate(),默认30min销毁(web.xml中可以修改session-timeout),服务器关闭

JSP本质上是一个Servlet可以写html又可以写java代码,服务器收到.jsp的请求把它转为.java->.class让服务器可以解析JSP
JSP脚本:<% 代码%>;<%! 代码%>成员变量;<%= 代码%>输出到页面上
JSP指令:<@% 属性=属性值,属性=属性值 … %>
page:配置jsp页面。contentType、errorPage、isErrorPage(为true获取内置对象exception)
include:包含其他文件
taglib:导入资源
JSP注释: 只注释html或<%-- --%>注释html和java
JSP内置对象:
pageContext:当前页面共享数据,可以获取其他八个对象
request:
session
application:所有用户共享 —ServletContext对象
resonse:
page:当前页面(servlet)的对象 this
out:
config:Servlet的配置对象
exception:

EL 表达式简化 j s p 中的 j a v a 代码; J S P 默认支持 E L 设置 p a g e 指令的 i s E L I g n o r e d = " t r u e " 或 { {表达式}简化jsp中的java代码;JSP默认支持EL设置page指令的 isELIgnored="true"或\{ 表达式简化jsp中的java代码;JSP默认支持EL设置page指令的isELIgnored="true"{表达式}忽略EL表达式
EL获取值: 域名称 . 键名 p a g e C o n t e x t S c o p e 、 r e q u e s t S c o p e 、 s e s s i o n S c o p e 、 a p p l i c a t i o n S c o p e 获取对象的值: {域名称.键名}pageContextScope、requestScope、sessionScope、applicationScope 获取对象的值: 域名称.键名pageContextScoperequestScopesessionScopeapplicationScope获取对象的值:{域名称.键名.属性}
获取List的值: 域名称 . 键名 [ 索引 ] 获取 M a p 的值: {域名称.键名[索引]} 获取Map的值: 域名称.键名[索引]获取Map的值:{域名称.键名.key}或 域名称 . 键名 [ " k e y " ] E L 运算:空运算 {域名称.键名["key"]} EL运算:空运算 域名称.键名["key"]EL运算:空运算{empty list}判断字符串、集合数组是否为对象null或长度是否为0、逻辑运算、算数运算

JSTL:JSP标准标签库,简化和替换JSP的java代码
if(test属性)、choose(when和otherwise)、
循环:foreach(begin、end、var、step、varStatus.index从0开始、varStatus.count循环次数)
遍历::foreach(items、var、varStatus)

JavaWeb三大组件:Servelt、Filter、Listener
Filter过滤器:一般用于完成通过用操作。登录验证、统一字符编码、敏感词
实现Filter接口->配置@WebFilter()->放行doFilter()方法中编写FilterChain.doFilter()
Filter生命周期:init、doFilter、destory
拦截方式:注解中配置DispacherType属性。REQUEST、FORWOARD、INCLUDE包含访问资源、ERROR错误跳转资源、ASYNC异步访问资源
过滤器链:多个过滤器会按照过滤器名的字典顺序先后执行,web.xml配置的过滤器谁定义在上面谁先执行
过滤登录用户:在过滤器中将ServletRequest强转为HTTPServlet,requset.getRequestURI()判断是否包含登录相关资源
动态代理:Proxy.newProxyInstance();W
Listener:实现ServletContextListener接口,配置@WebListener()

2.JQuery:js的框架,本质就是js文件
JQuery和js对象不通用,js->JQuery: ( j s 对象 ) , J Q u e r y − > j s : J Q u e r y 对象 [ 索引 ] 或 J Q u e r y 对象 . g e t ( 索引 ) 入口函数: J Q u e r y : (js对象),JQuery->js:JQuery对象[索引]或JQuery对象.get(索引) 入口函数:JQuery: (js对象)JQuery>jsJQuery对象[索引]JQuery对象.get(索引)入口函数:JQuery(function(){})可以定义多次 js:window.οnlοad=function(){}只能定义一次会覆盖
样式: ( 选择器 ) . c s s ( ) ,选择器格式详见帮助文档 J Q u e r y 中获取值和赋值都是一条语句, (选择器).css(),选择器格式详见帮助文档 JQuery中获取值和赋值都是一条语句, (选择器).css(),选择器格式详见帮助文档JQuery中获取值和赋值都是一条语句,(“”).html()
JQuery中DOM操作:
内容操作:html()、text()、val()
属性操作:attr()自定义属性、prop()固有属性、removeAttr()、removeProp()
class操作:addClass、removeClass()、toggleClass()如果存在删除,如果不存在添加
CRUD操作:添加到内部:append()开头、prepend()结尾、appendTo、prependTo、添加到后边:after、before、insertAfter、insertBefor、emove、empty
clone():复制一个DOM元素
JQuery动画:
以下动画中参数speed,easing切换效果swing慢快慢linear匀速、fn
默认:show()、hide()、toggle()
滑动:slideDown()、slideUp、Slidetoggle()
淡入淡出:fadeIn()、fadeOut()、fadeToggle()
JQuery遍历:
1、jq对象.each(callback);callback:function(index,element){}。break->return false,continue->return true
2、 . e a c h ( o b j e c t , [ c a l l b a c k ] ) 3 、 f o r . . o f : j q u e r y 3.0 后可用, f o r ( l i o f c i t y s ) J Q u e r y 事件: .each(object,[callback]) 3、for..of:jquery3.0后可用,for(li of citys) JQuery事件: .each(object,[callback])3for..ofjquery3.0后可用,forliofcitysJQuery事件:().click(fn)、 ( ) . o n ( " c l i c k " , f n ) 、 ().on("click",fn)、 ().on("click",fn)().off(“click”,fn)不传参移除所有事件、 ( ) . t o g g l e ( f 1 , f 2 ) 1.9 版本被移除使用 M i g r a t e (迁移)组件恢复 J Q u e r y 插件:增强 J Q u e r y 功能增强获取的 J Q u e r y 对象: ().toggle(f1,f2)1.9版本被移除使用Migrate(迁移)组件恢复 JQuery插件:增强JQuery功能 增强获取的JQuery对象: ().toggle(f1,f2)1.9版本被移除使用Migrate(迁移)组件恢复JQuery插件:增强JQuery功能增强获取的JQuery对象:fn.extend({方法1:fn,方法2:fn})---->使用:jquery对象.方法名();
增强JQuery对象自身: . e x t e n d ( 方法 1 : f n , 方法 2 : f n ) − − − − > 使用: .extend({方法1:fn,方法2:fn})---->使用: .extend(方法1fn,方法2fn)>使用:.方法名();

3.Ajax和JSON
Ajax:异步的Javascript和xml
原生js实现Ajax:获取XMLHttpRequest,打开链接req.open(请求方式,url,true是否异步),req.send()发送请求,req.onreadystatechange()响应服务器的结果req.responseText()
. a j a x ( u r l : x x , t y p e : p o s t d a t a : x x ) 、 .ajax({url:xx,type:postdata:xx})、 .ajax(url:xx,type:postdata:xx).post(url,data,callback,type)、$.get(url,data,callback,type)
JSON:javascript对象表示法,用于存储和交换文本
遍历json:for(var key in json对象){json对象[key]}不能使用json对象.key
JSON与Java对象转换:Jsonlib,Gson、fastjson、jackson
jackson解析:核心对象Object
对象转JSON:ObjectMapper.writeValue(参数,对象)参数可以是File、Writer、OutputSteam。objectMapper.writeAsString(对象)
@JSONIgnore注解、@JSONFormat(pattern=“”)
JSON转对象:ObjectMapper.readValue(String表示的json,对象)
4.redis是一个高性能键值对非关系型数据库
redis数据结构:键值对
值的数据结构:
字符串string:set key value、get key 、del key
哈希hash:hset key field value、hget key field 、hdel key field
列表list:lpush key value、rpush key value、lrange key start end、lpop key、rpop key
集合set:sadd key value、smembers key、srem key value
有序集合sortedset:zadd key score value、zrange key start end、zrem key value
通用命令:keys *、type key、del key
redis持久化机制:
RDB默认,一定时间间隔,检测key变化持久化。配置文件redis.windows.conf中配置 save 900 1重启服务器,指定配置文件名称redis-server.exe redis.windows.conf
AOF:每次操作持久化。redis.windows.conf配置文件appendonly yes打开AOF,appendfsync everysec或appendfsync.always
Jedis:new Jedis()->jedis.set()->jedis.close(),jedis.setTex()设置指定时间过期的key和value
JedisPool:newe JedisPool().getResource()获取jedis对象
5.Maven:依赖管理和项目一键构建
仓库分类:本地仓库、远程仓库、中央仓库
Maven标准目录结构:
src/main/java:核心代码
src/main/resources:配置文件
src/test/java:测试代码
src/test/resources:测试配置文件
src/main/webapp:页面资源
常用命令:mvn clean、mvn compile、mvn test、mvn package、man install、mvn deploy
生命周期:以上


SSM:SpringMVC表现层、Spring业务层、Mybatis持久层11:48 2023/2/16
持久层技术:JDBC是规范,JdbcTemplate、DBUtils是工具类只是简单封装
Mybatis:
Mybatis编写Dao实现:
Resources类读取xml配置文件资源->SqlSessionFactoryBuilder工厂创建类生产SqlSessionFactory.buider()->factory.opensession()打开sqlsession对象
->session.getMapper()获取Dao的代理对象->使用代理对象的方法xxdao.方法
Mybatis的注解实现:@select(“sql语句”)
Mybatis的CRUD:
1.要在sqlsession.commit()提交事务才会生效,模糊查询’${value}'prepateStatement占位符,#{name}Statement字符串拼接
2.CRUD中插入insert没有返回id参数也没有传入id,所以要获取可以在insert标签中嵌入selectKey标签语句select last_insert_id();
当实体类属性名与数据库字段名不同:配置resultMap标签
SqlMapConfig.xml的Properties标签:Mybatis主配置文件SqlMapConfig.xml必须放在类路径,当想从外部引入配置文件通过propertys的resource属性
SqlMapConfig.xml的typeAliases标签:配置别名,其子标签和package子标签都可配置别名,后者包内所有的类都会注册别名,别名就是类名在mapper标签中也有此标签
Mybatis事务控制:factory.opensession(true)
Mybatis动态SQL:、、#{uid}
定义重复的代码,标签引用
多表查询:
一对一:resultMap标签中引入从表
一对多:resultMap标签引入
Mybatis延时加载:一对多,多对多;立即加载:多对一、一对一
延时加载:association标签的select属性指定查询类型(包名.findxxById),在主配置文件setting标签添加lazyLoadingEnabled延迟开关为true,aggressiveLazyLodaing为false
Mybatis缓存:不常改变、正确与否对结果影响不大的数据
一级缓存:就是Mybatis中SqlSession对象的缓存。Mybatis自带,存在于SQL session中,通过session.close()或session.clearCache()关闭一级缓存
二级缓存:就是Mybatis中SqlSessionFactory对象的缓存,使用时要在主配置文件setting标签cacheEnabled设置true,在映射文件中添加标签,select语句中useCahe为true
注解开发:实体类与数据库字段对应使用注解@Results(int id,@Result[] a),@Result(id,column,property),@ResultMap(“@Results的id值”)
@Result(column、property、@One、@Many)、@One(select、fetchType)、@CacheNamespace(blocking=true)开启二级缓存

Spring:
Spring分层的Java SE/EE应用full-stack轻量级开源框架,以Ioc控制反转和AOP面向切面编程为内核
创建Bean:
默认构造函数:在spring配置文件中使用bean标签,配置id和class属性
普通工厂中的方法创建对象:第一个bean标签引入工厂类,第二个bean配置factory-bean、factory-method引入第一个bean
工厂中的静态方法创建对象:bean标签直接引入工厂类中的创建对象方法factory-method
bean的作用范围:bean标签的scope属性singleton、prototype、request、session、global-session
bean的生命周期:单例对象:和容器对象一起出生活着死亡。多例对象:当使用对象spring才为我们创建,只要对象在使用就活着,只有长时间不使用java垃圾回收系统回收死亡
Ioc:控制反转,降低程序间的耦合
Bean管理对象创建:
创建核心容器ApplicationContext立即加载或BeanFactory(XmlBeanFactory已过时)延时加载
创建ApplicationContext实现类ClassPathXmlApplicationContext里的getBean()方法获取dao或service
创建ApplicationContext实现类FileSystemXmlApplicationContext里的getBean()方法获取dao或service
创建ApplicationContext实现类AnnotatioXmlApplicationContext里的getBean()方法获取dao或service
依赖转入:
注入的类型:基本类型、String、其他bean类型、复杂类型、集合类型
注入方式:
构造函数:bean标签的内部constructor-arg标签的name、type、index、value、ref属性
set方法:bean标签内部property标签的name、value、ref,复杂类型的注入:其property标签内部标签list、set等标签可以注入

基于注解的bean管理对象:@Component、@Controller、@Server、@Repository,在bean.xml配置context包扫描标签context:componen-scan
注解注入数据:
@Autowird按照类型自动注入,当容器有唯一bean类型匹配注入成功,如果有多个匹配按变量名匹配注入
@Qualifier在按照类型注入的基础上按名称注入,不能单独使用于类成员,要和@Autowird一起使用,但可以用于方法参数注入
@Resource按照指定id注入可以单独使用
以上不能注入基本数据类型和String。集合类型只能用xml注入
@Value用于注入基本数据类型和String
基于注解的作用域和生命周期:@Scope、@PreDestory、@PostConstruct
@Configuration相当于指定为bean.xml
@ConponentScan()相当于bean.xml的context:componen-scan标签
@bean相当于把当前方法的返回值作为bean对象存入spring的ioc容器中
@import导入其他配置类
@PropertySource(“classpath:xx”)指定propereies文件位置
Spring整合Junit:@RunWith(SpringJunit4ClassRunner.class)把原有的main替换为spring的运行器它会为我们创建容器、@ContextConfiguration(classes|locations)classes注解方式locationsxml方式
AOP:面向切面编程,通过动态代理的方式,在程序运行期间,不修改源码对原有方法增强
基于XML配置AOP:bean.xml中导入aop约束,配置要代理对象,<aop:config>表示AOP配置开始,内部标签aop:aspest配置切面(设置通知的类),其内部标签aop:beforemehod属性配置通知类型,
poincut属性建立通知和切入点的联系
前置通知aop:before、后置通知aop:after-returning、异常通知aop:after-throwing-、最终通知aop:after、环绕通知aop:around
环绕通知:环绕通知配置时,通知会执行但切入点方法没有执行。spring为我们提供了ProceedingJoinPoint接口,该接口的proceed()明确表达了调用切入点方法,在切入点方法的前后调用,就是前置或后置
通知。注意该通知方法有一个返回值,可用ProceedingJoinPoint的getArgs()方法返回获取
切入点表达式:execution(表达式)
标准式:访问修饰符 返回值类型 包名.包名…类名.方法名(参数列表),访问修饰符可以省略
全通配式:* .(…),…表示有无参数都可,可以是任意参数类型
常用式:
com.itcast.service..()
基于注解配置AOP:@Aspect、@Before、@After-Returning、@After-Throwing、@After、@Round、开启注解配置AOP还需在bean.xml中配置aop:aspectj-autpproxy标签支持注解AOP
注意:在使用注解配置AOP后置通知和异常通知会有顺序上的错误,而环绕通知没有
JdbcDaoSupport类的使用:dao层总要使用Jdbctemplate操作数据,spring帮我们把该方法抽取出来只需在bean中配置datasource并实现该类即可

基于XML的事务控制:
配置事务管理器DatasourceTransactionManager->配置事务通知tx:advice、->配置AOP切入点表达式->建立事务和切入点表达式的对应关系aop:advisor->配置事物的属性tx:advice的内部标签tx:attribute
事务的属性:isolation事务隔离级别、propagation事务传播行为、默认REQUIRED用于增删改,查询用SUPPORTS、read-only、timeout
基于注解的事务控制:@Transactional、tx:transationManager开启注解支持
编程式事务:TransactionTemplate.excute()
SpringMVC
DispatchServleter前端控制器、处理映射器HandlerMapping 、处理适配器HandlerAdapter
web.xml配置前端控制器,并初始化参数contextConfigLocation,加载springmvc.xml->@ResultMapping用于指定url与处理方法的映射->springmvc.xml配置context:component-scan标签->配置视图解析器对象InternalResourceViewResolver
->开启SpringMVC注解支持mvc:annotation-driven
@ResultMapping的属性:可以注解于类和方法,类上注解为1级域名方法上为2级url、params指定请求参数、header、method请求方式如何与注解属性不符就不会执行
请求参数的绑定:请求参数会封装在@ResultMapping修饰的方法的参数列表中,表单的name值要和封装的参数类型一致
请求参数封装为List、Map:name=list[0].uname、name=map[‘’].uname
解决请求参数的中文乱码:在servlet中可以用request.setContentType(),这里使用过滤器在web.xml配置过滤器CharacterEncodingFilter初始化参数encoding
自定义类型转换器:实现Convert接口,在springmvc.xml中注册自定义的类型转换器ConversionServiceFactoryBean将编写的实现类注册进来,最后开启conversion-service获取支持
获取原生ServletAPI只需在处理方法中写入参数HttpServlet
@RequestParam其name属性用于指定url的请求参数名、@RequestBody都定义在处理方法的参数上
处理方法返回值是String:处理方法传参数Model,存入数据在model域中在jsp页面上展示
转发:return “forword:路径” 重定向:return "redirect:路径"不用写getContextPath
响应返回值是void:默认会从视图解析器跳转到处理方法的jsp页面,接收HttpServletRequest和HttpServletResponse参数进行转发重定向
响应返回值是ModelAndView:传入参数ModelAndView,存入数据在model域中在jsp页面上展示,也可以setViewName()进入jsp页面
过滤静态资源:springmvc.xml配置mvc:resources哪些资源不用拦截
响应json数据之发送ajax:@ResuqstBody String body参数
响应json数据之响应json:@RequestBody User user 返回值为user
传统文件上传:借助commons-fileupload和commons-io类解析表单文件格式,表单enctype属性为multipart/form-data把表单数据分割为一个个解析,ServletFileUpload类传入DiskFileItemsFactory工厂类,
用这个类解析request请求获取FileItem对象集合items,判断是否是普通表单项,通过items对象获取文件名并调用write()将文件上传
SpringMVC上传文件:配置CommonsMultipartResolver文件解析器,其id必须为multipartResovler,在控制器方法中传入MultipartFile参数其名必须与表单name名一致,使用MultipartFile对象的getOriginalFilename()获取文件名并调用transferTo()
上传文件,
跨服务器上传文件:上传路径为要上传文件到的服务器路径,创建客户端对象Client.create(),和要上传文件的服务器进行连接client.resource(路径+文件),返回连接资源WebResource,调用其put方法将资源上传
异常处理:实现HandlerExceptionResolver接口,并在springmvc.xml中配置该异常处理器
过滤器:javaweb项目中都可用,配置/*任何资源都可以过滤
拦截器:仅springmvc框架中可用,只能过滤Controler中的方法
实现HandlerInterceptor接口,其中preHandler、postHandler、afterCompletin分别表示controller之前、之后和jsp页面跳转之后执行->springmvc.xml中配置拦截器标签配置要拦截的路径和拦截器对象
spring整合springmvc:spring配置文件applicationContext.xml没有扫描Controller包,所以在Controller中自动注入Service时需要在web.xml中配置监听器ContextLoaderListener加载spring配置文件
spring整合mybatis:spring.xml中配置连接池->注入sqlSessionFactory工厂->注入MappereScannerConfigurer类,配置dao接口所在的包
spring中事务管理:配置事务管理器->配置事务通知tx:advice->配置aop增强aop:config内部aop:advoisor

SpringBoot:管理spring依赖
项目继承SpringBoot起步依赖spring-boot-start-parent->导入打包的web启动依赖spring-boot-start-web->编写引导类@SpringBootApplication->在引导类同包或子包创建cotroller
@Value获取yaml或properties文件的内容->@Value(“@{}”)
@ConfigurationProperties(prefix=“”)映射
集成Mybatis:导入起步依赖->application.properties配置数据源和别名和mapper映射
集成单元测试:导入测试起步依赖->@RunWith(SpringRunner.class)、@SpringBootTest(classese=SpringBootApplication.class)
集成redis:导入起步依赖->
--------------------------------------------------------------------------------------------结束------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值