javaee总结
1.Spring的自动装配方式
1.)byName:由属性名自动装配
2.)byType:由属性数据类型自动装配
3.)constructor:与byType类似,应用于构造函数
4.)autodetect
2.什么是SpringMVC设计模式
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的
3.简述SpringMVC的请求流程:
SpringMvc整个的执行流程:
1)发起请求到前端控制器(DispatcherServlet )
2)前端控制器请求HandlerMapping查找Handler(可以根据xml、注解进行查找)
3)处理器映射器HandlerMapping向前端控制器DispatcherServlet 返回Handler
4)前端控制器DispatcherServlet 调用处理器适配器HandlerAdapter 执行Handler
5)处理器适配器HandlerAdapter 执行Handler
6、)Handler执行完给处理器适配器返回ModelAndView
7、)处理器适配器向前端控制器返回ModelAndView (ModelAndView 是SpringMvc的底层对象 包括model和view)
8)前端控制器请求视图解析器去解析视图
根据逻辑视图名解析成真正的视图(jsp)
9)视图解析器向前端控制器返回view
10)前端控制器进行视图渲染
视图渲染将模型数据(模型数据在ModelAndView对象中)填充到request域
11)前端控制器向用户响应结果
4.SpringMVC如何处理多文件上传?
@RequestMapping("/file01")
@ResponseBody
public List<String> test02(String username, MultipartFile[] files, HttpServletRequest request) throws IOException {
System.out.println("username"+username+","+"file的长度"+files.length);
List<String> list =new ArrayList<>();
if(files!=null&&files.length>0)
{
for (int i = 0; i < files.length; i++) {
MultipartFile multipartFile=files[i];
String fileName =multipartFile.getOriginalFilename();//获取文件名
String filePath =request.getServletContext().getRealPath("/fileupload/"+fileName);
list.add(filePath);
File file =new File(filePath);
if(!file.exists()){//判断文件夹是du否创建,没有创建则创建新文zhi件夹
file.mkdirs();
}
multipartFile.transferTo(file);
System.out.println("fileName"+fileName);
}
}
return list;
}
5.springMVC中modelAndView的用法?ModelAndView.String和void三种返回类型的作用?
)返回到指定的页面
ModelAndView构造方法可以指定返回的页面名称
例:return new ModelAndView("redirect:/m07.jsp");
通过setViewName()方法跳转到指定的页面
例:mav.setViewName("hello");
用法:
1.)ModelAndView的第一种用法,先创建ModelAndView对象,再通过它的方法去设置数据与转发的视图名
2.)ModelAndView的第二种方法,可以直接通过带有参数的构造方法 ModelAndView(String viewName, String attributeName, Object attributeValue) 来返回数据与转发的视图名
3.)ModelAndView的第三种用法,设置重定向
响应之返回值是String类型
pringmvc.xml需要先配置好视图解析器的jsp文件路径及对应文件的后缀名
返回的jsp页面,开启EL表达式,取出存入域中的数据
6.如何进行事物管理
1.)事务的四个特性:原子性,一致性,持久性,隔离性
2.)事务的传播特性
事务传播行为就是多个事务方法调用时,如何定义方法间事务的传播。Spring定义了7中传播行为:
(1)propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是Spring默认的选择。
(2)propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
(3)propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
(4)propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
(5)propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
(6)propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
(7)propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。
3.)事务的隔离级别
(1)read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
(2)read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
(3)repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
(4)serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读
(5)脏读、不可重复读、幻象读概念说明:
a.脏读:指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
b.不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
c.幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
4.)事务几种实现方式
(1)编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
(2)基于 TransactionProxyFactoryBean的声明式事务管理
(3)基于 @Transactional 的声明式事务管理
(4)基于Aspectj AOP配置事务
7.MyBatis传参的几种方式?
https://www.cnblogs.com/mike-mei/p/13265942.html
8.mybatis中对象关系映射如何配置?
https://www.cnblogs.com/binaway/p/9171587.html
9.mapper映射文件是用于将java实体类和数据库字段名之间进行绑定配置;如何使用select、update、delete、insert标签完成对应查、改、删、增操作;
https://www.cnblogs.com/binaway/p/9171587.html
10.mybatis的动态SQL
https://www.cnblogs.com/ashleyboy/p/9271597.html
mybatis动态sql语句是基于OGNL表达式的,主要有以下几类:
- if 语句 (简单的条件判断)
- choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似
- trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)
- where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误)、
- set (主要用于更新时)
- foreach (在实现 mybatis in 语句查询时特别有用)
11.springMVC的9大组件都有哪些?
【1. HandlerMapping】
是用来查找Handler的。在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理呢?这就是HandlerMapping需要做的事。
【2. HandlerAdapter】
从名字上看,它就是一个适配器。因为SpringMVC中的Handler可以是任意的形式,只要能处理请求就ok,但是Servlet需要的处理方法的结构却是固定的,都是以request和response为参数的方法。如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢?这就是HandlerAdapter要做的事情。
小结:Handler是用来干活的工具;HandlerMapping用于根据需要干的活找到相应的工具;HandlerAdapter是使用工具干活的人。
【3. HandlerExceptionResolver】
其它组件都是用来干活的。在干活的过程中难免会出现问题,出问题后怎么办呢?这就需要有一个专门的角色对异常情况进行处理,在SpringMVC中就是HandlerExceptionResolver。具体来说,此组件的作用是根据异常设置ModelAndView,之后再交给render方法进行渲染。
【4. ViewResolver】
ViewResolver用来将String类型的视图名和Locale解析为View类型的视图。View是用来渲染页面的,也就是将程序返回的参数填入模板里,生成html(也可能是其它类型)文件。这里就有两个关键问题:使用哪个模板?用什么技术(规则)填入参数?这其实是ViewResolver主要要做的工作,ViewResolver需要找到渲染所用的模板和所用的技术(也就是视图的类型)进行渲染,具体的渲染过程则交由不同的视图自己完成。
【5. RequestToViewNameTranslator】
ViewName是根据ViewName查找View,但有的Handler处理完后并没有设置View也没有设置ViewName,这时就需要从request获取ViewName了,如何从request中获取ViewName就是RequestToViewNameTranslator要做的事情了。RequestToViewNameTranslator在Spring MVC容器里只可以配置一个,所以所有request到ViewName的转换规则都要在一个Translator里面全部实现。
【6. LocaleResolver】
解析视图需要两个参数:一是视图名,另一个是Locale。视图名是处理器返回的,Locale是从哪里来的?这就是LocaleResolver要做的事情。LocaleResolver用于从request解析出Locale,Locale就是zh-cn之类,表示一个区域,有了这个就可以对不同区域的用户显示不同的结果。SpringMVC主要有两个地方用到了Locale:一是ViewResolver视图解析的时候;二是用到国际化资源或者主题的时候。
【7. ThemeResolver】
用于解析主题。SpringMVC中一个主题对应一个properties文件,里面存放着跟当前主题相关的所有资源、如图片、css样式等。SpringMVC的主题也支持国际化,同一个主题不同区域也可以显示不同的风格。SpringMVC中跟主题相关的类有 ThemeResolver、ThemeSource和Theme。主题是通过一系列资源来具体体现的,要得到一个主题的资源,首先要得到资源的名称,这是ThemeResolver的工作。然后通过主题名称找到对应的主题(可以理解为一个配置)文件,这是ThemeSource的工作。最后从主题中获取资源就可以了。
【8. MultipartResolver】
用于处理上传请求。处理方法是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取File,如果上传多个文件,还可以调用getFileMap得到FileName->File结构的Map。此组件中一共有三个方法,作用分别是判断是不是上传请求,将request包装成MultipartHttpServletRequest、处理完后清理上传过程中产生的临时资源。
【9. FlashMapManager】
用来管理FlashMap的,FlashMap主要用在redirect中传递参数。
12.调用mybatis的mapper接口时有哪些注意事项
1、Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;
2、Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同;
3、Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同;
4、Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。
13.如何使mybatis的mapper配置文件与 数据库中的字段对应起来?
https://blog.youkuaiyun.com/qq_41124871/article/details/93378347
1、在 mapper.xml 文件里面使用 resultMap 对对应字段进行映射:
2、在 mapper.xml 文件的 sql 语句里面使用别名的方式:
3、如果数据库字段是 user_name,实体类的属性是 userName,可在 mybatis的配置文件里面加以下配置(此方法只针对 ‘user_name’ 变 userName 这种驼峰有效):
14.mybatis的缓存机制?
缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。
15.怎样调用mybatis接口?需要注意什么?
定义Mapper接口,里面定义一系列业务数据操作方法。在Service层通过注入mapper属性,调用其方法就可以执行数据库操作
1、Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;
2、Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同;
3、Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同;
4、Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。
16.spring框架的优点?
Spring 具有简单、可测试和松耦合等特点,不仅可以用于服务器端的开发,也可以应用于任何 Java 应用的开发中。Spring 框架的主要优点具体如下。
1)方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
3)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
4)方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5)AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。
17.spring中bean的作用域?
https://blog.youkuaiyun.com/qq_40587575/article/details/80007257
18.spring的两个核心 IOC/DI/ AOP
https://www.cnblogs.com/miludeer/p/11054787.html
IOC就是控制反转,不是一种编程方法,而是一种编程思想。就是把对象的创建过程交给spring ioc容器去管理
AOP是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
Spring AOP是用纯Java实现的。不需要特殊的编译过程。Spring AOP不需要控制类加载器层次结构,因此适合在servlet容器或应用程序服务器中使用。
19.springMVC中常用的注解
1.)@Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
2.)@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
3.)@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
4.)@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
5.)@RequestParam
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上
6.)@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
20.springmvc中怎样调用ajax
https://www.cnblogs.com/blog411032/p/5590750.html
springMVC中使用ajax有两种方法,第一种是根据servletAPI来使用ajax,第二种是根据springMVC给我们提供的API来使用。
21.spring框架中涉及到的设计模式?
https://www.cnblogs.com/javastack/p/12572718.html
1.)简单工厂
2.)工厂方法
3.)单例
4.)适配器
5.)包装器
6.)代理
7.)观察
8.)策略
9.)模板方法
22.aop中通知类型的介绍
启用通知
前置通知
后置通知
环绕通知
23.springMVC中转发和重定向如何设定?
区别:请求重定向和请求转发都是web开发中资源跳转的方式。
请求转发是服务器内部的跳转
地址栏比发生变化
只有一个请求相应
可以通过request域对跳转目标的请求
请求重定向是浏览器自动发起对跳转目标的请求
地址栏会发生变化
两次请求相应
无法通过request域传递对象、
1.)传统的方式
request.getRequestDispatcher(" “).forward(request,response);
response.sendRedirect(” ");
2.)
return “forward:hello.action”;
return “redirect:/hello.action”;
3.)可以利用转发,实现允许用户访问WEB-INF下保存的指定资源
24.mybatis中如何实现增删改查?
https://blog.youkuaiyun.com/hanjiangb/article/details/80469665