对原始的
Servlet+MVC+JDBC
的登录
Demo
进行改造,使用
SSM
框架进行实现。
原始代码位置:
http://blog.csdn.net/u014360189/article/details/76216088
一、
配置
Spring
使用
Spring
来配置
bean
组件,完成各层类及其使用的下层属性的注入。
主要有:
-
LoginServlet
的配置,
LoginServlet
中
loginService
属性的注入
-
LoginServiceImp
的配置,
LoginServiceImp
中
loginDAO
属性的注入
-
LoginDAOImp
的配置
1.
配置
web.xml
在
web.xml
中进行
Spring
核心配置,主要配置:
Listener
:
ContextLoaderListener
Context-param
:
contextConfigLocation
核心代码:
<!-- spring核心配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.
创建
spring-contet.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
必须有xmlns和xmlns:xsi这两个
xmlns后面紧跟的是命名空间 命名空间对应的URI是一个存放XSD的地址
xsi:shemaLocation后面跟的是命名空间对应class的文件位置
schemaLocation提供了一个xml 命名空间到对应的XSD(Xml Schema Definition)文件的一个映射,它的值由一个或多个URI引用对组成,
两个URI之间以空白符分隔(空格和换行均可)。第一个URI是定义的 XML命名空间的值,第二个URI给出Schema文档的实际位置,
Schema处理器将从这个位置读取Schema文档,该文档的targetNamespace必须与第一个URI(XML命名空间的值)相匹配。
我们打开Spring-aop-4.1.6RELEASE.jar (这是我本地的版本),这个包下有一个META_INF文件夹,其中有两个文件:spring.handlers和spring.schemas。
Spring是把XSD文件放到本地了,再在spring.schemas里做了一个映射,优先从本地里加载XSD文件。
-->
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dbUtil" class="com.lizem.check_right.tools.DButil">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="pwd" value="root"></property>
</bean>
<bean id="loginDAO" class="com.lizem.check_right.dao.LoginDAOImp">
<property name="db" ref="dbUtil"></property>
</bean>
<bean id="loginService" class="com.lizem.check_right.service.LoginServiceImp">
<property name="loginDAO" ref="loginDAO"></property>
</bean>
<bean id="loginServlet" class="com.lizem.check_right.controller.LoginServlet">
<property name="loginService" ref="loginService"></property>
</bean>
</beans>
3.
给类属性添加
getters
和
setters
方法
主要有:
1. LoginServlet
中
loginService
属性
2. LoginServiceImp
中
loginDAO
属性
3. LoginDAOImp
中的
dbUtil
属性
4.DButil
中的数据库连接参数
这里把之前的类中给注入的属性
new
对象的代码可以去掉了,直接使用就行。
配置到这里基本上已经完工了,但是如果此时运行代码会发现
loginServlet
中的
loginService
报空指针异常。
原因是配置在
web.xml
中的
loginServlet
是由
web
容器创建的,而配置在
spring-contet.xml
中的
loginSrvlet
是由
Spring
容器创建的,两个不是同一个,那么使用的
loginServlet
其实是
web
容器创建的那个,自然
loginService
会报空指针了。在网上查了下
Spring
的
servlet
配置,可以参考下面的解决方法。
解决方法:
http://blog.csdn.net/xwl617756974/article/details/7451773
4.
创建一个
Spring
的
bean
组件到
servlet
的代理
具体方法参考上面的解决方法。
源代码位置:
链接:http://pan.baidu.com/s/1jIKIcZW 密码:bu2n