javaEE中的spring配置笔记
0 JavaEE的工程目录
0.1 WebContent
项目的主目录,在eclipse新建工程时可以自己命名,部署时会把该文件夹的内容发布到tomcat的webapps里。
该目录下可以建立JS/CSS/JSP文件夹和index.jsp作为用户访问的前端内容。servlet和springMVC会通过所谓的转发器把这里的前端请求转发到后台java去。
0.1.1 WEB-INF
(0) WEB-INF文件夹是禁止通过URL访问的
(1) lib: 放第三方jar包
(2) classes: 发布时会把编译后的文件放在这里
(3) web.xml: Web应用程序的部署描述符,项目启动时web容器先读取这个进行一系列的配置。
0.2 src
源文件路径,一般存放java源文件。这个路径在eclipse中可以右键-Property-Java Build Path进行更改。比如增加一些放有配置文件的文件夹路径,比如resource/spring.xml。
0.3 build/classes
这个路径也可以在eclipse中可以右键-Property-Java Build Path进行更改。发布时会把这些文件搬到WebContent/WEB-INF/classes下。
0.4 一般的项目结构
1 web.xml
1.1 加载顺序
web.xml 的加载顺序是: context-param -> listener -> filter -> servlet 。而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。
1.2 context-param
- <!-- 用于设定上下文参数contextConfigLocation,指定spring相关文件的位置 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring.xml </param-value>
- </context-param>
- <!-- 在此设定的参数,可以在servlet中用getServletContext().getInitParameter("contextConfigLocation ")来取得 -->
1.3 listener
- <!-- 开启spring功能 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 防止内存溢出监听器 -->
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
ContextLoaderListener基于Web上下文级别的监听器:在启动服务器时,
(1) 创建上下文对象
(2) 读取contextConfigLocation参数,加载Spring文件创建Bean并放入上下文对象
(3) 将上下文对象放入ServletContext(就是Java Web的全局变量)中
1.4 filter
- <!-- 配置字符集过滤器 -->
- <filter>
- <filter-name>encodingFilter</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>
- <!-- 配置项目的编码mapping -->
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
1.5 servlet
- <!-- 配置spring mvc -->
- <servlet>
- <servlet-name>springMvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/spring-mvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!-- 配置spring mvc mapping -->
- <servlet-mapping>
- <servlet-name>springMvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
load-on-startup 元素在 web 应用启动的时候指定了 servlet 被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该 servlet 被调用的时候才加载这个 servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个 servlet ,容器必须保证值小的先被加载。
2 DispatcherServlet和ContextLoaderListner
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器,如BeanNameUrlHandlerMapping将URL与Bean名字映射。
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;如InternalResourceViewResolver将逻辑视图名映射为jsp视图。
5、本地化解析;渲染具体的视图等;
6、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
DispatchServlet会创建Spring应用上下文,并加载配置文件。DispatchServlet加载包含Web组件的bean,如控制器,视图解析器,处理器映射。可自行指定配置文件的位置。而ContextLoaderListner加载应用中的其他bean,通常是驱动应用后端的中间层和数据层组件。加载根据上下文参数contextConfigLocation。
关于WebContextLoaderListener和DispatcherServlet的大致处理可参考下图。
3 spring理论知识
3.1 spring核心
Spring框架的核心是Spring容器。容器负责管理应用中组件的生命周期,它会创建这些组件并保证它们的依赖能够得到满足。Spring自带多个容器实现,可以归为两种不同类型。
bean工厂:最简单的容器,提供基本的DI支持,由org.springframework.beans.factory.beanFactory接口定义。
应用上下文:基于BeanFactory构建,提供应用框架级别的服务,由org.springframework.context.ApplicationContext接口定义。Spring自带了多种类型的应用上下文。AnnotationConfigWebApplication:从一或多个基于java的配置类中加载Spring Web上下文。XmlWebApplicationContext:从Web应用下的一或多个XML配置文件中加载上下文定义。应用上下文准备就绪后,可以调用上下文的getBean方法从容器中获取bean。
Spring致力于简化企业级java开发,促进代码的松散耦合。成功的关键在于DI和AOP。DI有助于应用对象之间的解藕,而AOP可以实现横切关注点与它们所影响的对象之间的解藕。
DI是组装应用对象的一种方式,借助这种方式对象无需知道依赖来自何处或者依赖的实现方式。AOP帮助应用将散落在各处的逻辑汇集于一处,即切面。散布于应用中多处的功能被称为横切关注点,比如日志,安全,缓存,事务管理。通常来讲这些横切关注点从概念上是与应用的业务逻辑相分离的,把它们相分离正是AOP要解决的问题。
Bean的类型有以下几种。
单例(Singleton):整个应用,只创建bean的一个实例。
原型(Prototype):每次注入或通过Spring应用上下文获取时创建新的实例。
会话(Session):在Web应用中,为每个会话创建一个bean实例
请求(Request):在Web应用中,为每个请求创建一个bean实例。
3.2 Web中的Spring
Spring通常用来开发Web应用。SpringMVC基于MVC模式实现,能够帮助你构建Spring框架那样灵活和松耦合的Web应用程序。
三层架构:UIL,BLL,DCL(User Interface Layer, Business Logic Layer, Data Control Layer)。这与MVC是不同的。
大多数基于Java的Web框架中,所有请求都会通过一个前端控制器,在Spring MVC中,DispatchServlet就是前端控制器。DispatchServlet会查询处理器映射将请求发送到不同的控制器。Controller完成逻辑处理(委托给service完成),数据信息以model的形式传递
搭建Spring MVC
1:配置DispatchServlet和ContextLoaderListener。(可以在web.xml,也可以在java中配置)
2:启用SpringMVC(可以用XML,也可以用注解):启用SpringMVC,启用组件扫描,配置JSP视图解析器,配置静态资源的处理。
3:编写控制器@Controller@RequestMapping:注解映射Url,处理请求,传递model到视图view中,模型数据会作为请求属性放到Request中。
4:Spring MVC的高级技术:其中一个就是文件上传,multipart格式的数据将一个表单拆分为多个部分(part),每个部分对应一个输入域,可以允许某个部分为二进制数据。DispatchServlet没有实现解析multipart数据的功能,它将解析任务委托给MultipartResolver接口的实现。Spring内置了两个实现类,其中一个是CommonsMultipartResolver。Spring提供了MultipartFile接口用于处理multipart数据。表单form中enctype="multipart/form-data"告诉浏览器以multipart数据形式提交表单。
3.3 后端中的Spring
Spring的数据访问哲学:Spring的目标之一就是允许我们开发时能遵循OO原则中的“针对接口编程”。Spring对数据访问的支持也不例外,为了避免应用与特定的数据访问策略耦合在一起,编写良好的DAO应该以接口的方式暴露功能。此外,持久化方式的选择独立于DAO。
数据访问模板化:Spring的模板类处理数据访问的固定部分,事务控制,管理资源和处理异常。你只需要关心自己的数据访问逻辑。
配置数据源:通过JDBC驱动程序定义的数据源;连接池的数据源;等等
Spring中使用JDBC(模板):不要求掌握其它框架的查询语言,它是建立在SQL之上的;使用JDBC能够更好地对数据访问的性能进行调优,允许你使用数据库的所有特性;JDBC让我们在更低层次上处理数据。
在Spring中集成Hibernate(ORM工具)
1:org.Hibernate.Session接口提供基本的数据访问功能,如保存,更新,删除以及从数据库加载对象的功能。
2:获取Session对象的标准方式是借助于SessionFactory接口的实现类,它主要负责Session的打开,关闭以及管理。
3:我们要通过Spring的某一个session工厂bean来获取Hibernate SessionFactory。
4:在Spring应用上下文中配置完Session工厂bean后,就可以创建自己的DAO了。通常需要配置数据源,数据库连接属性,扫描包。
3.4 Spring集成
消息转换将控制器产生的数据转换为服务于客户端的表述形式。Spring自带了各种各样的转换器,满足了常见的将对象转换为表述的需要。(根据请求头信息转换数据)
需要在控制器方法添加@ResponseBody注解。它告诉DispatchServlet考虑请求头信息,并查找能够为客户端提供所需表述形式的消息转换器。
与之类似,@RequestBody也能告诉Spring查找一个消息转换器,将来自客户端的资源表述转换为对象。
javaEE中的spring配置笔记的更多相关文章
- javaEE中的hibernate配置笔记
0 从web.xml出发 项目中用Spring整合Hibernate,Spring贯穿整个项目,所以先看看Spring在哪一步整合了Hibernate.先看部分web.xml. 在context-pa ...
- Dubbo中对Spring配置标签扩展
Spring提供了可扩展Schema的支持,完成一个自定义配置一般需要以下步骤: 设计配置属性和JavaBean 编写XSD文件 编写NamespaceHandler和BeanDefinitionPa ...
- Apache运维中常用功能配置笔记梳理
Apache 是一款使用量排名第一的 web 服务器,LAMP 中的 A 指的就是它.由于其开源.稳定.安全等特性而被广泛使用.下边记录了使用 Apache 以来经常用到的功能,做此梳理,作为日常运维 ...
- Hbase与Maven工程的Spring配置笔记
1.HBase基本操作 hbase shell: 连接到正在运行的HBase实例 help: 显示一些基本的使用信息以及命令示例. 需要注意的是: 表名, 行, 列都必须使用引号括起来 create ...
- [SSH 3]以网上商城项目浅谈spring配置
导读:在做ITOO项目的时候,就用到了容器+反射,从而运用了依赖注入和依赖查找.如果看过WCF端的配置文件,那么对于这个spring的配置就很容易理解.本篇博客,是对于自己做的一个小项目中所运用到的s ...
- (转)Spring读书笔记-----Spring核心机制:依赖注入
Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...
- Spring学习笔记--依赖注入
依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...
- Spring配置扫描mybatis的mapper文件注意:
一般会将不业务的mapper文件放到不同的包中: spring配置扫描就需要配置下面的方式(两个*): <!-- mybatis文件配置,扫描所有mapper文件 --> <bean ...
- Spring配置DataSource数据源
在Spring框架中有例如以下3种获得DataSource对象的方法: 1.从JNDI获得DataSource. 2.从第三方的连接池获得DataSource. 3.使用DriverManagerDa ...
随机推荐
- EJB包含哪3种bean
EJB包含哪3种bean 解答:session bean(会话bean), entity bean(实体bean), message bean(消息bean)
- MATLAB中的文件类型总结
% ***.m文件 : 脚本文件或者函数文件或者:% ***.mat文件:数据存储文件(二进制文件,可以ASCII码形式保存和加载,% 类似于单行EXCEL表格) ...
- 【python】计算器
from __future__ import division import sys from math import * from PyQt4.QtCore import * from PyQt4. ...
- hdu 5090 Game with Pearls(最大匹配)
Game with Pearls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Volley 的使用以及自定义Request
Volley 的使用以及自定义Request 一.什么是 Volley 2013年Google I/O大会上推出了一个新的网络通信框架.Volley是Android平台上的网络通信库,能使网络通信更快 ...
- 编写高质量代码--改善python程序的建议(三)
原文发表在我的博客主页,转载请注明出处! 建议十三:警惕eval()的安全漏洞 相信经常处理文本数据的同学对eval()一定是欲罢不能,他的使用非常简单: eval("1+1==2" ...
- [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of p ...
- mysql 中用户默认密码加密问题
问题描述: 在mysql中 user表中新增用户默认密码为123456,但是在数据库中显示不能为明文,而mysql的默认字段不能用函数 解决方法: 用触发器 delimiter | drop trig ...
- luarocks错误 require ‘luasql.mysql' 报module 'luasql.mysql' not found:
错误: require 'luasql.mysql'stdin:1: module 'luasql.mysql' not found: no field package.preload['luasql ...
- Android REST webservice 类
App与后台交互,后台使用的是Jersey RESTful 服务.在APP端使用Android 内部集成的HttpClient接口,无需引入第三方jar包, import org.apache.htt ...