SSM基础-雷丰阳

    技术2022-07-10  142

    文章目录

    一.Spring概述IOCAOPjdbcTemplate声明式事务 二、springMVC概述@RequestMappingRESTful / @PathVariable请求数据的传入返回数据输出 三、MyBatis概述MyBatis的全局配置文件SQL映射文件 四、javaWeb复习(不全)监听器国际化文件上传下载javaWeb前端tomcat目录结构servlet(重要)JSPcookie & session & token过滤器json和ajax 杂七杂八

    一.Spring

    概述

    spring模块 spring核心功能

    IOC

    控制反转(IOC)与依赖注入(DI) IOC:资源(有功能的类)的获取不再是由程序员自己创建,而是由容器来创建和管理 DI:容器知道类A运行的时候需要另一个类B;容器通过反射的形式,将类B的对象注入到类A的属性中。IOC细节 .使用ApplicationContext和ClassPathXmlApplicationContext可直接获取ioc容器对象,然后使用getBeans()方法获取对象 .IOC容器实际上就是一个Map!!!配置文件beans标签中的属性 xmlns:xmls=“url” => 整个xml文件默认的命名空间(不用加前缀) xmlns:prefix:xmlns:prefix=“url” => 以prefix作为前缀的命名空间,此处prefix只是一个代称,可以换成其他英文表示。使用prefix命名空间中定义的元素标签时,需要加上前缀 xmlns:xsi:xmlns:xsi=“url” => 本文件遵守的 XML 规范(不表示命名空间!!!) xsi:schemaLocation:xsi:schemaLocation=“url” => 定义各命名空间的文档的路径。成对出现,前一个是命名空间(即prefix后面的url),后一个是该url下面的具体文档配置文件xml标签 bean对应一个对象 => 其中标签属性id是该对象的标志; class指定对象属于哪个类; parent指定字段信息继承自哪个对象(注意不是类继承,两个对象属于同一个类); abstract表名这个bean是模板,只能被继承;scope指定bean的作用域property嵌套于bean标签中,用于设置对象字段的默认值(使用无参构造器) => name字段名;value字段值(限于基本类型);ref引用容器中其他对象为该字段赋值(也可以property中嵌套bean为字段赋值);constructor-arg嵌套于bean标签中,通过调用对象的带参构造函数设置字段值 => name 、value…; index指定参数索引; type指定参数所属的类list内部包含若干个bean,构成复杂对象Listmap内部包含若干个entry标签,构成复杂对象Map => 内部一个entry标签对应一个k-vprops 内部包含若干prop标签,构成复杂对象Properties bean的作用域 由bean标签的scope属性指定 通过工厂创建bean 也可通过spring自带的FactoryBean完成bean的创建 => 自行了解bean的后置处理器 Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理; bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理而非单一实例,其典型应用是:检查Bean 属性准确性或根据特定的标准更改 Bean 属性…,参考:Bean 的后置处理器引用外部配置文件 或者 基于xml的自动装配(自动赋值) bean的属性中包含对象时,之前都是手动写配置文件进行赋值 => 可以使用bean 标签的autowired属性选择自动赋值的方式,spring自动为属性对象进行赋值SpEL Spring Expression Language,Spring的表达式语言; 与jsp的EL表达式基本一样;书写方式:#{…} => 例如 通过注解创建bean spring底层不会区分注解与层是否对应; id就是类名首字母小写;bean默认单例 使用注解需要导入aop包spring 如何扫描加了注解的bean 可以进一步使用exclue-filter标签排除部分组件,使其不被扫描; include-filter指定只扫描哪些组件@Autowired …与基于xml的自动装配行为一样,但是使用注解更方便; spring注入时,先根据类型匹配,再根据id匹配…; 方法上有Autowired注解的话,方法会自动注入参数; 注意: spring单元测试

    AOP

    AOP概念 AOP底层原理就是动态代理AOP相关专业术语 spring AOP用法 1.目标类和切面类加入IOC容器 2.切面类标注@Aspect注解 3.切面类中的方法,通过切入点表达式标注出在哪个目标类的哪个方法的何时运行,如下: 4.xml配置文件中开启基于注解的AOP功能(aspectj-autoproxy标签)AOP细节 细节一、IOC容器中保存的是目标类的代理对象而不是目标类的对象(只是,目标类有接口时使用jdk创建代理对象,应该使用接口类型获取对象;目标类没有接口时,由cglib创建代理对象,可直接使用目标类类型回去对象) 细节二、切入点表达式的写法 细节三、通知方法的执行顺序 细节四、JoinPoint获取目标方法的详细信息;通知方法接收异常 细节五、抽取可重用的切入点表达式 之后直接在通知方法的切入点表达式中写这个空方法名即可!! 细节六、环绕通知 就是其他几个通知的结合体。。。功能强大;环绕通知就是一个动态代理,目标方法是在环绕通知内部执行!! <=> 而其他通知只是在目标方法的前或者后执行 多切面运行顺序 优先级高的切面先进入,后返回,默认优先级是按照切面类的首字母排序; 也可以通过@Order注解手动设置优先级基于xml配置的AOP 基本如下: AOP应用 基本上过滤器能做的都能使用AOP实现

    jdbcTemplate

    概述 spring提供的数据库操作; 但是比较简单,通常不会使用使用示例 1.配置数据源 2.配置jdbcTemplate 3.使用 其他 整个jdbcTemplate都很少用,略…

    声明式事务

    概念 spring声明式事务的原理 使用方法 最后在事务对应的方法上添加注解@Transactional即可

    二、springMVC

    概述

    springMVC示意图 相较于传统的MVC模式多了一个前端控制器,用于完成请求的拦截与分发; 这个前端控制器就是DispatcherServletspringMVC运行流程 视图解析器 springMVC配置文件中配置InternalResourceViewSolver(视图解析器) => 方便处理页面地址拼接(比如可以在视图解析器中直接指明页面的目录,从而简化…)url-pattern / =>拦截所有请求,但是不包括jsp页面(即*.jsp) /* => 拦截所有请求,包括jsp页面(即*.jsp)

    @RequestMapping

    RequestMapping中的属性 RequestMapping的模糊匹配

    RESTful / @PathVariable

    @PathVariable 为了支持REST风格的url而增加的功能; 可以将路径上的值作为参数

    RESTful风格的url 更多参考:在RESTFUL风格中怎样定义需要多个参数才能确定的资源路径

    如何发起PUT、DELETE请求 REST风格会使用到PUT、DELETE请求,但是ajax发送PUT、DELETE请求时通常无法传递参数 => 原因:由于tomcat的问题,导致PUT、DELETE请求的参数无法被springMVC封装,解决方案参考:Ajax发送PUT/DELETE请求时出现错误的原因及解决方案

    请求数据的传入

    默认方式 方法的参数直接写为与请求的参数相同的变量名,这个变量就用来接收请求参数,springMVC会自动解析参数@RequestParam @RequestHeader @CookieValue 传入pojo 直接传入原生API

    返回数据输出

    Map、Model、ModelMap

    三、MyBatis

    概述

    Mybatis与Hibernate 原生JDBC :步骤很多,且sql语句硬编码在程序中,耦合严重 Hibernate:ORM框架,对JDBC完全封装,开发人员不需要写SQL ,通过Hibernate框架的方法即可操作数据库;全自动化;但是难以定制SQL,不适用于复杂业务 MyBatis:持久化层/SQL映射框架,将JDBC中的重要步骤(sql,写在配置文件中)抽取出来手工完成,其他部分由MyBatis封装; 半自动化MyBatis的配置文件 细节

    MyBatis的全局配置文件

    所有配置信息包含在标签中; 最重要的标签是settings 和 mappers

    properties标签 settings标签 settings配置mybatis运行时的一些行为,具体的配置有很多,详见文档;上图中的配置就是将数据库表列名中的下划线与pojo属性字段的驼峰命名对应typeAliases标签 typeHandlers标签 作用:自动处理pojo参数类型与数据库表字段类型的对应关系 mybatis默认已经能自动处理对应关系;如果还需要配置自定义的映射(如何自定义查文档),如下: plugins标签 配置mybatis插件;插件在mybatis中能够工作的原理: enviroments标签 主要用于配置数据库连接环境,不过基本用不上,而是使用spring databaseIdProvider 如果可能做数据库移植的话,还需要在写sql语句的时候指定数据库Id(即配置中的value); 不过基本不会用到这个技术,数据库选型基本都是在项目初期确定,一般不会更改mappers标签 也有不用写sql映射文件,直接在接口的方法上使用注解标注sql语句的方法 => 但是会导致耦合,不推荐

    SQL映射文件

    映射文件中的标签 获取自增主键的值 获取非自增主键的值 参数传递 #{}和${}的区别 => 因此通常都是使用#{} ${}也有其应用场景:因为mysql只支持数据库字段的预编译,对于想要动态传入表名等情况就无法使用#{},此时可使用 ${} 什么是预编译:Mysql预编译查询返回list resultType指明集合内元素的封装类型即可查询多条记录封装成map resultType应该写map中value的类型; 此外,还需要在接口的方法上用注解指明哪个字段作为keyresultMap自定义结果集 使用时在查询语句的标签上使用resultMap属性引用这个自定义resultMap的id即可!联合查询 1.resultMap封装级联属性 2.使用association封装(对1的改进) resultMap的写法改为如下:

    四、javaWeb复习(不全)

    监听器

    监听器分类                            

    监听器如何工作

    session生命周期 session活化与钝化:Session 的钝化与活化 session绑定与解绑:session 对象的绑定、解绑和钝化、活化

    监听器使用场景 常用的两个监听器 对于HttpSessionBindingListener可用于统计登录的用户数(每次登录就会有一个对象绑定到session域中,登出会解绑 => 从而方便统计登录用户)

    国际化

    目的 同一套软件,根据不用国家/地区显示不同的语言 由于文化风格的差异,即使语言可以自由切换,仍有用户可能不习惯 => 更多时候是针对不同语言环境,直接开发多套系统示意图

    文件上传下载

    文件上传简介 文件上传的表单需要使用multipart/form-data编码格式,表单格式如下: 后端需要解析这个格式的表单数据,从而获得文件 => 过程比较麻烦,通常直接使用封装好工具(commons-fileupload)文件下载 如果给出文件的路径,对于浏览器能够识别的文件类型,浏览器通常是默认直接打开文件,通常不采用这种静态方式 => 而是通过动态请求,servlet处理动态请求将文件流交给浏览器 注意:将文件流交给浏览器的时候需要设置响应头,指定浏览器如何处理这个文件

    javaWeb前端

    html、css、js、jquery 略

    tomcat目录结构

    bin:下面存储可执行程序 => startup.bat、shutdown.bat等 conf:配置文件 => servlet.xml(tomcat集中配置的地方)、web.xml(所有项目都会继承这个web.xml) lib:tomcat运行期间需要的jar包 log、temp… webapps:所有运行的项目(默认访问下面的ROOT,否则要加上项目名) work:存放运行期间编译的一些东西(比如jsp)

    servlet(重要)

    servlet基础 Servlet:接口 HttpServlet:使用doGet()、doPost() 在web.xml中配置servlet如下: ServletContext 1.servletContext是四大域对象之一(PageContext、ServletRequest、HttpSession、ServletContext) 2.域对象:存储数据的区域,在域中保存一些数据,即使跨页面也可获取保存的数据 3.由于一个web应用中的所有Servlet共享同一个ServletContext对象:因此Servlet对象之间可以通过ServletContext来是实现通讯;也可使用ServletContext获取当前项目信息HttpServletRequest HttpServletResponse 乱码 请求乱码:注意GET和POST请求乱码的原因并不相同;对于GET,tomcat直接使用默认格式解码URL然后封装成request对象;对于POST,tomcat在使用请求体时才使用默认格式解码请求体 响应乱码 小结:常用的统一处理方式

    JSP

    jsp原理 四大域对象 JSTL EL表达式 request对象和requestscope对象的关系?其他同理 => request域中保存的数据就放在它的requestScope属性中

    cookie & session & token

    参考:添加链接描述博客中后端部分有讲解

    过滤器

    javaWeb三大组件 serlvet:处理请求 filter:过滤拦截请求 listener:监听 三大组件基本需要在web.xml中进行注册,之后才能使用

    过滤器配置 其中url-pattern的书写规则:

    过滤的过程

    json和ajax

    json 1.和xml相比,是一种轻量级的数据交换格式 2.json是js对象的表示方法,前后端传递的json数据本质上就是字符串 3.所以前端收到后端的json数据通常都需要JSON.parse(data)解析成js对象 4.对于jquery的ajax,如果不想手动解析,可以在dataType字段指定返回数据的类型为json,会直接转换为json;如果dataType是jsonp,ajax底层会给请求加上回调函数,并且直接将收到的字符串当做js解析(从而解决跨域),导致拿到的数据也是js对象ajax原理 http请求不再是直接由浏览器发起;而是由xhr对象作为代理发送请求并接收数据; 注意:ajax可以无刷新改变页面内容,但无法改变页面URL(不过使用特定技术可以改变)

    杂七杂八

    类路径 通常是指项目源码包的开始路径(默认是src下)浏览器地址栏到底代表什么 浏览器地址栏显示的仅仅是浏览器直接发起的http请求的地址; ajax由于是xhr对象发起的请求,而不是浏览器直接发起,所以不会修改浏览器地址!!!
    Processed: 0.021, SQL: 9