Spring与SpringMVC 常见面试问题

本文详细介绍了Spring框架和SpringMVC的相关概念,包括Spring的非侵入式设计、依赖注入、面向切面编程以及SpringMVC的工作流程。此外,还讨论了IOC的XML与注解实现方式,@Autowired注解的查找规则,SpringMVC的优点和使用方法,以及异常处理和拦截器的使用。内容涵盖了从Spring的基本概念到SpringMVC的实践操作。
摘要由CSDN通过智能技术生成

1、 什么是Spring

Spring是一个开源框架,为简化企业级开发而生,同时Spring是一个IOC(DI)和AOP容器框架。

Spring的优点:

非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API

依赖注入:DI——Dependency Injection,反转控制(IOC)最经典的实现。

面向切面编程:Aspect Oriented Programming——AOP

容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期

组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以  使用XML和Java注解组合这些对象。

一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)。

2、 什么是ioc 什么是依赖注入

Ioc:inversion of control 控制反转 我们不再手动创建对象 而是将对象的创建权交给IOC容器,需要获取对象时直接从IOC容器中获取

DI:dependency injection 依赖注入 IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。

3、 IOC开发中怎么实现?两种方式:xml   注解

通过配置Spring.xml文件 或者使用注解

4、 ioc  XML文件实现方式,注解实现方式

1>在spring.xml文件里 写一个组件<bean>并为其赋值 然后在需要的地方 通过实例化IOC容器 根据组件对应的类型或id值 从容器中提取 ClassPathXmlApplicationContext

2>使用注解,需要先在web.xml文件中配置监听器ContextLoaderListener 再在dao层使用注解@Reponsitory  service层加注解@Service  WEB层加注解@Controller  需要使用对象的时候 使用@Autowired注解  这样IOC容器就会自动创建好这个对象

5、@AutoWired注解查找规则

会按照类型在IOC容器中查找

找到一个符合要求的就会自动装配

没有找到会报错

找到多个: 使用变量名作为id进行查找,找到就自动装配;或者使用注解@qualifier根据指定id进行查找,找不到就会报错。

6、扫包标签

context:component-scan

7、引入外部文件(控制数据源)

context:property-placeholder  location="classpath:db.properties"

8、IOC怎么创建多实例

在bean标签中加入属性scope(“prototype”)

9、什么是SpringMVC

是一种轻量级的、基于mvc的web层应用框架。

SpringMVC的优点:

1>天生与Spring框架集成,如:(IOC,AOP)

2>支持Restful风格

3>进行更简洁的Web层开发

4>支持灵活的URL到页面控制器的映射

5>非常容易与其他视图技术集成,如:Velocity、FreeMarker等等。

6>因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因 此很容易被其他框架使用)

7>非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API

8>更加简单、强大的异常处理

9>对静态资源的支持

10>支持灵活的本地化、主题等解析

10、SpringMVC怎么用

1>在POM文件中添加依赖 引入spring-web和spring-webmvc两个jar包

2>在web.xml中添加前端控制器:dispatcharServlet

3>在类上加@Controller注解 标明该类为控制器

4>类中的一个方法对应一个请求配置请求路径的映射:@RequestMapping

11、SpringMVC的运行流程

1>页面发送请求

2>前端控制器接收到这个请求

3>去容器中观察所有的@Controller组件,哪个组件能处理这个请求

4>看方法上的@RequestMapping标注是否和请求地址一样

5>按照页面地址 转发到这个路径下的方法

12、@RequestMapping注解什么意思,写在哪,分别表示什么意思,属性设置

该注解表示请求路径映射方法名

可以写在方法上,表示跳转路径(映射)

也可以写在类上,表示根目录

可以包含的属性有:value 请求路径的映射,作为处理请求的方法

Method  设置请求方式

Params 限定携带参数

  Heads 设置请求头

13、入参处理 单个变量,多个变量  @requestparam注解的属性设置 传入原生api

单个变量:获取超链接中的参数

当超链接中的变量名与方法参数的变量名一致时,可以直接获取

当超链接中的变量名与方法参数的变量名不一致是,通过注解@RequestParam获取超链接中的参数 但这就要求超链接中必须携带该参数

传递给实体类,可以通过form表单,input输入框向实体类传值 但是要求name值与实体类属性名一致

@RequestParam要求超链接中必须存在所标明的参数 如果没有 就会报错 如果不希望报错并且如果超链接中未携带指定参数 就给它指定一个默认值,可以设置required=”false”(不在出现异常) dufaultValue=””(超链接未携带指定参数将用此值作为默认值)

原生API 在方法参数列表传入HttpServletRequest request 然后在方法里request.getParameter(“超链接中参数名”)

14、出参处理

在方法参数列表中传入隐藏对象模型:Model model、 Map<String,Object> map  ModelMap modelmap  将数据存入对象模型中(其实是存入了request域中) 前台可以通过EL表达式获取

或者使用servlet原生API 存入域中(request,response,session.......),前台同样使用EL表达式获取

15、如何处理时间类型

在pojo类中使用Date的属性上添加注解,form表单中提交的数据格式 与 注解中声明的格式统一即可

接收到数据后在Student 对象中 ,传入dao层 存入数据库时,需要java.util.Date 转为java.sql.Date 装填占位符:

new java.sql.Date(stu.getBirth().getTime());

 

 

#$#$$$#$(这里的截图不知原因上不去就省略了)%#$%$#

 

 

16、在springmvc中如何使用ajax,ajax请求的语法格式

导入jackson json处理工具包

在需要使用ajax传送数据至前台页面的方法上加上注解@ResponseBody

如果要获取ajax从前台传到后台的数据,在需要注入该数据的参数前加上注解@RequestBody

Ajax语法格式:

$(function(){

$.ajax({

type:”提交方式get/post”,

url:”请求路径”,

dataType:”数据传输格式json”,

data:{前台向后台传输的数据 a:a},

success:function(data){

成功回调函数

}

})

})

17、文件上传的步骤

1> 在本地tomcat中设置真实上传路径以及虚拟路径

 2> 导包:commons-fileupload

 3> springmvc 配置文件上传解析器CommonsMultipartResolver

 4> jsp页面 使用表单添加属性enctype="multipart/form-data" 添加输入框<input type="file" name="picurl">

 5>controller控制器 获取文件 方法参数使用MutilpartFile picurl

  调用picurl.getOriginalFilename();获取文件名

然后调用picurl.transferTo(new File("文件上传路径"+文件名))开始上传文件

18、springmvc如何处理异常

三种方法

1>在本类中:在方法上使用@ExceptionHandler 声明属性value={具体的异常类.class}如果不知道是什么类型的 可以写成Exception e 因为Exception是所有异常类的父类,但是如果有精确处理,会优先走精确处理

2>外部处理类来处理异常

 关键注解:@ControllerAdvice

在方法上使用@ExceptionHandler 声明属性value={具体的异常类.class}

3>在springmvc中配置异常处理解析器

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="java.lang.ArithmeticException">error2</prop>

<prop key="java.lang.NullPointerException">error2</prop>

</props>

</property>

</bean>

若想将错误信息显示在页面上 可以使用ModelAndView模型对象 将错误信息存入其中

异常处理的优先级别:本类>外部处理类>配置文件

19、soringmvc拦截器

定义:Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

如何使用:声明一个类 实现HandlerInterceptor接口 重写里面的方法,在springmvc.xml文件中使用mvc名称空间配置拦截器:

<mvc:interceptors>

<mvc:interceptor>

<!-- 配置商品被拦截器拦截 -->

<mvc:mapping path="/bill/**" /> 要拦截的方法

<!-- 配置具体的拦截器 -->

<bean class="com.buba.lanjie.Lanjieqi" /> 声明的异常类的对象创建

</mvc:interceptor>

</mvc:interceptors>

20、页面发起请求的方式,controller怎么接收参数

页面发起请求向后台传输数据的方式:超链接、ajax、form表单

Controller接收时,如果参数名相同,直接接收;

如果参数名不同,使用注解@RequestParam(“请求中携带的参数名”),将参数注入到方法的参数中

21、Controller层怎么传递数据给页面,页面怎么获取

可以将数据传入隐藏模型对象Model、Map、ModelMap、ModelAndView ,前台使用EL表达式从request域中获取数据;

可以使用servlet原生api 将数据存入指定的域中,前台通过EL表达式从对应的域中获取

可以通过ajax传递数据,前台通过ajax的成功回调函数,获取后台传过来的数据。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值