一、 Spring
1、使用Spring需要的基本的配置:
1)、添加支持的jar包(这个可以网上自己百度下)。
2)、添加spring的配置文件applicationContext.xml(这个名字也可以自己定义),一般存放在src下面,这个时候Spring容器的环境就已经搭建好了:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbchttp://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpahttp://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
</beans>
3)、这个时候就可以使用spring容器进行Bean的管理,在applicationContext.xml中配置需要管理的bean,如下:
<!-- id是唯一对于这个Bean的标识,不能重复,实例化的时候根据id进行实例化。Class是该类的完全限定名 -->
<bean id=”a”class=”com.shxzhlxrr.A”/>
a、 使用静态工厂的方法进行实例化,需要配置一个factory-method的属性
<bean id=”b” class=”com.shxzhlxrr.B” factory-method=”getInstance”/>
b、 使用使用动态的工厂进行实例化,需要先将实例化的工程进行配置
<bean id=”a” class=”com.shxzhlxrr.A”/>
<bean id=”b” factory-bean=”a” factory-method=”getB”/>
2、控制Bean的实例化和销毁
1)、Bean的作用域:
Singleton,单例,一个Bean定义对应一个Bean实例,不设置时默认为该值。
Prototype,一个Bean定义对应多个实例。
Request,在一次http请求中一个Bean定义对应一个Bean实例,仅限于web环境。
Session,在一次http Session中,一个Bean定义对应一个实例,仅限于web环境。
global Session,在一个全局的httpsession 中,一个Bean定义对应一个实例。
2)、Bean的初始化和销毁
注意,在Spring容器建立的时候,Spring容器就会把所有的Bean对象进行初始化,如果想要容器在实力化的时候再进行初始化可以设置lazy-init属性为true
销毁化:在bean中添加destroy-method属性,值为销毁方法的名字
该属性只对单例模式有效,即scope的值为singleton
3)、对Bean进行初始化的操作可以调用初始化方法进行初始化(参考上面),也可以使用setter方法或构造方法进行初始化的操作。
a、使用setter方法进行初始化
<property name=”(属性的名字)” value=”(属性的值)”/>
b、使用有参的构造方法进行初始化
<constructor-arg name=”属性的名字”(也可以使用index属性进行赋值,该值是构造方法中你想赋值的属性的索引,从0开始) value=”属性的值”/>
3、depend-on(依赖),当一个bean对另一个bean存在依赖关系的时候就可以使用该属性指定依赖对象Bean,该值是依赖对象的id。
当具有depend-on属性的bean进行实例化的时候,会把它的依赖对象也进行初始化。
4,spring的自动的装配的功能:
在bean的配置中使用autowire可以自动的对bean进行赋值
no,默认值
byName,根据名字在容器中找与属性名字完全一样的bean进行赋值的操作。
byType,根据属性的类型进行赋值
constructor,跟byType一样你,只不过他是应用于构造函数
autodetect,通过bean类自动的决定使用constructor,还是byType.
示例:
<beanid=”userDao” class=”com.shxzhlxrr.bean.UserDao” autowire=”byName”/>
该UserDao中有dateSource属性,如果bean中有id为dataSource的,就会进行自动的赋值。
5,Bean对象的注入,分为内部bean和外部bean两种。
A,<property name=”userDao”>
<bean class=”com.dao.OracleUserDao”></bean>
</property>
B,使用ref属性引入外部bean
<propertyname=”userDao” ref=”dataSource”/>
6,注入集合,所有的集合都可以使用ref的方式进行注入,也可以直接注入。
<util:mapid="twomap">
<entrykey="001"value="Java语言基础"></entry>
<entrykey="002"value="C++"></entry>
</util:map>
<util:listid="onelist">
<value>tom</value>
<value>jack</value>
</util:list>
<util:propertiesid="prop">
<propkey="p1">001</prop>
<propkey="p2">002</prop>
<propkey="p3">003</prop>
</util:properties>
注入配置文件的值
<util:properties id=”jdbcProperties”location=”classpath:db.properties”></util:properties>
使用方法:value=”#{jdbcProperties.driver}”
7,组件扫描:指定一个包路径,spring会自动的扫描该包及子包下所有的组件类,当发现组件类的前面有特定的注解的时候就将该组件加入到spring容器,等价于原有配置 中的bean。
A,指定扫描类路径的配置
<context:component-scan base-package=”需要扫描的路径”>
B,注解标记
1),类的注解
@Component,通用注解
@Named,通用注解,一般使用@Component
@Respository,持久层组件注解
@Service,业务层组件注解
2),@PostContruct,指定初始化回调方法
@PreDestroy,指定销毁回调方法。
下面的注解可以用在属性或setter方法上,实现关系注入
@Resource,还可以指定名字@Resource(“name”),默认首先按名字进行匹配,然后按类型进行匹配
@Autowired/@Qualifier默认按类型进行匹配。
public class UserService{
//@Qualifier(“userDao”)
private UserDao userDao;
public void setUserDao(@Qualifier(“userDao”)UserDao dao){
}
}
@Inject(需要导入jar包)/@Named,用法同Autowired
8,注入表达式,@Value可以注入表达式,首先需要在xml中配置一个properties。
然后,
public class JDBCDataSource{
@Value(“#{jdbcProps.url}”)
private String url;
@Value(“#{jdbcProps.driver}”)
public void setUrl(String driver){
}
}
二、 spring-mvc
1、 处理流程
A、先导入支持jar包。
B、有一个servlet处理所有的请求。DispatcherServlet控制器。因此需要首先在web.xml中对其进行配置。
C、控制器根据HandlerMapping找到相应的控制器Controller组件。需要在spring.xml中进行配置,并建立好控制器组件。
D、控制器处理完之后返回一个ModelAndView对象,封装了处理结果数据和视图名称。
E、控制器在接受了ModelAndView之后,调用ViewResolver组件定位view并传递数据,生成响应页面。
2、 spring-mvc默认采用转发的方式定位视图。
重定向:
RedirectView view = new RedirectView("login.form");
return ModelAndView(view);
注意:重定向的时候会把request中的数据清空,如果想要传递参数,可以使用session。
3、 中文乱码的解决方案:
a) 、获取request,repsones设置解码编码为utf-8。设置响应的页面的编码为utf-8,解码为utf-8。该方式只能够解决post方式的乱码。
b) 、要解决get方式的请求的乱码需要自己进行转码,先将请求的数据转换为bytes,再根据utf-8转换为字符串。
c) 、在web.xml中配置CharacterEncodingFilter。需要表单提交的方式为post。
4、 拦截器
拦截器要实现HandlerInterceptor接口,重写三个方法。
PreHandle,处理器执行前调用,如果想要拦截就反悔false。
postHandle,处理器执行后,视图调用之前,可以通过ModelAndView对象对模型数据进行处理。
afterComletion,整个请求完了之后调用。
5,Spring MVC 和JDBC技术开发的主要步骤
a) 、创建web工程,搭建Spring MVC 和 JDBC技术环境,导入jar包,配置applicationContext.xml。
b) 、基于jdbcTemplate实现DAO组件,需要配置一个jdbcTemplate,dataSource。
c) 、编写配置Spring MVC的主要组件,例如,Controller,HandlerMapping,ViewResolver等。
d) 、编写jsp视图组件,利用标签和表达式显示模型数据。