SpringMVC基础知识

1. 为什么使用Spring框架?
    1). 方便解耦,简化开发
         通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
    2). AOP编程的支持
         通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测、事务管理、日志记录等。
    3). 声明式事务的支持
    4). 方便集成各种优秀框架
    5). 降低Java EE API的使用难度
         如对JDBC,JavaMail,远程调用等提供了简便封装
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的注入来完成此功能。

下面的事务声明 全局的。  注解方式 能够灵活一些。

事务嵌套问题 https://blog.csdn.net/zmx729618/article/details/77976793   PROPAGATION_REQUIRED 可以


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框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。
    spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
7. 如何启用注解:
    <context:annotation-config/>
    如果使用<context:component-scan base-package="com.tgb.web.controller.annotation"> </context:component-scan>  则上面内容可以省略 

   一般controller的扫描和service扫描分开。
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.method.annotation.RequestMappingHandlerMapping注解映射器。

      在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

      使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置

11. spring 与 mybatis整合过程

      参考网址: https://www.cnblogs.com/wangmingshun/p/5674633.html

     优秀开源框架:

     MyBatis-Plus 只做增强 不修改底层。

     分页插件,逻辑删除,自动填充,乐观锁,多租户  

12. 视图解析器配置前缀和后缀:  

      

    spring freemarker整合  https://www.cnblogs.com/weizhxa/p/6836246.html

 13.事务控制(applicationContext-transaction.xml),在applicationContext-transaction.xml中使用spring声明式事务控制方法。

      

14. 加载spring配置

            

15. 静态资源访问不被拦截:

      <resources mapping="/resources/**" location="/resources/" />

      <resources mapping="/images/**" location="/images/" />

      <resources mapping="/js/**" location="/js/" />

     为什么要上述声明:https://www.cnblogs.com/caoyc/p/5639078.html

16. controller方法的返回值

      16.1 返回ModelAndView 

              需要方法结束时,定义ModelAndView,将model和view分别进行设置。 

     16.2 返回string

               如果controller方法返回string,

               1). 表示返回逻辑视图名。真正视图(jsp路径)=前缀+逻辑视图名+后缀

               2). redirect重定向:返回字符串格式为:"redirect:queryItem.action"  

               3). forward页面转发:返回字符串格式为:“forward:queryItem.action”

      16.3 返回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;charset=utf-8");

                    response.getWriter().write("json串");

17. 参数绑定:

      17.1 默认支持的类型

               直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。

               1). HttpServletRequest:通过request对象获取请求信息

               2). HttpServletResponse:通过response处理响应信息

               3). HttpSession:通过session对象得到session中存放的对象

               4). Model/ModelMap:model是一个接口,modelMap是一个接口实现 。作用:将model数据填充到request域。

      17.2 简单类型

              通过@RequestParam对简单类型的参数进行绑定。

              如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。

              如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。

              通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,会报错。

      173 pojo绑定

              页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。(usename,age;不需要user.username,user.age)

      17.4 自定义参数绑定实现日期类型绑定

              对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。将请求日期数据串转成 日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

18. 乱码处理

      1). post乱码

           在web.xml添加post乱码filter:CharacterEncodingFilter

      2). 对于get请求中文参数出现乱码解决方法有两个:

           a. 修改tomcat配置文件添加编码与工程编码一致,如下:

               <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

           b. 对参数进行重新编码:

               String userName = new  String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

               ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

19. 集合类型绑定

      1). 数组绑定:

           controller方法参数使用:(Integer[] itemId)

           页面统一使用:itemId 作为name

      2). list绑定:

           pojo属性名为:itemsList

           页面:itemsList[index].属性名

      3). map 绑定:

           pojo属性名为:Map<String, Object> itemInfo = new HashMap<String, Object>(); 

           页面: <td>姓名:<inputtype="text"name="itemInfo['name']"/>

20. spring 校验           

      1). 项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

      2). springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。

           校验思路:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

21. 数据回显 

      1). @ModelAttribute还可以将方法的返回值传到页面:在方法上加注解@ModelAttribute

      2). 使用最简单方法使用model,可以不用@ModelAttribute:model.addAttribute("id", id);

      3). springmvc默认对pojo数据进行回显。pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

      4). public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接输出

22. 异常处理

      springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

      系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

      

23. 上传图片

      1). 在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。

      2). 在springmvc.xml中配置multipart类型解析器。

             

        3). 方法中使用:MultipartFile attach (单个文件上传) 或者  MultipartFile[] attachs (多个文件上传)

24. Json处理

       1). 加载json转换的jar包:springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转)

       2). 配置json转换器。在注解适配器RequestMappingHandlerAdapter中加入messageConverters。如果使用<mvc:annotation-driven /> 则会自动加入。

       3). ajax

         

       4). Controller (ResponseBody、RequestBody)

        

       5). 注意ajax中contentType如果不设置为json类型,则传的参数为key/value类型。上面设置后,传的是json类型。

             详见:http://www.cnblogs.com/Jtianlin/p/5224885.html

25. 拦截器:

      1). 定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。

            a. preHandle :进入 Handler方法之前执行,用于身份认证、身份授权,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行

            b. postHandle:进入Handler方法之后,返回modelAndView之前执行,应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图

            c. afterCompletion:执行Handler完成执行此方法,应用场景:统一异常处理,统一日志处理

      2). 拦截器配置:

           a. 针对HandlerMapping配置(不推荐):springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler

               最终使用该 拦截器。  (一般不推荐使用)

           b. 类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中

            

参考Link https://www.cnblogs.com/sunniest/p/4555801.html

26 模板引擎选择 freemarker

https://www.ktanx.com/blog/p/4965

27 国际化的实现
     

转载于:https://my.oschina.net/u/1403507/blog/3013439

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值