Java web
maven3.6.3的使用
配置
修改conf/settings.xml 添加阿里云镜像
<mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
使用
使用maven中的模板创建一个简单的javaweb应用
next配置
GroupId:公司域名
ArtifactId: 项目名称。项目文件夹也会按照这个来命名;
最后是版本号
父项目中<modules> <module>serverlet-01</module> </modules>
// 子项目中 <parent> <artifactId>javaweb-02-serverlet</artifactId> <groupId>com.zoneyet</groupId> <version>1.0-SNAPSHOT</version> </parent>
子项目中可以直接使用父项目中的包,子项目不能使用父项目中的内容
打包
不管java还是resources中的文件都会编译到classpath中;默认java目录下的文件仅仅会导出以.java为后缀的文件;
servlet的使用
web.xml文件路由
<servlet> <servlet-name>hello01</servlet-name> <servlet-class>com.zoneyet.ServletHelloWorld</servlet-class> </servlet> <!--指定Servlet的请求路径--> <servlet-mapping> <servlet-name>hello01</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
路由默认从上往下匹配,如果匹配到就返回;
servletContext
可以在多个接口中共享数据
在HttpServlet类的方法中 通过this.servletContext()来获取该类
获取初始化参数
context.getRequestDispatch().forword(req, resp)进行请求的转发;resp
resp.getOutputStream();不断向输出流中写入文件流;用户大文件的返回
new file.InputStream(“文件路径”) 实例化一个文件读取流对象,可以不断read文件内容,直到返回长度为-1;
URLEncoding.encode(需要编码的字符串, “UTF-8”)
req
req.getParamter(“”)
MVC架构
model层
业务逻辑
Dao层(持久化)
View
展示数据
提供连接发起Servlet请求(a, img等标签)
Controller(servlet)
接受用户的请求,转发给model层进行业务处理
控制视图跳转
过滤器Filter
在servlet和web服务器之间有一层过滤器。可以实现resp和req的处理;
javax.servlet.Filter
web服务器启动的时候,执行初始化方法;
服务器停止的时候,会执行销毁方法;
必须在doFilter 中实现chain.doFilter(req, resp);
同样需要在web.xml中配置,需要过滤哪些路径的下请求;
监听器
GUI中常用
Mybits
重要概念
使用步骤
- 构建一个工具类用来加载resource中关于mysql链接的配置,用SqlSessionFactoryBuilder构建一个SqlSessionFactory,类似一个mysql连接池;
mybatis-config.xml文件中resource绑定mapper,需要使用mapper的文件路径;不是包路径- 创建表的实体类
- 创建该表的查询Interface,在相同目录下创建接口对应的xml用来规定该Interface中具体方法使用的查询语句;
xml文件中关键名词含义:
namespace
: 对应类所在包的路径(包路径)
id
: 所在名称空间下的类名
resultType
: sql语句返回值的类型,一般指向定义的model类(包路径)
parameterType
: 方法中需要接受的参数类型;sql语句中使用 #{参数名}表示参数
如果参数是基本类型,直接使用参数名使用。如果参数是对象或map,使用参数的属性或键来使用具体的数据;
如果创建或者修改数据,最常用的数据类型是map。可以任意指定参数名(map的key);
resultMapper
,将结果集进行映射来保证,实体类属性可以对应上;- 因为java文件夹下默认不能有资源文件,所以需要修改默认maven配置。
- 从SqlSessionFactory.getMapper(实体类.class) 通过指定接口获取一个mysql连接,并通过调用接口中的方法来执行sql获取查询结果,最后需要关闭创建的连接;
配置文件的优化
- 从java通用配置文件中读取链接信息,并重新命名
- 实体类别名
- java中在xml中使用,需要用小写,基本类型以
_
开头- 开启缓存及懒加载
Spring
ioc控制翻转
把需要变动的部分拆分出来,通过参数传递的方式交给用户来实现;
这个参数是基于统一的接口实现的
对象由Spring来创建和管理
beans.xml文件
bean标签中的id相当与托管对象的名字;class表示对应对象的类;property相关于该类的属性,通过set方法设置属性;
使用和加载spring配置文件
ioc有参构造,通过constructor-arg指定参数名称及传递的值;
bean的作用域:scope 默认为单例模式
隐式的自动转配
- 通过byname或bytype来实现自动转配;
- 通过注解来完成自动装填;
在类的属性中使用@Autowired
使用spring中注解的方式装配
这四个注解的功能是一致的,都会将类装配到bean中
完全使用java代码的方式装配bean
AOP
代理模式
InvocationsHandler实现动态代理
Spring中AOP的使用
原生spring接口方式
- 添加依赖
- 绑定切入点
- 测试
切面方式 自定义类- 定义切片中执行的类
- 绑定切片方法,执行的位置,(哪些方法的执行前/后)
注解方式
spring整合mybatias
springmvc
执行流程
代码整合
- 整合dao层(mybits)
- spring层(Service层注入到Spring;声明数据库事务及数据源)
- mvc层整合
拦截器
类似filter。aop思想
区别只会拦截control层,并不会拦截静态文件,提高了效率
配置到spring中
定义拦截器
perHandle中返回false,那么阻止这个请求
SpringBoot
pom.xml的parent中维护者spring的依赖
启动器
启动代码
@SpringBootConfiguration
@Configuration // 该类为spring的一个配置
@Component // 该类为spring的一个组件
@EnableAutoConfiguration // 自动配置
@AutoConfigurationPackage // 自动配置包
@Import(AutoConfigurationPackages.Registrar.class) // 自动注册包
@Import(AutoConfigurationImportSelector.class) // 导入选择器
@ComponentScan
说明该注解下的类会将该类注册到Spring中@SpringBootConfiguration @EnableAutoConfiguration
Dao层
spring统一使用
SpringData
来访问
Dao层包括数据源SpringData
和数据连接池 ConnectSession依赖数据连接drive和jdbc以及Spring中的数据库连接池
执行查询
jdbcTemplate自动提交了事务
?可以作为一个sql语句的占位符
配置Druid
简介:一个带有监控功能的数据库连接池的实现
整合Mybitas
实现类似ORM的功能;使程序操作数据更加面向对象
将sql语句和代码隔离开
springboot异步
- 开启异步注解功能
- 使用注解告诉spring框架,该方法为一个异步方法
定时任务
开启定时任务
@EnableScheduling标记某个方法为定时执行
集成数据源
Spring Data 中介绍了集成mysql redis mongo等等数据源
spring data
springboot中集成redis
在创建项目的时候,
勾上 所有开发工具
勾上 spring wb
勾上 NoSQL 中的Redis
redis数据的序列化
在操作redis时,不能传递对象,只能传递一个序列化后的对象
因为默认的RedisTemplate会将jdk中默认的序列化器来进行对象的序列化,就会出现序列化失败,或存入之后乱码的问题
自定义redisTemplate
引用自定义的redisTemplate
注入redisTemplate;因为其和框架中默认的RedisTemplate类型相同,因此需要使用Qualifier+来直接指定id即方法或类的名字
集成redis工具类