企业官网网站建设咨询,深圳响应式网站制作,最强的网站建设电话,成套小说网站模板作者#xff1a;肥宅兜链接#xff1a;https://www.cnblogs.com/doudouxiaoye/p/5693399.html 1.为什么使用Spring ? 方便解耦#xff0c;简化开发;通过Spring提供的IoC容器#xff0c;可以将对象之间的依赖关系交由Spring进行控制#xff0c;避免硬编码所造成的过度程序… 作者肥宅兜链接https://www.cnblogs.com/doudouxiaoye/p/5693399.html 1.为什么使用Spring ? 方便解耦简化开发;通过Spring提供的IoC容器可以将对象之间的依赖关系交由Spring进行控制避免硬编码所造成的过度程序耦合。AOP编程的支持;通过Spring提供的AOP功能方便进行面向切面的编程如性能监测、事务管理、日志记录等。声明式事务的支持;方便集成各种优秀框架;降低Java EE API的使用难度;如对JDBCJavaMail远程调用等提供了简便封装2. 什么是IOC为什使用IOC ? IOC全称Iversion of Controller控制反转。 这概念是说你不用创建对象而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务但是要在配置文件里描述哪些组件需要哪些服务之后一个容器IOC容器负责把他们组装起来。 它能指导我们如何设计出松耦合、更优良的程序。 3. 什么是AOP为什么使用AOP ? AOP全称Aspect-Oriented Programming面向切面编程。 AOP面向切面编程就是把可重用的功能提取出来然后将这些通用功能在合适的时候织入到应用程序中比如事务管理、权限控制、日志记录、性能统计等。 AOP并没有帮助我们解决任何新的问题它只是提供了一种更好的办法能够用更少的工作量来解决现有的一些问题使得系统更加健壮可维护性更好。 4. 什么是Spring的事务管理 事务就是对一系列的数据库操作比如插入多条数据进行统一的提交或回滚操作如果插入成功那么一起成功如果中间有一条出现异常那么回滚之前的所有操作。这样可以防止出现脏数据防止数据库数据出现问题。 开发中为了避免这种情况一般都会进行事务管理。 Spring的声明式事务通常是指在配置文件中对事务进行配置声明其中包括了很多声明属性它是通过Spring Proxy帮你做代理自己不用额外的写代码只要在Spring配置文件中声明即可通常用在数据库的操作里面 编程式事务就是指通过硬编码的方式做事务处理这种处理方式需要写代码事务中的逻辑可以自己定制可以是数据库的东东也可以是其他的操作。 Spring中也有自己的事务管理机制一般是使用TransactionMananger进行管理可以通过Spring的注入来完成此功能。 5. Spring框架支持以下五种bean的作用域 singleton : 默认值bean在每个Spring ioc 容器中只有一个实例。prototype一个bean的定义可以有多个实例。request每次http请求都会创建一个bean该作用域仅在基于web的Spring ApplicationContext情形下有效。 session在一个HTTP Session中一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。global-session在一个全局的HTTP Session中一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。6. 什么是Spring的MVC框架 Spring配备构建Web应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成如StrutsSpring的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。 Spring mvc是一个基于mvc的web框架。Spring mvc是Spring框架的一个模块Spring mvc和Spring无需通过中间整合层进行整合。 7. 如何启用注解 在spring的xml配置中添加mvc:annotation-drivern即可 ?xml version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beans xmlns:contexthttp://www.springframework.org/schema/context xmlns:phttp://www.springframework.org/schema/p xmlns:mvchttp://www.springframework.org/schema/mvc xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd !-- 注解扫描 -- context:component-scan base-packageclub.sscai.annotation/ !--使用mvc注解声明 -- mvc:annotation-driven/ !-- 不使用mvc注解声明则要注入以下两个bean bean classorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter/ bean classorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping/ -- bean idviewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameprefix value//property property namesuffix value.jsp/property /bean/beans 8. Spring MVC的请求流程 第一步发起请求到前端控制器(DispatcherServlet)第二步前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找第三步处理器映射器HandlerMapping向前端控制器返回Handler第四步前端控制器调用处理器适配器去执行Handler第五步处理器适配器去执行Handler第六步Handler执行完成给适配器返回ModelAndView第七步处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象包括 Model和view第八步前端控制器请求视图解析器去进行视图解析根据逻辑视图名解析成真正的视图(jsp)第九步视图解析器向前端控制器返回View第十步前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域第十一步前端控制器向用户响应结果9. web.xml的配置 10. 注解的处理器映射器和适配器 注解映射器spring3.1之前默认加载映射器是org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping3.1之后要使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping在springmvc.xml中配置RequestMappingHandlerMapping!-- 注解处理器映射器 --bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping/bean使用RequestMappingHandlerMapping需要在Handler中使用controller标识此类是一个控制器Handler使用requestMapping指定Handler方法所对应的url。 注解适配器spring3.1之前默认加载映射器是org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter3.1之后要使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter!-- 注解适配器 --bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter /RequestMappingHandlerAdapter不要求Handler实现任何接口它需要和RequestMappingHandlerMapping注解映射器配对使用主要解析Handler方法中的形参。 11. spring 与 mybatis整合过程 第一步整合dao层 mybatis和spring整合通过spring管理mapper接口。 使用mapper的扫描器自动扫描mapper接口在spring中进行注册。第二步整合service层 通过spring管理 service接口。 使用配置方式将service接口配置在spring配置文件中。 实现事务控制。第三步整合springmvc 由于springmvc是spring的模块不需要整合。 主要配置有mybatis配置文件sqlMapConfig.xml配置别名自动扫描(实体类)mapper扫描器(接口数据库访问接口)数据库连接池配置声明式事务配置启用注解扫描配置注解映射器和适配器 视图解析器配置控制类 DispatcherServlet前端控制器配置spring配置文件加载类ClassLoadListener12. 前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件如果不在springmvc.xml中配置使用默认加载的 DispatcherSerlvet.properties。 13. 视图解析器配置前缀和后缀 14. sqlMapConfig.xmlmybatis自己的配置文件。 15. 配置数据源 16. 事务控制(applicationContext-transaction.xml)在applicationContext-transaction.xml中使用spring声明式事务控制方法。 17. 加载spring配置 18. 静态资源访问不被拦截 resources mapping/resources/** location/resources/ /resources mapping/images/** location/images/ /resources mapping/js/** location/js/ / 19. RequestMapping的作用 url映射窄化请求映射限制http请求方法20. controller方法的返回值 返回ModelAndView 需要方法结束时定义ModelAndView将model和view分别进行设置。返回string如果controller方法返回string 1). 表示返回逻辑视图名。真正视图(jsp路径)前缀逻辑视图名后缀 2). redirect重定向返回字符串格式为redirect:queryItem.action 3). forward页面转发返回字符串格式为“forward:queryItem.action” 返回void在controller方法形参上可以定义request和response使用request或response指定响应结果 1). 使用request转向页面如下request.getRequestDispatcher(页面路径).forward(request, response); 2). 也可以通过response页面重定向response.sendRedirect(url) 3). 也可以通过response指定响应结果例如响应json数据如下 response.setCharacterEncoding(utf-8); response.setContentType(application/json;charsetutf-8); response.getWriter().write(json串); 21. 参数绑定 默认支持的类型直接在controller方法形参上定义下边类型的对象就可以使用这些对象。在参数绑定过程中如果遇到下边类型直接进行绑定。1). HttpServletRequest通过request对象获取请求信息2). HttpServletResponse通过response处理响应信息3). HttpSession通过session对象得到session中存放的对象4). Model/ModelMapmodel是一个接口modelMap是一个接口实现 。作用将model数据填充到request域。简单类型通过RequestParam对简单类型的参数进行绑定。如果不使用RequestParam要求request传入参数名称和controller方法的形参名称一致方可绑定成功。如果使用RequestParam不用限制request传入参数名称和controller方法的形参名称一致。通过required属性指定参数是否必须要传入如果设置为true没有传入参数会报错。pojo绑定页面中input的name和controller的pojo形参中的属性名称一致将页面中数据绑定到pojo。(usename,age不需要user.username,user.age)自定义参数绑定实现日期类型绑定对于controller形参中pojo对象如果属性中有日期类型需要自定义参数绑定。将请求日期数据串转成 日期类型要转换的日期类型和pojo中日期属性的类型保持一致。22. Spring MVC 和 Struts2 对比 Struts2是类级别的拦截 一个类对应一个request上下文SpringMVC是方法级别的拦截一个方法对应一个request上下文而方法同时又跟一个url对应所以说从架构本身上SpringMVC 就容易实现restful url由上边原因SpringMVC的方法之间基本上独立的独享request response数据请求数据通过参数获取处理结果通过ModelMap交回给框架方法之间不共享变量而Struts2搞的就比较乱虽然方法之间也是独立的但其所有Action变量是共享的这不会影响程序运行却给我们编码 读程序时带来麻烦每次来了请求就创建一个Action一个Action对象对应一个request上下文。由于Struts2需要针对每个request进行封装把requestsession等servlet生命周期的变量封装成一个一个Map供给每个Action使用并保证线程安全所以在原则上是比较耗费内存的。SpringMVC集成了Ajax使用非常方便只需一个注解ResponseBody就可以实现然后直接返回响应文本即可而Struts2拦截器集成了Ajax在Action中处理时一般必须安装插件或者自己写代码集成进去使用起来也相对不方便。springmvc面向方法开发的更接近service接口的开发方式struts2面向类开发。springmvc可以单例开发struts2只能是多例开发。23. 乱码处理 post乱码在web.xml添加post乱码filterCharacterEncodingFilter对于get请求中文参数出现乱码解决方法有两个 1). 修改tomcat配置文件添加编码与工程编码一致如下 Connector URIEncodingutf-8 connectionTimeout20000 port8080 protocolHTTP/1.1 redirectPort8443/ 2). 对参数进行重新编码 String userName new String(request.getParamter(userName).getBytes(ISO8859-1),utf-8) ISO8859-1是tomcat默认编码需要将tomcat编码后的内容按utf-8编码 24. 集合类型绑定 数组绑定controller方法参数使用(Integer[] itemId)页面统一使用:itemId 作为namelist绑定pojo属性名为itemsList页面itemsList[index].属性名map 绑定pojo属性名为Map itemInfo new HashMap(); 页面input typetext nameitemInfo[name]/25. spring 校验 项目中通常使用较多是前端的校验比如页面中js校验。对于安全要求较高点建议在服务端进行校验。springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。校验思路页面提交请求的参数请求到controller方法中使用validation进行校验。如果校验出错将错误信息展示到页面。26. 数据回显 ModelAttribute还可以将方法的返回值传到页面在方法上加注解ModelAttribute使用最简单方法使用model可以不用ModelAttributemodel.addAttribute(id, id);springmvc默认对pojo数据进行回显。pojo数据传入controller方法后springmvc自动将pojo数据放到request域key等于pojo类型首字母小写public String testParam(PrintWriter out, RequestParam(username) String username) { //out直接输出27. 异常处理 springmvc提供全局异常处理器一个系统只有一个异常处理器进行统一异常处理。 系统遇到异常在程序中手动抛出dao抛给service、service给controller、controller抛给前端控制器前端控制器调用全局异常处理器。 28. 上传图片 在页面form中提交enctypemultipart/form-data的数据时需要springmvc对multipart类型的数据进行解析。在springmvc.xml中配置multipart类型解析器。方法中使用MultipartFile attach (单个文件上传) 或者 MultipartFile[] attachs (多个文件上传)29. Json处理 加载json转换的jar包springmvc中使用jackson的包进行json转换requestBody和responseBody使用下边的包进行json转配置json转换器。在注解适配器RequestMappingHandlerAdapter中加入messageConverters。如果使用 则会自动加入。ajaxController (ResponseBody、RequestBody)注意ajax中contentType如果不设置为json类型则传的参数为key/value类型。上面设置后传的是json类型。详见http://www.cnblogs.com/Jtianlin/p/5224885.html 30. 拦截器 定义拦截器实现HandlerInterceptor接口。接口中提供三个方法。 a. preHandle 进入 Handler方法之前执行用于身份认证、身份授权比如身份认证如果认证通过表示当前用户没有登陆需要此方法拦截不再向下执行 b. postHandle进入Handler方法之后返回modelAndView之前执行应用场景从modelAndView出发将公用的模型数据(比如菜单导航)在这里传到视图也可以在这里统一指定视图 c. afterCompletion执行Handler完成执行此方法应用场景统一异常处理统一日志处理拦截器配置 a. 针对HandlerMapping配置(不推荐)springmvc拦截器针对HandlerMapping进行拦截设置如果在某个HandlerMapping中配置拦截经过该 HandlerMapping映射成功的handler 最终使用该 拦截器。 (一般不推荐使用) b. 类似全局的拦截器springmvc配置类似全局的拦截器springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中 我创建了一个用来记录自己学习之路的公众号感兴趣的小伙伴可以关注一下微信公众号niceyoo