SSM整合
项目源码下载(http://pan.baidu.com/s/1gf6yKU3)
备注:本项目中还要其他的功能点,但是该笔记中只是对ssm框架进行的解析
1
、导入相关
jar
包(所有的
jar
包都导入了)
*jar
包有些没用的这里没有进行删除
2
、配置相关配置文件,
(
1
)
web.xml
<display-name>NA_web</display-name>
<!--spring
的配置
-->
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
classpath:applicationContext.xml
</
param-value
>
</
context-param
>
<
listener
>
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
</
listener
>
<!-- springmvc
配置
-->
<
servlet
>
<!--springmvc
的核心是
dispatcherServlet
,它负责控制整个页面的请求路径
-->
<
servlet-name
>
dispatcherServlet
</
servlet-name
>
<
servlet-class
>
org.springframework.web.servlet.DispatcherServlet
</
servlet-class
>
<!--
初始化参数
,
相当于
src
目录
-->
<
init-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
classpath:na.xml
</
param-value
>
</
init-param
>
<!--
表示启动容器时初始化
Servlet -->
<
load-on-startup
>
1
</
load-on-startup
>
</
servlet
>
<!--
拦截器,拦截所有以
.do
结尾的请求
-->
<
servlet-mapping
>
<
servlet-name
>
dispatcherServlet
</
servlet-name
>
<
url-pattern
>
*.do
</
url-pattern
>
</
servlet-mapping
>
<!--
处理从页面传递中文到后台而出现的中文乱码问题
-->
<
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
>
<
filter-mapping
>
<
filter-name
>
encodingFilter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
<
welcome-file-list
>
<
welcome-file
>
index.jsp
</
welcome-file
>
</
welcome-file-list
>
|
(2).applicationcontext.xml
(
spring
的配置)
<!-- 配置dataSource -->
<!--
获取配置文件
-->
<
bean
id
=
"config"
class
=
"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
>
<
property
name
=
"locations"
>
<
list
>
<
value
>
classpath:db-config.properties
</
value
>
</
list
>
</
property
>
</
bean
>
<!--
获取数据源
-->
<
bean
id
=
"dataSource"
class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<
property
name
=
"driverClassName"
value
=
"${db.dirverClass}"
/>
<
property
name
=
"url"
value
=
"${db.url}"
/>
<
property
name
=
"username"
value
=
"${db.username}"
/>
<
property
name
=
"password"
value
=
"${db.password}"
/>
</
bean
>
<
bean
id
=
"mybatisConfig"
class
=
"org.springframework.core.io.ClassPathResource"
>
<
constructor-arg
index
=
"0"
value
=
"mybatis.cfg.xml"
></
constructor-arg
>
</
bean
>
<!--
配置工厂
-->
<
bean
id
=
"sqlSessionFactory"
class
=
"org.mybatis.spring.SqlSessionFactoryBean"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
></
property
>
<
property
name
=
"configLocation"
ref
=
"mybatisConfig"
></
property
>
</
bean
>
<!--
配置声明式事务
-->
<!--
配置事务管理器
-->
<
bean
id
=
"txManager"
class
=
"org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
></
property
>
</
bean
>
<
tx:advice
id
=
"txAdvice"
transaction-manager
=
"txManager"
>
<
tx:attributes
>
<
tx:method
name
=
"save"
propagation
=
"REQUIRED"
/>
<
tx:method
name
=
"get"
read-only
=
"true"
/>
<
tx:method
name
=
"*"
propagation
=
"REQUIRED"
/>
</
tx:attributes
>
</
tx:advice
>
<
aop:config
>
<
aop:pointcut
expression
=
"execution(* com.na.service.impl.*.*(..))"
id
=
"pointcut"
/>
<
aop:advisor
advice-ref
=
"txAdvice"
pointcut-ref
=
"pointcut"
/>
</
aop:config
>
<
context:component-scan
base-package
=
"com.na"
></
context:component-scan
>
|
(
3
)、
springmvc.xml
配置(
本项目中用的是
na.xml
)
<!-- 配置视图解析器 -->
<
bean
id
=
"jspViewResolver"
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<!--
结果视图的前缀
-->
<
property
name
=
"prefix"
value
=
"/WEB-INF/jsp/"
/>
<!--
结果视图的后缀
-->
<
property
name
=
"suffix"
value
=
".jsp"
/>
</
bean
>
<!--
处理直接返回
json
格式字符串
-->
<
bean
id
=
"stringHttpMessageConverter"
class
=
"org.springframework.http.converter.StringHttpMessageConverter"
>
<
property
name
=
"supportedMediaTypes"
>
<
list
>
<
value
>
text/plain;charset=UTF-8
</
value
>
</
list
>
</
property
>
</
bean
>
<!--
处理
json -->
<
bean
id
=
"mappingJacksonHttpMessageConverter"
class
=
"org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
>
</
bean
>
<!--
启动
Spring MVC
的注解功能,完成请求和注解
POJO
的映射
-->
<
bean
class
=
"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"
>
<
property
name
=
"messageConverters"
>
<
list
>
<
ref
bean
=
"stringHttpMessageConverter"
/>
<
ref
bean
=
"mappingJacksonHttpMessageConverter"
/>
</
list
>
</
property
>
</
bean
>
<!--
配置拦截器
-->
<!--
可以配置很多个拦截器
-->
<
mvc:interceptors
>
<!--
其中的一个拦截器
-->
<
mvc:interceptor
>
<!-- /**
表示路径及其子路径下进行拦截
如果是
/admin/*
会拦截
admind
的子路径例如
/admin/list
但是
admin/list/test
就不会被拦截
而
/admin/**
则会拦截所有的
-->
<
mvc:mapping
path
=
"/**"
/>
<!--
拦截器所在的位置
-->
<
bean
class
=
"com.na.intercept.NaIntercept"
>
<!--
注入,
loedPass
就是
com.na.intercept.NaIntercept
类中定义的属性名
-->
<
property
name
=
"loedPass"
>
<!--
为
loedPass
赋值。
loedPass
为
list
类型
-->
<
list
>
<
value
>
login.do
</
value
>
<
value
>
welcome.do
</
value
>
<
value
>
list.do
</
value
>
</
list
>
</
property
>
</
bean
>
</
mvc:interceptor
>
</
mvc:interceptors
>
<
context:component-scan
base-package
=
"com.na.controller"
/>
|
(
4
)
mybatis.xml
配置(
mybatis.cfg.xml
中配置)
<configuration>
<
typeAliases
>
<
package
name
=
"com.na.vo"
/>
</
typeAliases
>
<
mappers
>
<!--
所有
mappers
填写文件
-->
<
mapper
resource
=
"com/na/vo/user.mapper.xml"
/>
</
mappers
>
</
configuration
>
|
|
3
、项目中需要创建的包以及类
(
1
)整体结构。
其中
jdbc
包下的类是测试数据库连接的
(
2
)实体类创建
user.java
注意实体类的有参和无参构造方法以及相应的
set
、
get
方法都要有,因为不是重点所以此处省略
user.mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!
DOCTYPE
mapper
PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
>
<
mapper
namespace
=
"com.na.dao.UserDao"
>
<
select
id
=
"list"
resultType
=
"com.na.vo.User"
>
select * from user
</
select
>
</
mapper
>
|
(3)Dao
层以及实现层
public interface UserDao {
public
List<User> list();
}
|
@Repository
(
"userDao"
)
public
class
UserDaoImpl
extends
SqlSessionDaoSupport
implements
UserDao {
@Autowired
@Override
public
void
setSqlSessionFactory(SqlSessionFactory
sqlSessionFactory
) {
super
.setSqlSessionFactory(
sqlSessionFactory
);
};
public
List<User> list() {
return
getSqlSession().selectList(
"com.na.dao.UserDao.list"
);
}
}
|
(
4
)
Service
层以及实现层
UserService.java
public interface UserService {
public
List<User> list();
}
|
UserServiceImpl.java
@Service
(
"userService"
)
public
class
UserServiceImpl
implements
UserService {
@Autowired
private
UserDao
userDao
;
/*public UserDao getUserDao() {
return userDao;
}
*/
public
void
setUserDao(UserDao
userDao
) {
this
.
userDao
=
userDao
;
}
public
List<User> list() {
return
userDao
.list();
}
}
|
(5)Controller
层
只写
userController.java
就行其他的是一些小的功能测试点
@Controller
public
class
UserController {
@Autowired
private
UserService
userService
;
@RequestMapping
(
"/list"
)
// public String list(Model model){
// model.addAttribute("userList", userService.list());
// return "/list";
// }
public
ModelAndView list() {
ModelAndView
mav
=
new
ModelAndView(
"/list"
);
mav
.addObject(
"userList"
,
userService
.list());
return
mav
;
}
public
UserService getUserService() {
return
userService
;
}
public
void
setUserService(UserService
userService
) {
this
.
userService
=
userService
;
}
}
|
(
6
)
jsp
界面测试
注意:在
jsp
文件夹下创建
list.jsp
,必须在
jsp
文件夹下创建,因为在
na.xml
配置的视图解析器就是指向改
jsp
文件夹的
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding
=
"UTF-8"
%>
<%@
taglib
prefix
=
"c"
uri
=
"http://java.sun.com/jsp/jstl/core"
%>
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>
框架测试
</
title
>
</
head
>
<
body
>
<
table
>
<
tr
>
<
td
>
编号
</
td
>
<
td
>
姓名
</
td
>
<
td
>
密码
</
td
>
</
tr
>
<
c:forEach
items
=
"
${userList}
"
var
=
"b"
>
<
tr
>
<
td
>
${b.id }
</
td
>
<
td
>
${b.name }
</
td
>
<
td
>
${b.pwd }
</
td
>
</
tr
>
</
c:forEach
>
<
tr
></
tr
>
</
table
>
</
body
>
</
html
>
|
到此。
springmvc+spring+mybatis
框架就全部完成,因为篇幅的问题没有做过多的解释,具体的解析参照源码,源码中还有其他的知识点,可以只看文章中列出的地方,其他的代码可以忽略