一个简单的搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目(没有jar包)。整个项目架构如下图所示:
1、去官网下载3.0.5所有jar包,所需jar包,见附件图片,每个jar包得用处如下:
org.springframework.aop- 3.0.0.RELEASE--------------------Spring的面向切面编程,提供AOP(面向切面编程)实现
org.springframework.asm- 3.0.0.RELEASE--------------------Spring独立的asm程序,相遇Spring2.5.6的时候需要asmJar
包.3.0开始提供他自己独立的asmJar
org.springframework.aspects- 3.0.0.RELEASE----------------Spring提供对AspectJ框架的整合\
org.springframework.beans- 3.0.0.RELEASE------------------SpringIoC(依赖注入)的基础实现
org.springframework.context.support- 3.0.0.RELEASE--------Spring-context的扩展支持,用于MVC方面
org.springframework.context- 3.0.0.RELEASE----------------Spring提供在基础IoC功能上的扩展服务,此外还提供许多企业
级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等
org.springframework.core- 3.0.0.RELEASE-------------------Spring3.0的核心工具包
org.springframework.expression- 3.0.0.RELEASE-------------Spring表达式语言
org.springframework.instrument.tomcat- 3.0.0.RELEASE------Spring3.0对Tomcat的连接池的集成
org.springframework.instrument- 3.0.0.RELEASE-------------Spring3.0对服务器的代理接口
org.springframework.jdbc- 3.0.0.RELEASE-------------------对JDBC的简单封装
org.springframework.jms- 3.0.0.RELEASE--------------------为简化JMS API的使用而作的简单封装
org.springframework.orm- 3.0.0.RELEASE--------------------整合第三方的ORM框架,如hibernate,ibatis,jdo,以及
spring的JPA实现
org.springframework.oxm-3.0.0.RELEASE--------------------Spring 对Object/XMl的映射支持,可以让Java与XML之间来回切
换
org.springframework.test- 3.0.0.RELEASE--------------------对Junit等测试框架的简单封装
org.springframework.transaction- 3.0.0.RELEASE-------------为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程
式事务管理
org.springframework.web.portlet- 3.0.0.RELEASE-------------SpringMVC的增强
org.springframework.web.servlet- 3.0.0.RELEASE-------------对JEE6.0 Servlet3.0的支持
org.springframework.web.struts- 3.0.0.RELEASE--------------整合Struts的时候的支持
org.springframework.web- 3.0.0.RELEASE--------------------SpringWeb下的工具包
2、借鉴spring官网写法,建立一个src-resources Source Folder,再新建目录META-INF,存放springmvc-servlet.xml和jdbc-context.xml文件(事务和数据库连接池的管理);以及database.properties和log4j.properties。
JDBC-context.xml文件:
-
<
span
style
=
"font-size: x-small;"
>
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
-
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:aop
=
"http://www.springframework.org/schema/aop"
-
xmlns:tx
=
"http://www.springframework.org/schema/tx"
-
xmlns:context
=
"http://www.springframework.org/schema/context"
-
xsi:schemaLocation
="
-
http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-
http://www.springframework.org/schema/tx
-
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context-3.0.xsd
-
http://www.springframework.org/schema/aop
-
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" default-autowire
=
"byName"
>
-
-
<
context:property-placeholder
location
=
"classpath:database.properties"
/>
-
-
<
bean
id
=
"dataSource"
class
=
"com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method
=
"close"
>
-
<
property
name
=
"driverClass"
value
=
"${mysql.driverclass}"
>
</
property
>
-
<
property
name
=
"jdbcUrl"
value
=
"${mysql.jdbcurl}"
>
</
property
>
-
<
property
name
=
"user"
value
=
"${mysql.user}"
>
</
property
>
-
<
property
name
=
"password"
value
=
"${mysql.password}"
>
</
property
>
-
<
property
name
=
"acquireIncrement"
value
=
"5"
>
</
property
>
-
<
property
name
=
"initialPoolSize"
value
=
"10"
>
</
property
>
-
<
property
name
=
"minPoolSize"
value
=
"5"
>
</
property
>
-
<
property
name
=
"maxPoolSize"
value
=
"20"
>
</
property
>
-
<!-- 最大空闲时间,超过空闲时间的连接将被丢弃
-
[需要注意:mysql默认的连接时长为8小时(28800)【可在my.ini中添加 wait_timeout
=
30
(单位秒)设置连接超时】,这里设置c3p0的超时必须
<
28800
]
-
-->
-
<
property
name
=
"maxIdleTime"
value
=
"300"
>
</
property
>
-
<
property
name
=
"idleConnectionTestPeriod"
value
=
"60"
>
</
property
>
-
<
property
name
=
"maxStatements"
value
=
"20"
>
</
property
>
-
</
bean
>
-
-
<
bean
id
=
"txManager"
class
=
"org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
-
<
property
name
=
"dataSource"
ref
=
"dataSource"
>
</
property
>
-
</
bean
>
-
-
-
<
aop:config
>
-
<
aop:advisor
pointcut
=
"execution(* com.aokunsang.service.impl.*ServiceImpl.*(..))"
advice-ref
=
"myAdvice"
/>
-
</
aop:config
>
-
<
tx:advice
id
=
"myAdvice"
transaction-manager
=
"txManager"
>
-
<
tx:attributes
>
-
<
tx:method
name
=
"add*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"update*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"*"
read-only
=
"true"
rollback-for
=
"com.aokunsang.util.DaoException"
/>
-
</
tx:attributes
>
-
</
tx:advice
>
-
-
-
<
context:component-scan
base-package
=
"com.aokunsang"
>
-
<
context:exclude-filter
type
=
"regex"
expression
=
"com.aokunsang.web.*"
/>
-
</
context:component-scan
>
-
-
</
beans
>
</
span
>
springmvc-servlet.xml文件:
-
<
span
style
=
"font-size: xx-small;"
>
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
-
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:p
=
"http://www.springframework.org/schema/p"
-
xmlns:context
=
"http://www.springframework.org/schema/context"
-
xmlns:mvc
=
"http://www.springframework.org/schema/mvc"
-
xsi:schemaLocation
="
-
http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context-3.0.xsd
-
http://www.springframework.org/schema/mvc
-
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
-
-
-
<
context:component-scan
base-package
=
"com.aokunsang.web"
/>
-
-
<!-- 主要作用于@Controller,激活该模式
-
-
下面是一种简写形式,完全可以手动配置替代这种简写形式;
-
它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,
-
是spring MVC为@Controllers分发请求所必须的
-
-->
-
<
mvc:annotation-driven
/>
-
-
-
<
mvc:interceptors
>
-
<
mvc:interceptor
>
-
<
mvc:mapping
path
=
"/user/MyHome"
/>
-
<
mvc:mapping
path
=
"/usermanager/*"
/>
-
<
bean
class
=
"com.aokunsang.web.interceptor.MyInterceptor"
>
</
bean
>
-
</
mvc:interceptor
>
-
</
mvc:interceptors
>
-
-
<!-- 全局配置
-
<
mvc:interceptors
>
-
<
bean
class
=
"com.aokunsang.web.interceptor.MyInterceptor"
>
</
bean
>
-
</
mvc:interceptors
>
-
-->
-
<!-- 配置js,css等静态文件直接映射到对应的文件夹,不被DispatcherServlet处理
-
mapping --- WebRoot里面的静态文件位置目录
-
location --- 访问地址
-
-->
-
<
mvc:resources
location
=
"/resources/**"
mapping
=
"/WEB-INF/resources/"
/>
-
-
<!--
-
配置/WEB-INF/views/目录里面的jsp文件不被DispatcherServlet处理,可以直接通过浏览器访问。
-
view-name --- /WEB-INF/views/里面的jsp文件名(不许后缀即可)
-
path --- 访问地址
-
-->
-
<
mvc:view-controller
path
=
"/header"
view-name
=
"header"
/>
-
-
-
<
bean
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
-
<
property
name
=
"prefix"
value
=
"/WEB-INF/views/"
>
</
property
>
-
<
property
name
=
"suffix"
value
=
".jsp"
>
</
property
>
-
</
bean
>
-
-
</
beans
>
</
span
>
3、修改web.xml文件如下:
-
<!-- Log4j的配置(在同一容器中部署多个应用时,
-
不能使用默认的webAppRootKey,必须指定唯一KEY,以免冲突)
-
-->
-
<
context-param
>
-
<
param-name
>
webAppRootKey
</
param-name
>
-
<
param-value
>
springmvc.root
</
param-value
>
-
</
context-param
>
-
-
<
context-param
>
-
<
param-name
>
contextConfigLocation
</
param-name
>
-
<
param-value
>
classpath:/META-INF/jdbc-context.xml
</
param-value
>
-
</
context-param
>
-
-
<
listener
>
-
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
-
</
listener
>
-
-
<
servlet
>
-
<
servlet-name
>
spring-mvc
</
servlet-name
>
-
<
servlet-class
>
org.springframework.web.servlet.DispatcherServlet
</
servlet-class
>
-
<
init-param
>
-
<
param-name
>
contextConfigLocation
</
param-name
>
-
<
param-value
>
classpath:/META-INF/springmvc-servlet.xml
</
param-value
>
-
</
init-param
>
-
<
load-on-startup
>
1
</
load-on-startup
>
-
</
servlet
>
-
-
<
servlet-mapping
>
-
<
servlet-name
>
spring-mvc
</
servlet-name
>
-
<
url-pattern
>
/
</
url-pattern
>
-
</
servlet-mapping
>
-
-
<
filter
>
-
<
filter-name
>
encodingFilter
</
filter-name
>
-
<
filter-class
>
org.springframework.web.filter.CharacterEncodingFilter
</
filter-class
>
-
</
filter
>
-
-
<
filter-mapping
>
-
<
filter-name
>
encodingFilter
</
filter-name
>
-
<
url-pattern
>
/*
</
url-pattern
>
-
</
filter-mapping
>
4、从springmvc-servlet.xml中可以知道,我把jsp页面放在WEB-INF/views目录中,静态文件(图片,js,css等)放在Resources目录中,便于管理。
5、以上配置文件基本完成,下面开始代码编写:
首先说几个常用的注解:
-
@Autowired
和
@Qualifier
自动注入[根据类型注入]
-
@Autowired
可以对成员变量、方法以及构造函数进行注释,
-
@Qualifier
的标注对象是成员变量、方法入参、构造函数入参。
-
ps:两者结合使用相当于@Resourcede
效果。
-
@Resource
自动注入[根据名称注入],可写参数name=
""
-
@Controller
表示控制器
-
@Service
表示业务处理层[一般在serviceImpl]
-
@Repository
表示持久层[一般在daoImpl]
-
@Component
当你的类不清楚是哪一层的时候使用该注解
-
@ResponseBody
异步返回数据类型为json
-
@RequestMapping
路径,请求类型等设置
-
@InitBinder
数据绑定
注解的详细介绍:http://blog.csdn.net/zhongxiucheng/article/details/6662300
也可以参考:
https://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/
<a>首先写一个BaseController,可做一些数据绑定之类的全局操作(如:把日期字符串转换为Date日期)。
-
@Controller
-
public
class
BaseController {
-
-
@InitBinder
-
protected
void
ininBinder(WebDataBinder binder){
-
SimpleDateFormat sdf = new
SimpleDateFormat(
"yyyy-MM-dd"
);
-
binder.registerCustomEditor(Date.class
,
new
CustomDateEditor(sdf,
true
));
-
}
-
}
<b>然后写一个拦截器,拦截器有两种实现方式,1、继承HandlerInterceptorAdapter类,2、实现HandlerInterceptor接口。
-
-
-
-
-
-
public
class
MyInterceptor
extends
HandlerInterceptorAdapter {
-
-
-
-
-
@Override
-
public
void
afterCompletion(HttpServletRequest request,
-
HttpServletResponse response, Object handler, Exception ex)
-
throws
Exception {
-
-
super
.afterCompletion(request, response, handler, ex);
-
}
-
-
-
-
-
@Override
-
public
void
postHandle(HttpServletRequest request,
-
HttpServletResponse response, Object handler,
-
ModelAndView modelAndView) throws
Exception {
-
-
System.out.println(request.getContentType()+"-----"
+request.getCharacterEncoding()+
"------"
+request.getContextPath());
-
System.out.println("MyInterceptor.postHandle()---viewName:"
+modelAndView.getViewName());
-
super
.postHandle(request, response, handler, modelAndView);
-
}
-
-
-
-
-
@Override
-
public
boolean
preHandle(HttpServletRequest request,
-
HttpServletResponse response, Object handler) throws
Exception {
-
-
String url = request.getRequestURI();
-
-
System.out.println("MyInterceptor.preHandle()"
+url);
-
-
return
super
.preHandle(request, response, handler);
-
}
-
}
<c>在Util包中DBUtil.java中实现Spring JDBC Template的封装,操作数据库;写一个DaoException继承spring的运行时异常类NestedRuntimeException,在数据库操作异常时抛出该异常,在controller层进行处理。
<d>写一个抽象的BaseDao接口和BaseDaoImpl实现类,让所有模块共享使用(详见附件)。
-
-
-
-
package
com.aokunsang.dao;
-
-
import
java.io.Serializable;
-
import
java.util.List;
-
import
java.util.Map;
-
-
-
-
-
-
public
interface
BaseDao {
-
-
-
-
-
-
-
<T extends
Serializable>
void
saveOrUpdateObject(String sql,T entry);
-
-
-
-
-
-
-
-
-
<T extends
Serializable> List<T> getObjList(String sql,Class<T> className,Object[] objs);
-
-
-
-
-
-
-
-
-
<T extends
Serializable> T getObject(String sql,Class<T> clazz,Object[] objs);
-
-
-
-
-
-
-
-
Map<String,?> find(String sql,Object[] objs);
-
-
-
-
-
-
-
void
batchOperate(String sql,List<?> objLs);
-
-
-
-
-
-
-
-
int
isExist(String sql,Object[] obj);
-
-
-
-
-
-
-
-
int
editObject(String sql,Object[] obj);
-
}
6、一切就绪,启动tomcat,访问http://localhost:8080/springmvc,看是否访问到了WEB-INF中的index.jsp页面。
7、然后根据Controller中的路径配置,依次访问WEB-INF/views中的页面。
另外:再附上一张他人画得springMVC3.0的流程图,我感觉画得还是挺好的,收藏了。
相关推荐
【Spring MVC 3.0.5 + Spring 3.0.5 + MyBatis3.0.4 全注解实例详解】 Spring MVC 3.0.5 是Spring框架的一个重要版本,它引入了对RESTful风格的支持,使得构建Web应用更加灵活。REST(Representational State ...
7、Spring MVC 3.0.5 详解Spring MVC 是 Spring 框架的一部分,用于构建 Web 应用。3.0.5 版本引入了对 RESTful 风格的支持,使得 API 设计更加简洁。通过注解,如 `@Controller`、`@RequestMapping`、`@Autowired` ...
spring mvc 3.0.5工程所需包,现整理后提供给朋友们下载,免得一个一个的下载。org.springframework.aop-3.0.5.RELEASE.jar,org.springframework.asm-3.0.5.RELEASE.jar,org.springframework.aspects-3.0.5....
Spring 3.0.5版本是这个MVC框架的一个稳定版本,提供了许多功能和优化,适用于各种规模的项目。在这个jar包中,包含了构建Spring MVC应用程序所需的关键组件,以及一些依赖的第三方库。 1. **Spring MVC组件**: -...
在本教程中,我们将深入探讨如何使用Spring、Spring MVC 3.0.5以及MyBatis 3.0.4这三个流行的Java框架构建一个全注解的Web应用程序。这个实例详解将帮助开发者理解如何有效地集成这三个组件,实现高效的数据访问和...
在Web层,Spring MVC在3.0.5版本中引入了更多的RESTful特性,如`@RequestMapping`注解的改进,支持更多HTTP方法,使得创建RESTful服务变得更加简单。此外,模板引擎的支持也得到了扩展,如FreeMarker和Velocity的...
在"springMVC3.0.5所需要的jar"压缩包中,"lib"目录下的 jar 文件可能包含了上述组件所需的依赖库,例如 spring-webmvc.jar 包含了 Spring MVC 的核心实现,其他的如 spring-beans.jar、spring-context.jar 等则是 ...
Spring 3.0.5版本包含了依赖注入、AOP(面向切面编程)、JDBC抽象层、事务管理、MVC(Model-View-Controller)以及对其他多种框架的集成。Spring的核心是IoC(Inversion of Control)和DI(Dependency Injection),...
在实际应用中,我们可能会遇到的问题和解决方案可能包括如何配置Spring Security XML,如何处理异常,如何自定义认证和授权逻辑,以及如何与其他Spring框架如Spring Boot、Spring MVC集成等。博客链接中的内容可能...
博客“Spring MVC3.0.5搭建全程”-相关jar包提供下载。 里面用的spring是3.1.2版本的,效果一样,另外还包含了springSecurity3.1.2.
总的来说,Spring MVC 3.0.5 的 jar 包集合提供了一个完整的开发环境,使开发者能够快速搭建和运行基于 Spring 的 Web 应用程序。通过灵活的配置和强大的功能,Spring MVC 使得 Web 开发变得更加高效和便捷。
包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...
标题中的“spring 3.0.5 + jotm 实现的的spring mvc 的例子”表明这是一个关于使用Spring 3.0.5版本与JOTM(Java Open Transaction Manager)结合构建Spring MVC应用的示例项目。这个项目可能旨在演示如何在Spring ...
总的来说,这个项目可能是在搭建一个基于Mybatis 3.0.5和Spring 3.0.5的Java Web应用,利用Mybatis进行数据库操作,Spring进行依赖管理和Web服务。通过这些库的组合,开发者可以构建出一个高效、可维护的系统。在...
Spring 3.0.5是Spring框架的一个较早版本,它包含了MVC(Model-View-Controller)模块,这是Spring用于构建Web应用程序的核心组件。在本案例中,我们讨论的是如何利用Spring MVC实现一个简单的登录功能,这通常涉及...
在本示例中,我们探讨的是使用Spring 3.0.5版本的MVC框架以及Hibernate 3.6.10版本的集成,构建一个基于注解的注册登录应用。这个压缩包文件“springMVC_demo01”包含了实现这个功能的所有必要组件和配置。 首先,...
Spring Framework 3.0.5_API英文 chm 格式方便查询和携带
Spring 3.0.5是该框架的一个稳定版本,它包含了多个核心模块和扩展功能。以下是对这些jar包及其包含的知识点的详细解释: 1. **org.springframework.context-3.0.5.RELEASE.jar**: 这个jar包是Spring框架的核心...