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文件里 写一个组件
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
或者使用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" 添加输入框
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中配置异常处理解析器
若想将错误信息显示在页面上 可以使用ModelAndView模型对象 将错误信息存入其中
异常处理的优先级别:本类>外部处理类>配置文件
19、soringmvc拦截器
定义:Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
如何使用:声明一个类 实现HandlerInterceptor接口 重写里面的方法,在springmvc.xml文件中使用mvc名称空间配置拦截器:
20、页面发起请求的方式,controller怎么接收参数
页面发起请求向后台传输数据的方式:超链接、ajax、form表单
Controller接收时,如果参数名相同,直接接收;
如果参数名不同,使用注解@RequestParam(“请求中携带的参数名”),将参数注入到方法的参数中
21、Controller层怎么传递数据给页面,页面怎么获取
可以将数据传入隐藏模型对象Model、Map、ModelMap、ModelAndView ,前台使用EL表达式从request域中获取数据;
可以使用servlet原生api 将数据存入指定的域中,前台通过EL表达式从对应的域中获取
可以通过ajax传递数据,前台通过ajax的成功回调函数,获取后台传过来的数据。