需要导入jar包:
spring-context-3.2.5.RELEASE.jar
spring-aop-3.2.5.RELEASE.jar
spring-core-3.2.5.RELEASE.jar
spring-expression-3.2.5.RELEASE.jar
spring-web-3.2.5.RELEASE.jar
aopalliance-1.0.jar
spring-jdbc-3.2.5.RELEASE.jar
spring-tx-3.2.5.RELEASE.jar
mybatis-spring-1.1.1.jar
spring-beans-3.2.5.RELEASE.jar
mybatis-3.1.1.jar
mysql-connector-java-5.1.20.jar
lombok-0.11.0.jar
stripes-1.5.7.jar
commons-logging-1.1.1.jar
aspectjweaver-1.6.12.jar
javamelody-core-1.39.0.jar
jrobin-1.5.9.jar
jstl-1.2.jar
web.xml配置:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
xmlns
=
"http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version
=
"2.4"
>
<
filter
>
<
filter-name
>
StripesFilter
</
filter-name
>
<
filter-class
>
net.sourceforge.stripes.controller.StripesFilter
</
filter-class
>
<
init-param
>
<
param-name
>
ActionResolver.Packages
</
param-name
>
<
param-value
>
cn.com.action
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
LocalizationBundleFactory.FieldNameBundle
</
param-name
>
<
param-value
>
pagecontent
</
param-value
>
</
init-param
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
StripesFilter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
<
dispatcher
>
REQUEST
</
dispatcher
>
</
filter-mapping
>
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
classpath:/applicationContext.xml
</
param-value
>
</
context-param
>
<
servlet
>
<
servlet-name
>
StripesDispatcher
</
servlet-name
>
<
servlet-class
>
net.sourceforge.stripes.controller.DispatcherServlet
</
servlet-class
>
<
load-on-startup
>
10
</
load-on-startup
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
StripesDispatcher
</
servlet-name
>
<
url-pattern
>
*.action
</
url-pattern
>
</
servlet-mapping
>
<
servlet-mapping
>
<
servlet-name
>
StripesDispatcher
</
servlet-name
>
<
url-pattern
>
/action/*
</
url-pattern
>
</
servlet-mapping
>
<
welcome-file-list
>
<
welcome-file
>
/jsp/index.jsp
</
welcome-file
>
<
welcome-file
>
/index.html
</
welcome-file
>
</
welcome-file-list
>
<
context-param
>
<
param-name
>
javax.servlet.jsp.jstl.fmt.localizationContext
</
param-name
>
<
param-value
>
pagecontent
</
param-value
>
</
context-param
>
</
web-app
>
pom.xml配置:
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>
4.0.0
</
modelVersion
>
<
groupId
>
cn.com.test
</
groupId
>
<
artifactId
>
MavenTest
</
artifactId
>
<
version
>
0.0.1-SNAPSHOT
</
version
>
<
packaging
>
jar
</
packaging
>
<
name
>
MavenTest
</
name
>
<
url
>
http://maven.apache.org
</
url
>
<
properties
>
<
project.build.sourceEncoding
>
UTF-8
</
project.build.sourceEncoding
>
</
properties
>
<
profiles
>
<
profile
>
<
id
>
dev
</
id
>
<
activation
>
<
activeByDefault
>
true
</
activeByDefault
>
</
activation
>
<
build
>
<
filters
>
<
filter
>
src/main/filters/filter-mine.properties
</
filter
>
</
filters
>
</
build
>
</
profile
>
</
profiles
>
<
dependencies
>
<
dependency
>
<
groupId
>
org.springframework
</
groupId
>
<
artifactId
>
spring-context
</
artifactId
>
<
version
>
3.2.5.RELEASE
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.springframework
</
groupId
>
<
artifactId
>
spring-web
</
artifactId
>
<
version
>
3.2.5.RELEASE
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.springframework
</
groupId
>
<
artifactId
>
spring-jdbc
</
artifactId
>
<
version
>
3.2.5.RELEASE
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.mybatis
</
groupId
>
<
artifactId
>
mybatis-spring
</
artifactId
>
<
version
>
1.1.1
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.springframework
</
groupId
>
<
artifactId
>
spring-beans
</
artifactId
>
<
version
>
3.2.5.RELEASE
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.mybatis
</
groupId
>
<
artifactId
>
mybatis
</
artifactId
>
<
version
>
3.1.1
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
mysql
</
groupId
>
<
artifactId
>
mysql-connector-java
</
artifactId
>
<
version
>
5.1.20
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.projectlombok
</
groupId
>
<
artifactId
>
lombok
</
artifactId
>
<
version
>
0.11.0
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
net.sourceforge.stripes
</
groupId
>
<
artifactId
>
stripes
</
artifactId
>
<
version
>
1.5.7
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
org.aspectj
</
groupId
>
<
artifactId
>
aspectjweaver
</
artifactId
>
<
version
>
1.6.12
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
net.bull.javamelody
</
groupId
>
<
artifactId
>
javamelody-core
</
artifactId
>
<
version
>
1.39.0
</
version
>
</
dependency
>
<
dependency
>
<
groupId
>
javax.servlet
</
groupId
>
<
artifactId
>
jstl
</
artifactId
>
<
version
>
1.2
</
version
>
</
dependency
>
</
dependencies
>
<
build
>
<
resources
>
<
resource
>
<
directory
>
src/main/resources
</
directory
>
<
filtering
>
true
</
filtering
>
</
resource
>
</
resources
>
<
plugins
>
<!-- jetty 插件 -->
<
plugin
>
<
groupId
>
org.mortbay.jetty
</
groupId
>
<
artifactId
>
maven-jetty-plugin
</
artifactId
>
<
version
>
6.1.22
</
version
>
<
configuration
>
<
contextPath
>
/
</
contextPath
>
<
connectors
>
<
connector
implementation
=
"org.mortbay.jetty.nio.SelectChannelConnector"
>
<
port
>
8080
</
port
>
<
maxIdleTime
>
60000
</
maxIdleTime
>
</
connector
>
</
connectors
>
<
scanIntervalSeconds
>
10
</
scanIntervalSeconds
>
</
configuration
>
<
executions
>
<
execution
>
<
id
>
start-jetty
</
id
>
<
goals
>
<
goal
>
run
</
goal
>
</
goals
>
<
configuration
>
<
scanIntervalSeconds
>
0
</
scanIntervalSeconds
>
<
daemon
>
true
</
daemon
>
</
configuration
>
</
execution
>
<
execution
>
<
id
>
stop-jetty
</
id
>
<
goals
>
<
goal
>
stop
</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
user_sqlMap.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
=
"userSqlMap"
>
<
select
id
=
"countUser"
resultType
=
"java.lang.Integer"
>
SELECT count(*) FROM user
</
select
>
<
insert
id
=
"insertUser"
parameterType
=
"cn.com.entity.User"
>
insert into user(name, tel) values(#{name},#{tel})
</
insert
>
</
mapper
>
mybatis-config.xml配置:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
configuration
PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"
>
<
configuration
>
<
settings
>
<
setting
name
=
"lazyLoadingEnabled"
value
=
"false"
/>
</
settings
>
<
typeAliases
>
<
package
name
=
"cn.com.entity"
/>
</
typeAliases
>
<!-- <properties resource="db.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name=" url" value="${jdbc.url}" />
<property name=" username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource=" mybatis/user_sqlMap.xml" />
</mappers> -->
</
configuration
>
jdbc.host=
localhost
jdbc.database=
test
jdbc.url=
jdbc:mysql://localhost:3306/test?characterEncoding= utf-8&rewriteBatchedStatements=true
jdbc.username=
root
jdbc.password=
<?
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:context
=
"http://www.springframework.org/schema/context"
xmlns:tx
=
"http://www.springframework.org/schema/tx"
xmlns:aop
=
"http://www.springframework.org/schema/aop"
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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
>
<
context:component-scan
base-package
=
"cn.com.action"
/>
<
context:property-placeholder
location
=
"classpath:db.properties"
/>
<
bean
id
=
"dataSource"
class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<
property
name
=
"url"
value
=
"${jdbc.url}"
></
property
>
<
property
name
=
"username"
value
=
"${jdbc.username}"
></
property
>
<
property
name
=
"password"
value
=
"${jdbc.password}"
></
property
>
</
bean
>
<
bean
id
=
"sqlSessionFactory"
class
=
"org.mybatis.spring.SqlSessionFactoryBean"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
<
property
name
=
"configLocation"
value
=
"classpath:mybatis-config.xml"
/>
<
property
name
=
"mapperLocations"
value
=
"classpath:mybatis/*.xml"
/>
</
bean
>
<
bean
id
=
"transactionManager"
class
=
"org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
</
bean
>
<
tx:advice
id
=
"transactionAdvice"
transaction-manager
=
"transactionManager"
>
<
tx:attributes
>
<
tx:method
name
=
"add*"
propagation
=
"REQUIRED"
/>
<
tx:method
name
=
"update*"
propagation
=
"REQUIRED"
/>
<
tx:method
name
=
"delete*"
propagation
=
"REQUIRED"
/>
<
tx:method
name
=
"select*"
propagation
=
"SUPPORTS"
/>
<
tx:method
name
=
"*"
propagation
=
"SUPPORTS"
/>
</
tx:attributes
>
</
tx:advice
>
<
aop:config
>
<
aop:pointcut
id
=
"transactionPointcut"
expression
=
"execution(public * *..service..*.*(..))"
/>
<
aop:advisor
pointcut-ref
=
"transactionPointcut"
advice-ref
=
"transactionAdvice"
/>
</
aop:config
>
<!-- spring读取properites文件;资源绑定 -->
<
bean
id
=
"messageSource"
class
=
"org.springframework.context.support.ReloadableResourceBundleMessageSource"
>
<
property
name
=
"basenames"
>
<
list
>
<
value
>
classpath:pagecontent
</
value
>
</
list
>
</
property
>
</
bean
>
<
bean
id
=
"genericDao"
class
=
"cn.com.daoimpl.GenericDaoImpl"
>
<
property
name
=
"sqlSessionFactory"
ref
=
"sqlSessionFactory"
/>
</
bean
>
<
bean
id
=
"userDao"
class
=
"cn.com.daoimpl.UserDaoImpl"
parent
=
"genericDao"
/>
<
bean
id
=
"userService"
class
=
"cn.com.serviceimpl.UserServiceImpl"
>
<
property
name
=
"userDao"
ref
=
"userDao"
/>
</
bean
>
</
beans
>
pagecontent.properties文件
(用于配置页面需要的常量):
#common
common.syspath =
${m.syspath}
filter-mine.properties文件:
m.syspath=
http://localhost:8080
User.java:
package
cn.com.entity;
import
java.io.Serializable;
import
lombok.Data;
import
lombok.EqualsAndHashCode;
import
org.apache.ibatis.type.Alias;
@Data
@EqualsAndHashCode
(callSuper =
false
)
@Alias
(
"user"
)
public
class
User
implements
Serializable{
private
static
final
long
serialVersionUID
= 1L;
private
Integer
id
;
private
String
name
;
private
String
tel
;
}
package
cn.com.daoimpl;
import
org.mybatis.spring.support.SqlSessionDaoSupport;
public
class
GenericDaoImpl
extends
SqlSessionDaoSupport {
}
package
cn.com.dao;
import
cn.com.entity.User;
public
interface
UserDao {
int
countUser();
int
insertUser(User user);
}
UserDaoImpl.java:
package
cn.com.daoimpl;
import
cn.com.dao.UserDao;
import
cn.com.entity.User;
public
class
UserDaoImpl
extends
GenericDaoImpl
implements
UserDao {
public
int
countUser() {
return
getSqlSession().selectOne(
"userSqlMap.countUser"
);
}
public
int
insertUser(User user) {
return
getSqlSession().insert(
"userSqlMap.insertUser"
,user);
}
}
UserService.java:
package
cn.com.service;
import
cn.com.entity.User;
public
interface
UserService {
int
countUser();
boolean
addUser(User u);
}
package
cn.com.serviceimpl;
import
lombok.Getter;
import
lombok.Setter;
import
org.springframework.stereotype.Service;
import
cn.com.dao.UserDao;
import
cn.com.entity.User;
import
cn.com.service.UserService;
@Service
public
class
UserServiceImpl
implements
UserService {
@Getter
@Setter
private
static
UserDao
userDao
;
public
int
countUser() {
return
userDao
.countUser();
}
public
boolean
addUser(User u) {
int
id =
userDao
.insertUser(u);
if
(id == 0) {
return
false
;
}
else
{
return
true
;
}
}
}
UserAction.java:
package
cn.com.action;
import
lombok.Getter;
import
lombok.Setter;
import
net.sourceforge.stripes.action.ActionBean;
import
net.sourceforge.stripes.action.ActionBeanContext;
import
net.sourceforge.stripes.action.DefaultHandler;
import
net.sourceforge.stripes.action.ForwardResolution;
import
net.sourceforge.stripes.action.Resolution;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
org.springframework.dao.DataAccessException;
import
cn.com.entity.User;
import
cn.com.service.UserService;
public
class
UserActionBean
implements
ActionBean {
@Autowired
private
UserService
userService
;
private
ActionBeanContext
context
;
@Setter
@Getter
private
User
u
;
public
ActionBeanContext getContext() {
return
this
.
context
;
}
public
void
setContext(ActionBeanContext context) {
this
.
context
= context;
}
@DefaultHandler
public
Resolution index() {
return
new
ForwardResolution(
"/jsp/add.jsp"
);
}
@SuppressWarnings
(
"resource"
)
public
Resolution addUser() {
try
{
ApplicationContext context1 =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
UserService userService = (UserService) context1.getBean(
"userService"
);
userService.addUser(
u
);
}
catch
(DataAccessException e) {
return
new
ForwardResolution(
"/jsp/add.jsp"
);
}
catch
(Exception e) {
return
new
ForwardResolution(
"/jsp/add.jsp"
);
}
return
new
ForwardResolution(
"/jsp/index.jsp"
);
}
}
taglib.jsp:
<%@
taglib
prefix
=
"s"
uri
=
"http://stripes.sourceforge.net/stripes.tld"
%>
<%@
taglib
prefix
=
"sd"
uri
=
"http://stripes.sourceforge.net/stripes-dynattr.tld"
%>
<%@
taglib
prefix
=
"c"
uri
=
"http://java.sun.com/jsp/jstl/core"
%>
<%@
taglib
prefix
=
"fmt"
uri
=
"http://java.sun.com/jsp/jstl/fmt"
%>
<%@
taglib
prefix
=
"fn"
uri
=
"http://java.sun.com/jsp/jstl/functions"
%>
<
c:set
var
=
"syspath"
><
fmt:message
key
=
"common.syspath"
/></
c:set
>
index.jsp:
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<%@
page
language
=
"java"
pageEncoding
=
"UTF-8"
contentType
=
"text/html; charset=UTF-8"
%>
<%@
include
file
=
"/jsp/common/taglibs.jsp"
%>
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
>
<
link
rel
=
"stylesheet"
type
=
"text/css"
href
=
"
${syspath}
/static/css/index.css"
/>
</
head
>
<
body
>
<
button
type
=
"button"
onclick
=
"addUser();"
>
添加
</
button
>
</
body
>
<
script
type
=
"text/javascript"
>
function
addUser(){
location =
"${syspath}/User.action?index="
;
}
</
script
>
</
html
>
add.jsp:
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<%@
page
language
=
"java"
pageEncoding
=
"UTF-8"
contentType
=
"text/html; charset=UTF-8"
%>
<%@
include
file
=
"/jsp/common/taglibs.jsp"
%>
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
body
>
<
div
>
<
table
>
<
s:form
id
=
"userForm"
action
=
""
>
<
tr
>
<
td
>
名称
</
td
>
<
td
><
input
name
=
"u.name"
type
=
"text"
/></
td
>
</
tr
>
<
tr
>
<
td
>
电话
</
td
>
<
td
><
input
name
=
"u.tel"
type
=
"text"
/></
td
>
</
tr
>
<
tr
>
<
td
>
<
button
type
=
"button"
onclick
=
"submitUser();"
>
提交
</
button
>
<
button
type
=
"reset"
>
重置
</
button
>
</
td
>
</
tr
>
</
s:form
>
</
table
>
</
div
>
</
body
>
<
script
src
=
"
${syspath}
/static/js/jquery/jquery-1.10.2.min.js"
></
script
>
<
script
type
=
"text/javascript"
>
function
submitUser(){
$.ajax({
url:
'<s:url beanclass="cn.com.action.UserActionBean" event="addUser" />'
,
cache:
false
,
async:
false
,
type:
"post"
,
data: $(
"#userForm"
).serialize(),
success:showResponse
});
}
function
showResponse(data, textStatus, jqXHR){
if
( jqXHR.getResponseHeader(
"errStatus"
) == 2 ){
top.location =
'${syspath}'
;
return
;
}
if
( jqXHR.getResponseHeader(
"errStatus"
) == 1 ){
alert(
"[@spring.message 'msg.permission.notallowed'/]"
);
return
;
}
if
(data ==
'd'
||data==
'e'
){
alert(
"操作失败,请联系管理员"
);
return
;
}
else
{
alert(
"编辑成功"
);
window.location =
'${syspath}'
;
}
}
</
script
>
</
html
>