Java框架
2022-10-17 11:29:27 13 举报
AI智能生成
coco博
作者其他创作
大纲/内容
Maven
简介:为了解决项目中jar包冗余,难以管理的问题
下载Maven
将文件解压后放到没有中文和空格的目录下
bin ---mvn运行脚本
boot:含有plexus-classworlds类加载器框架,Maven 使用该框架加载自己的类库
conf---含有settings.xml配置文件
lib: 含有Maven运行所需的类库
配置环境变量,与JavaJDK相同
注意:依赖于Java的环境变量
mvn -v:查看maven版本
mvn -package 打包项目
mvn -clean 清理编译后的项目
mvn -deploy 上传私服
仓库分类
本地仓库
概念:存储项目jar包和依赖的本地目录--管理每个依赖的唯一标识GAV
配置:在settings.xml配置文件中添加本地仓库位置
<localRepository>D:\666\repository</localRepository>
远程仓库
私服
公司范围内的共享仓库,不对外开放
Nexus安装 启动 开启服务 登录
私服的配置
1在settings.xml中设置nexus中的用户名密码
2配置私服仓库和插件仓库
3启用私服
项目上传到私服
在pom.xml中配置私服仓库地址
公共仓库
阿里的仓库,提供各种jar包的下载
在settings.xml中配置
中央仓库
阿帕奇的仓库,默认不允许修改
Maven项目
idea关联maven
setting->build Tools中设置此项目的maven安装目录和setting.xml目录
以及所有项目的maven配置
创建maven指定GAV标识
Mavenweb项目结构
src/main/java 存放源代码
src/main/resources 书写配置文件
src/test/java 书写测试代码
src/main/webapp/WEB-INF 书写前端页面,和web.xml文件
目根/pom.xml (project object model) maven项目核心文件
打包方式
导入依赖包
tomcat 服务器
与Java项目相同
依赖的生命依赖
生命周期
Git
概念:版本控制工具
安装
配置
设置用户名和密码
架构
工作区
编写文件,项目的目录
暂存区
文件通过 git add . 将工作区的全部文件放到暂存区
分支
通过 git commit -m"描述" 将暂存取的文件放到 分支上
.git版本库
不属于工作区,管理所有Git
本地仓库
对应的就是一个[目录](),这个目录中的所有文件被git管理起来。
以后会将一个[项目的根目录],作为仓库。
以后会将一个[项目的根目录],作为仓库。
创建仓库 git init
查看工作区中文件状态 git status
暂存文件 git add .
提交文件 git commit -m"描述"
远程仓库
多人之间共享代码,合并代码 就需要一个远程仓库
分类
gitee
git Hub
基本操作
创建账号
创建仓库
关联远程仓库
git remote add origin "远程仓库地址"
git remote -v 查看远程仓库地址
推送到远程仓库
git push origin master
第一次会需要输入gitee账号密码
克隆远程仓库
git clone "远程仓库地址"
远程仓库拉取
git pull origin master
冲突
两个用户对同一个远程仓库的同一文件进行修改时,都要推送到远程到仓库时会发生冲突
解决:后者先进行一次拉取项目进行解决
分支
概念:一个项目版本的存储位置,一条时间线
操作:
查看分支 git branch
创建分支:git branch 分支名
切换分支: git checkout 分支名
当前在那个分支上,commit项目就提交到那个分支
分支合并
快速合并 git merge "合并分支"
三方合并
冲突解决
关联idea
settings version Control 自动关联
创建仓库
要在建仓库前,设置[忽略文件 ".gitignore"]()---在项目根目录下
新建项目后,将项目目录创建为git仓库
提交commit
add到暂存区
commit到本地仓库,添加描述信息
创建分支
上传到远程仓库
要求是裸库,且建议库名和项目名同名。
push,添加远程仓库url
复制到本地仓库
更新本地项目(拉取项目)
解决冲突
MyBatis
ORM框架
ORM对象关系映射
将对持久化到数据库中
概念
解决JDBC存在大量冗余代码,封装了JDBC操作
不需要手工创建Connection,Statement对象
自动将结果集封装成实体类对象,自动完成ORM
环境搭建
在maven 中的pom文件中引入MyBatis核心依赖 Mysql驱动依赖
创建、配置mybatis-config.xml配置文件
mybatis配置(连接数据库)
实体类别名配置
注册mapper
创建实体类和Dao层接口
编写对应的Mapper.xml文件
<!--namespace = 所需实现的接口全限定名-->
<mapper namespace="com.qf.dao.UserDao">
<mapper namespace="com.qf.dao.UserDao">
<select id="selectUserById(dao接口的方法名)" resultType="com.qf.pojo.User(返回类型)">
//查询的sql语句-------#{arg0}:第一个形参
</select>
//查询的sql语句-------#{arg0}:第一个形参
</select>
注册mapper文件
测试
//1.获得读取MyBatis配置文件的流对象
//2.构建SqlSession连接对象的工厂
//3.通过工厂获得连接对象
//4.通过连接对象获得接口实现类对象
//5.调用接口中的方法
Spring
概念:一个项目管理框架,是众多设计模式的组合(工厂、单例、代理、适配器。。。。)
spring架构组成
核心技术:
IOC控制反转
DI注入依赖
数据绑定
AOP面向切面编程
自定义工厂类
项目resources目录下创建bean.properties文件
自定义工厂---》加载配置文件--》获取类路径---》反射创建对象
使用:创建工厂对象---》使用方法获取目标对象
创建Maven项目
pom.xml中引入Spring常用依赖 jar包
创建Spring核心配置文件spring-context.xml、applicationContext.xml、beans.xml
<bean id="userDao" class="com.my.dao.UserDao>
子主题
测试:创建ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-context.xml");
ctx.getBean("userDao")--得到对象,可以调用方法
ctx.getBean("userDao")--得到对象,可以调用方法
IOC控制反转DI注入依赖
解决了使用NEW关键字实现组件之间的依赖管理,通过容器来管理创建对象和依赖
创建Dao和Service对象,在和spring核心配置文件中配置实例化(IOC)
在Service中注入Dao---DI
Spring实例化对象并赋值
基本类型
数组
集合
Map
Properties
对象
对象集合
Bean细节
Spring的加载方式饿汉式---实例化时就创建对象
模式
单例:所有的getBean都是一个对象
多例: 每次getBean都创建一个新的对象
生命周期
单例
创建容器
静态代码块
构造器(构造方法)
set注入
初始化前---后构造器
初始化
初始化后
执行对象方法
销毁
代理设计模式
概念:业务的核心功能和辅助功能分离,实现核心业务更加的纯粹,辅助业务能够复用
静态代理
1租房接口
2房东实现类
3中介实现类(代理类)
5在代理对象中实现方法,写辅助功能,调用目标类的核心功能
动态代理
JDK动态代理
性能高
功能少
依赖于接口,目标类和代理比喻有同一个接口
CGlib动态代理
性能低
功能多
继承关系,可以没有接口
AOP面向切面编程
概念:底层源码时jdk和cglib动态代理
开发术语
切入点:目标类切入切面(代理类)的方法
连接点:切面返回目标类的方法的参数
切入点表达式:指定切入点的坐标
目标对象
切面
通知,增强
前置通知
后置通知
异常通知、
环绕通知
后处理器
在对象的的初始化前后添加
作用全局
druid监控中心(了解)
Spring整合Mybatis(重点)
创建maven项目
导入依赖
mybatis-xml配置settings
开启二级缓存
开启自动全局映射
嵌套对象
applicationContext.xml配置
引入jdbc.properties文件
配置druid数据源
实例SqlSessionFactoryBean工厂对象
注入数据源
注入mybatis.xml配置文件
pojo别名包
Mapper基本包扫描
spring-tx.xml
事务管理器
注入数据源
切面
切入点
id
表达式
组装
切入点id和通知id的组装
通知增强
关联事务管理器
<tx:advice id="txManager" transaction-manager="tx">
通知内容
<tx:attributes>
通知增强细节
事务隔离级别
传播行为
超时
异常
在runtimeexception的基础上添加
在runtimeexception的基础上减少
只读
执行添加、删除、修改时报错
子主题
事务
spring-tx.xml
事务管理器
注入数据源
切面
切入点
id
表达式
组装
切入点id和通知id的组装
通知增强
关联事务管理器
<tx:advice id="txManager" transaction-manager="tx">
通知内容
<tx:attributes>
通知增强细节
事务隔离级别
传播行为
超时
异常
在runtimeexception的基础上添加
在runtimeexception的基础上减少
只读
执行添加、删除、修改时报错
子主题
注解式开发
spring-context.xml配置文件中设置开启注解使用
在对应类上生命注解
@Service
@Controller
@Component通用
@Scope控制bean的创建模式(单例,多例)
自动注入DI
@Autowired基于类型自动注入
@Resource基于名称自动注入
@Qualifier("userDAO") 限定要自动注入的bean的id,一般和@Autowired联用
事务注解
appication.xml中<tx:annotation-driven transaction-manager="tx"/>
@Transactional
打在类上---每个方法都执行事务
打在方法上---对应的方法执行事务
AOP注解
<!-- 添加如下配置,启用aop注解 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
@Aspect----切面类
@Pointcut("execution(* com.qf.service.UserServiceImpl.*(..))")---定义切入点
@Before(“方法名”)---前置通知
@AfterReturning(value="pc()",returning="ret") // 后置通知
@Around("pc()") // 环绕通知
@AfterThrowing(value="pc()",throwing="ex") // 异常通知
SpringMVC
开发流程
创建maven工程
创建springmvc.xml配置文件
注解扫描
注解驱动
安装FastJson转换器
视图解析器
前缀
返回值后缀
配置web.xml文件
配置前端控制器
加入核心配置springmvc.xml
配置拦截路径
controller
@Controller注解
请求方法@RequestMapping注解
@Getmapping
@PutMapping
接收请求参数
原生Servlet方式
基本数据类型
直接在方法参数中添加(类型 参数名)--参数名与请求的名字相同
参数类型可以为int、string、boolean(传递0或1)、Date。。。
pojo类型
- 单个---参数类型为对象pojo---实际为对象的属性
集合(了解)
数组类型----请求的key值相同即可
集合类型(了解)
Rest开发风格@Requestmapping("/url / {id}")
public void method()
public void method()
跳转视图
转发
原生Serblet方式
方法2 public ModelAndView method( ...)
mv=new ModelAndView();
mv.setViewName("forward:/index.jsp");
// 增加数据
mv.addObject("age",18);
return mv;
mv=new ModelAndView();
mv.setViewName("forward:/index.jsp");
// 增加数据
mv.addObject("age",18);
return mv;
方法3 public String method(Model model)
model.addAttribute("name", "张三");
return "index";----url
model.addAttribute("name", "张三");
return "index";----url
重定向
方法 4 public String method(RedirectAttributes ra)---取代session,在重定向时转发数据
ra.addAttribute("name", "张三");
return "redirect:/Web-INF/jsp/index";----url
return “redirect:test1”
ra.addAttribute("name", "张三");
return "redirect:/Web-INF/jsp/index";----url
return “redirect:test1”
@SessionAttributes
@SessionAttributes({"gender","name"}) :model中的 name和gender 会存入session中
静态资源
设置拦截路径
<mvc:default-servlet-handler/>---全部放行
<mvc:resources mapping="/html/**" location="/hhh/"/>--指定路径放行
json处理(前后端分离)
导入依赖
使用@ResponseBody注解---将对象以json串发送给前端界面
使用@RestController注解---(相当于给每一个方法前加上了@ResponseBody)
使用@RequestBody注解---接受前端的json串参数
注意:与AJAX技术一同使用
jackson常用注解
日期格式化
属性名修改
属性忽略、属性排除
自定义序列化
使用fastjson
导入依赖
spring-mvc中安装fastjson
常用注解
* 日期格式化:@JSONField(format="yyyy/MM/dd")
* 属性名修改:@JSONField(name="birth")
* 忽略属性:@JSONField(serialize = false)
* 包含null值:@JSONField(serialzeFeatures = SerializerFeature.WriteMapNullValue) 默认会忽略所有null值,有此注解会输出null
* @JSONField(serialzeFeatures = SerializerFeature.WriteNullStringAsEmpty) null的String输出为""
* 自定义序列化:@JSONField(serializeUsing = MySerializer2.class)
* 属性名修改:@JSONField(name="birth")
* 忽略属性:@JSONField(serialize = false)
* 包含null值:@JSONField(serialzeFeatures = SerializerFeature.WriteMapNullValue) 默认会忽略所有null值,有此注解会输出null
* @JSONField(serialzeFeatures = SerializerFeature.WriteNullStringAsEmpty) null的String输出为""
* 自定义序列化:@JSONField(serializeUsing = MySerializer2.class)
异常解析器
统一处理全部异常
定义异常跳转的页面
自定义异常类、异常处理器类
spring-mvc中声明异常解析器(异常处理器)
注解方式@ExceptionHandler({RuntimeException.class})//异常类型
拦截器
取代之前的filter过滤器--抽取hander(处理器--controller)的冗余部分---编码集日志等
定义拦截器类
实现了拦截器接口
方法前
方法后
渲染后
spring-mvc中实例化拦截器类
配置拦截路径---全部拦截、指定拦截
文件的上传/下载
上传
导入依赖包
spring-mvc中实例上传解析器,上传文件最大限制
上传controller
1获取上传文件的原始名称
2生成一个唯一文件名
3获取文件后缀名
4拼接成唯一的完整文件名
5获取上传文件的类型
6保存文件
下载
下载链接
下载controller
子主题
验证码
导入依赖包
web.xml中声明验证码组件
REST开发风格
核心要求:每个资源都有唯一的url、不同的行为对应不同的方法
定义rest风格的controller
@RequestMapping(value="/users",method = RequestMethod.GET)
等价
@GetMapping("/users")
等价
@GetMapping("/users")
跨域请求
概念:**域 = 协议+IP+端口**
解决方法:在被访问及controller上添加注解
//@CrossOrigin("http://localhost:8081")
//允许来自8081服务器发来的请求
//允许来自8081服务器发来的请求
SpringMVC的执行流程
整合SSM
子主题
Quartz
概念: 定时任务调度框架
入门程序
导入jar包
创建工作类实现job接口
创建一个测试类
创建调度器对象
创建触发器
创建工作详情类
将工作详情类和触发器放入调度器中
子主题
扩展
Spring整合Quartz
子主题
Vue
vue简介:是一个mvvm的前端框架,构建用户界面的渐进式js框架
MVVM双向数据绑定模式
model模型
VIew视图
子主题
插值表达式
{{}}
new vue({数据})
双向绑定
<input v-model="name">
new vue({数据})
判断标签
v-if(将元素删除)
v-else-if
v-else
v-show=true(将元素隐藏)
循环
v-for
数组
v-for=
对象
对象数组
属性绑定
v-model双向绑定
v-bind绑定
子主题
v-on点击
子主题
计算属性
属性变化
方法变化
组件化
Vue的组件化设计思想借鉴了Java的面向对象思想。Java认为万物皆对象,在Vue中,万物皆组件。
组件的全局注册
组件的本地注册
shiro
简介:是一个安全权限框架、密码的密文存储,用户的访问管理
shiro的主要功能
认证
授权
会话管理
加密
shiro的架构图
Subject----当前用户
SecurityManager---安全管理员,管理上方用户
Realm----访问安全数据
Shiro的入门程序
导入jar包
测试类
创建DefaultSecurityManager实现类
创建Realm realm =new IniRealm(classpath:shiro.ini)
设置realm给SecurityManager
子主题
Subject
异常捕获
Shiro的加密
加盐
迭代
MD5
MD2
Sha。。。
SSSM整合
SSM整合
整合Shiro
web.xml Filter过滤器-----名称<bean id>与拦截规则名字一致
spring-shiro.xml
DefaultWebSecurityManager
注入realm
注入记住我
注入session回话管理
创建自定义Realm<bean>实例化
记住我配置
会话配置
拦截规则shiro+spring拦截工厂
注入securityManager
<property name="loginUrl" value="/login.jsp"></property>--拦截内容转发到登录界面
拦截静态资源
拦截登录
必须登录
未登录可以转发到登陆页面
自定义Realm类
继承AuthorizingRealm
实现认证方法doGetAuthenticationInfo(AuthenticationToken token)
取出用户输入的用户名、密码
通过sevice业务判断
AuthenticationInfo info = new SimpleAuthenticationInfo(user, password, this.getName());
return info;
return info;
实现授权方法doGetAuthorizationInfo(PrincipalCollection principals)
通过principals获得用户id
service业务逻辑得到用户角色和权限
List perms = sysUserService.findPerms(id);
创建SimpleAuthorizationInfo对象
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
将查询到的字符串权限集合加入shiro框架
authorizationInfo.addStringPermissions(perms);
将查询到的字符串角色集合加入shiro框架
记住我
原理:将用户信息转成base64加密存入cookie中
代码:
controller类
登录
创建subject对象
获取前端网页输入的数据---用户名、密码、记住我
密码进行加盐加密
封装成usernamePasswordToken对象
subject.login(token对象)---进入realm
session.setAttribute("username",username);
return "/index.jsp";---跳转主页
return "/index.jsp";---跳转主页
注销
创建subject对象
subjec.logout();
细节解释
注解开发
MybatisPlus
简介:基于mybatis的封装框架
功能
通用CRUD
逻辑查询
or
and
no and
条件查询
querywrapper
eq
gt
ne
lt
le
ge
between
in
like 值
likeleft
likeright
lambdaquerywrapper
整合Mybatis+Mybatispuls
导入mybatisplus包
创建mybatis核心配置文件
引入jdbc.propertise数据源,德鲁伊连接池,mybatissqlsessionfactorybean,别名包,mapper映射
创建dao、mapper
编写测试类
resource对象
通过stream流获取输入流对象
创建sqlsessionfactory工厂对象
工厂获得sqlsession对象
获得mapper接口,调用方法
整合mybatis+spring+mp
导入依赖
创建applictionContext.xml配置文件
读取jdbc配置文件
定义德鲁伊数据源
使用mp提供的整合sqlsessionfactory实例
别名包
分页插件
二级缓存等
mapper映射
注解扫描
创建dao、mapper
对象类上加上@TableName(表名)
user Mapper继承Base Mapper<User>
测试类
主键生成方式
AUTO数据库自增长
NONE自己写
UUID
雪花算法
子主题
注解开发
可以使用通用crud
通用CRUD
子主题
考核项目
问题一
自定义shirohi会话权限管理类
继承默认会话管理类
重写方法
子主题
跨域问题
controller解决跨域打注解
shiro拦截在浏览器和controller之间,所以也要解决跨域问题
跨域请求两次
预请求options:不应拦截
真请求get、post等方式
问题二
记住我:shiro中不需要,vue实现功能
功能一验证码
前端给后端:上行数据
后端给前端:下行数据
子主题
功能二,认证授权
认证
授权
oss数据存储---阿里云存储图片
0 条评论
下一页