freemarker的测试结果框架_总结下Java高级框架前半部分:

v2-df4efd488508351dff8b27610ff62b0f_1440w.jpg?source=172ae18b

SpringMVC:

1.springMvc是spring组织出品的一个表现层框架, 和struts2属于同类型的框架.

2. springMvc作用:

a. 接收请求和从请求中接收参数
b. 将处理好的数据返回给页面, 并在页面展示

3.springMvc三大组件:

处理器映射器, 处理器适配器, 视图解析器。
springMVC中需要我们写的有哪些:
  处理器也就是我们写的controller, 视图view也就是我们写的页面。

所有组件:

1.前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

2.处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler

3.处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

4.处理器Handler(需要程序员开发)

5.视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)

6.视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf....)

4. 如果在springMvc中没有配置处理器映射器, 处理器适配器也可以使用, 但是系统性能会降低。

如果没有在springMvc.xml中配置处理器映射器和处理器适配器, 默认每次请求都会去找DispatcherServlet.properties
配置文件, 去里面的处理器映射器列表和处理器适配器列表中, 逐个匹配, 找到对应类型的执行.如果在springMvc.xml
中显示的配置了处理器映射器和处理器适配器就会直接执行不会去找DispatcherServlet.properties配置文件, 就会
增强系统的运行速度。

5. 注解驱动:

作用就是配置这个注解就相当于显示的配置了最新版的注解形式的处理器映射器和处理器适配器, 会加强系统运行速度 。

6. 注解驱动和注解扫描, 是否需要都配置为什么, 有什么区别?

必须都配置, 注解驱动和注解扫描, 作用不一样, 
注解扫描, 是使用@Controller注解生效
注解驱动相当于显示配置最新版处理器映射器和处理器适配器, 加快系统运行速度。

7.SpringMVC工作原理:

SpringMvc是基于过滤器对servlet进行了封装的一个框架,
我们使用的时候就是在web.xml文件中配置DispatcherServlet类,
SpringMvc工作时主要是通过DispatcherServlet管理接收到的请求并进行处理。

具体执行流程如下:

SpringMVC工程流程描述:

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
       HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
       数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
       数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
       数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ,
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。

8.SpringMVC设定重定向和转发:

1.转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" 
2.重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

9.SpringMvc和AJAX相互调用:

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
1.加入Jackson.jar
2.在配置文件中配置json的映射
3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

10.SpringMVC的注意事项:

参数绑定:
 a)Springmvc默认支持的类型:
        httpServletRequest, HttpServletResponse, HttpSession, Model
        默认支持的参数就是在需要的时候可以加上, 不需要就可以不加, 随意使用.

    b)简单数据类型(string, double, long, boolean等)
        springMvc可以直接接收这些简单类型的参数, 并且可以进行自动的类型转换,
        要求接收的变量名称必须等于页面上input框的name属性值
        如果想要接收的变量名称随意起名可以使用@RequestParam注解, 一般不使用
        @RequestParam("id")Integer idddddd, 

    c)Pojo类型:
        要求: 接收的pojo的属性名称必须等于页面上input框的name属性值

    d)Pojo包装类型:
        要求: 页面的input框的name属性值必须等于接受的pojo的属性.属性.属性.....

    e)自定义参数绑定:
        默认springMvc只能够自动转换简单类型的参数, 对于date日期无法进行自动类型转换,
        所以需要我们手动编写自定义转换器进行转换.

解决POST和GET请求中文乱码问题:

解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8,
<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
 另外一种方法对参数进行重新编码:
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

11.Spring MVC的异常处理

答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

12.SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?

答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。

13.springMVC常用的注解有哪些?

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

14.SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?

答:一般用@Conntroller注解,表示是表现层,不能用别的注解代替。

15.如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。

16.怎样在方法里面得到Request,或者Session?

答:直接在方法的形参中声明request,SpringMvc就自动把request对象传入。

17.如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

18.如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

答:直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

19.SpringMvc中函数的返回值是什么?

答:返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

20.SpringMvc用什么对象从后台向前台传递数据的?

答:通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。

21.怎么样把ModelMap里面的数据放入Session里面?

答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

Spring入门点:

1.什么是容器,Spring与之前发表的知乎的容器有哪些异同点?

容器可以管理对象的生命周期、对象与对象之间的依赖关系,
你可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,
在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮你做好。

2.Spring是什么?为什么使用Spring?

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。
Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。
Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。
与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
Spring框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
要测试一项用Spring开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。
Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项。
Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)。

Spring有哪些特性?

轻量——从大小与开销两方面而言Spring都是轻量的。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。
它们也为Spring中的各种模块提供了基础支持。

Spring的重要特征有哪些?

Spring框架的两大核心特征:AOP和IoC。

Spring的IOC(控制反转),主要的作用是什么,程序中如何体现Spring的控制反转?

 Rod Johnson是第一个高度重视以配置文件来管理Java实例的协作关系的人,他给这种方式起了一个名字:控制反转(Inverse of Control,IoC)。
后来Martine Fowler为这种方式起了另一个名称:依赖注入(Dependency Injection)
因此不管是依赖注入,还是控制反转,其含义完全相同。
当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法:

原始做法: 调用者主动创建被依赖对象,然后再调用被依赖对象的方法。

简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。

Spring JDBC框架整合:

Spring JDBC 简介:

Spring JDBC 是spring 官方提供的一个持久层框架,对jdbc进行了抽象和封装,消除了重复冗余的jdbc重复性的代码,使操作数据库变的更简单。
但Spring  JDBC本身并不是一个orm框架,与hibernate相比,它需要自己操作sql,手动映射字段关系,在保持灵活性的同时,势必造成了开发效率的降低。如果需要使用完整的orm框架操作数据库,可以使用hibernate或者spring  Data Jpa。
Spring JDBC不同版本的api会稍有变动,但总体的变化不大。

模板类

Spring JDBC 提供了模板类对数据库简化对数据库的操作,其中JdbcTemplate是最常用的,如果需要使用命名参数可以使用NamedParameterJdbcTemplate

mapper映射

Spring JDBC 通过mapper接口把resultSet对象中的数据映射为java对象,
例如 List<Map<String, Object>,其实使用的是ColumnMapRowMapper的mapper实现。
我们自己可以通过实现RowMapper接口的方式自定义从resultSet到java对象的映射关系。

Spring 的事务管理

作为企业级应用程序框架,Spring 在不同的事务管理 API 之上定义了一个抽象层。而应用程序开发人员不必了解底层的事务管理 API,就可以使用 Spring 的事务管理机制。
Spring 既支持编程式事务管理,也支持声明式事务管理。

编程式事务管理

将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。在编程式管理事务时,必须在每个事物操作中包含额外的事务管理代码。

声明式事务管理

大多数情况下比编程式事务管理更好用。
它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。
事务管理作为一种横切关注点,可以通过 AOP 方法模块化。Spring 通过 Spring AOP 框架支持声明式事务。
Spring 从不同的事务管理 API 中抽象了一整套的事务机制。
开发人员不必了解底层事务  API,就可以利用这些事务机制。
有了这些事务机制,事务管理代码就能独立于特定的事务技术了。
Spring 的核心事务管理抽象是  org.springframework.transaction.PlatformTransactionManager,它为事务管理封装了一组独立于技术的方法。
无论使用  Spring 的哪种事务管理策略(编程式或声明式),事务管理器都是必须的。

MyBatis—Spring 项目:

目前大部分的 Java 互联网项目,都是用 Spring MVC + Spring + MyBatis 搭建平台的。
使用 Spring IoC 可以有效的管理各类的 Java 资源,达到即插即拔的功能,
通过 Spring AOP 框架,数据库事务可以委托给 Spring 管理,消除很大一部分的事务代码,
配合 MyBatis 的高灵活、可配置、可优化 SQL 等特性,完全可以构建高性能的大型网站。
毫无疑问,MyBatis 和 Spring 两大框架已经成了 Java 互联网技术主流框架组合,它们经受住了大数据量和大批量请求的考验,在互联网系统中得到了广泛的应用。
使用 MyBatis-Spring 使得业务层和模型层得到了更好的分离,与此同时,在 Spring 环境中使用 MyBatis 也更加简单,节省了不少代码,甚至可以不用 SqlSessionFactory、 SqlSession 等对象,
因为 MyBatis-Spring 为我们封装了它们。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值