整合:spring4.2.5+mybatis3.2.8+springMVC+maven
环境:Myeclipse2014+mysql5.5.20+tomcat8+jdk1.7+linux
目标:实现对用户表的简单添加(分别有表单数据提交和json提交)、分页查看和文件上传
源码在github上:https://github.com/fuckyourdick/myRegisterSystem/tree/master/mavenSSM
效果图:
项目结构图:
1).创建maven项目,引入所需的jar包
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.hsp.mavengroupId>
<artifactId>mavenSSHartifactId>
<packaging>warpackaging>
<version>0.0.1-SNAPSHOTversion>
<name>mavenSSHname>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<spring.version>4.2.5.RELEASEspring.version>
<mybatis.version>3.2.8mybatis.version>
<mysql-driver.version>5.1.29mysql-driver.version>
<slf4j.version>1.7.18slf4j.version>
<log4j.version>1.2.17log4j.version>
properties>
<dependencies>
<dependency>
<groupId>jstlgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>javaxgroupId>
<artifactId>javaee-apiartifactId>
<version>7.0version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-oxmartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>${mybatis.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.2.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql-driver.version}version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.2.2version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.1.41version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>${log4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>org.codehaus.jacksongroupId>
<artifactId>jackson-mapper-aslartifactId>
<version>1.9.13version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.4version>
dependency>
<dependency>
<groupId>commons-codecgroupId>
<artifactId>commons-codecartifactId>
<version>1.9version>
dependency>
<dependency>
<groupId>com.thoughtworks.xstreamgroupId>
<artifactId>xstreamartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1-b07version>
dependency>
dependencies>
<build>
<finalName>mavenSSMfinalName>
build>
project>
2).建立各种资源文件
<1>jdbc.properties
driverClasss=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username=root
password=XXXXXXXX
#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570
initialSize=0
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570
maxActive=10
#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2
maxIdle=10
#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2
minIdle=1
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4
maxWait=60000
<2>log4j.properties
log4j.rootLogger=INFO,Console,File
#控制台日志
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
#普通文件日志
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=logs/ssm.log
log4j.appender.File.MaxFileSize=10MB
#输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
<3>common.properties
该文件暂时不需要添加
<4>spring-mybatis.xml
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="ssm"/>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClasss}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="${initialSize}">property>
<property name="maxActive" value="${maxActive}">property>
<property name="maxIdle" value="${maxIdle}">property>
<property name="minIdle" value="${minIdle}">property>
<property name="maxWait" value="${maxWait}">property>
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapping/*.xml">property>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">property>
bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
beans>
<5>spring-mvc.xml
<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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="ssm.controller"/>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8value>
list>
property>
bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/>
list>
property>
bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp"/>
bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="32505856"/>
<property name="maxInMemorySize" value="4096"/>
bean>
beans>
<6>web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>ssmdisplay-name>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:spring-mybatis.xmlparam-value>
context-param>
<context-param>
<param-name>log4jConfigLocationparam-name>
<param-value>classpath:log4j.propertiesparam-value>
context-param>
<filter>
<filter-name>encodingFilterfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>encodingFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListenerlistener-class>
listener>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.jsurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.cssurl-pattern>
servlet-mapping>
<servlet>
<servlet-name>SpringMVCservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:spring-mvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
<async-supported>trueasync-supported>
servlet>
<servlet-mapping>
<servlet-name>SpringMVCservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<welcome-file-list>
<welcome-file>/index.jspwelcome-file>
welcome-file-list>
<session-config>
<session-timeout>20session-timeout>
session-config>
web-app>
3).建立实体类和对应的实体dao和Mapper.xml文件
<1>先在数据库建立数据库和表(数据库名根据自己的实际而定)
<2>ssm.model–User.java
package ssm.model;
public class User {
private Integer id;
private String userName;
private String userPhone;
private String userEmail;
private String userPwd;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName == null ? null : userName.trim();
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone == null ? null : userPhone.trim();
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail == null ? null : userEmail.trim();
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd == null ? null : userPwd.trim();
}
}
<3>ssm.dao–UserDao.java
package ssm.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import ssm.model.User;
public interface UserDao {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
List getAllUser();
public List selectUserByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize);
public int selectUserCount();
}
<4>mapping–UserMapper.xml
<mapper namespace="ssm.dao.UserDao" >
<resultMap id="BaseResultMap" type="ssm.model.User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="user_name" property="userName" jdbcType="VARCHAR" />
<result column="user_phone" property="userPhone" jdbcType="VARCHAR" />
<result column="user_email" property="userEmail" jdbcType="VARCHAR" />
<result column="user_pwd" property="userPwd" jdbcType="VARCHAR" />
resultMap>
<sql id="Base_Column_List" >
id, user_name, user_phone, user_email, user_pwd
sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from user
where id = #{id,jdbcType=INTEGER}
select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from user
where id = #{id,jdbcType=INTEGER}
delete>
<insert id="insert" parameterType="ssm.model.User" >
insert into user (id, user_name, user_phone,
user_email, user_pwd)
values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{userPhone,jdbcType=VARCHAR},
#{userEmail,jdbcType=VARCHAR}, #{userPwd,jdbcType=VARCHAR})
insert>
<insert id="insertSelective" parameterType="ssm.model.User" >
insert into user
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
if>
<if test="userName != null" >
user_name,
if>
<if test="userPhone != null" >
user_phone,
if>
<if test="userEmail != null" >
user_email,
if>
<if test="userPwd != null" >
user_pwd,
if>
trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=INTEGER},
if>
<if test="userName != null" >
#{userName,jdbcType=VARCHAR},
if>
<if test="userPhone != null" >
#{userPhone,jdbcType=VARCHAR},
if>
<if test="userEmail != null" >
#{userEmail,jdbcType=VARCHAR},
if>
<if test="userPwd != null" >
#{userPwd,jdbcType=VARCHAR},
if>
trim>
insert>
<update id="updateByPrimaryKeySelective" parameterType="ssm.model.User" >
update user
<set >
<if test="userName != null" >
user_name = #{userName,jdbcType=VARCHAR},
if>
<if test="userPhone != null" >
user_phone = #{userPhone,jdbcType=VARCHAR},
if>
<if test="userEmail != null" >
user_email = #{userEmail,jdbcType=VARCHAR},
if>
<if test="userPwd != null" >
user_pwd = #{userPwd,jdbcType=VARCHAR},
if>
set>
where id = #{id,jdbcType=INTEGER}
update>
<update id="updateByPrimaryKey" parameterType="ssm.model.User" >
update user
set user_name = #{userName,jdbcType=VARCHAR},
user_phone = #{userPhone,jdbcType=VARCHAR},
user_email = #{userEmail,jdbcType=VARCHAR},
user_pwd = #{userPwd,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
update>
<select id="getAllUser" resultMap="BaseResultMap">
SELECT * FROM user
select>
<select id="selectUserByPage" resultMap="BaseResultMap">
select
*
from user limit #{startPos},#{pageSize}
select>
<select id="selectUserCount" resultType="java.lang.Integer">
SELECT COUNT(*) FROM user
select>
mapper>
4).建立service层
<1>ssm.service–UserService.java
package ssm.service;
import ssm.model.User;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface UserService {
/*添加用户*/
void addUser(User user);
/*获得所有用户*/
List getAllUsers();
public List getUserByPage(Integer startPos, Integer pageSize);
public int getUserCount();
}
<2>ssm.service.impl–UserServiceImpl.java
package ssm.service.impl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ssm.dao.UserDao;
import ssm.model.User;
import ssm.service.UserService;
import ssm.util.Page;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public void addUser(User user) {
userDao.insert(user);
}
public List getAllUsers() {
return userDao.getAllUser();
}
public List getUserByPage(Integer startPos, Integer pageSize) {
return userDao.selectUserByPage(startPos, pageSize);
}
public int getUserCount() {
return userDao.selectUserCount();
}
}
5).在工具包添加文件上传和分页的工具类
<1>ssm.util–FileUpload.java
package ssm.util;
import java.io.File;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
public class FileUpload {
public String upload(HttpServletRequest request, MultipartFile file) {
String path = request.getSession().getServletContext().getRealPath("upload");
String fileName = file.getOriginalFilename();
fileName=UUID.randomUUID()+fileName.substring(fileName.indexOf("."),fileName.length());
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
}
<2>ssm.util–Page.java
package ssm.util;
import java.io.Serializable;
public class Page implements Serializable {
private static final long serialVersionUID = -3198048449643774660L;
private int pageNow = 1; // 当前页数
private int pageSize = 5; // 每页显示记录的条数
private int totalCount; // 总的记录条数
private int totalPageCount; // 总的页数
@SuppressWarnings("unused")
private int startPos; // 开始位置,从0开始
@SuppressWarnings("unused")
private boolean hasFirst;// 是否有首页
@SuppressWarnings("unused")
private boolean hasPre;// 是否有前一页
@SuppressWarnings("unused")
private boolean hasNext;// 是否有下一页
@SuppressWarnings("unused")
private boolean hasLast;// 是否有最后一页
/**
* 通过构造函数 传入 总记录数 和 当前页
* @param totalCount
* @param pageNow
*/
public Page(int totalCount, int pageNow) {
this.totalCount = totalCount;
this.pageNow = pageNow;
}
/**
* 取得总页数,总页数=总记录数/总页数
* @return
*/
public int getTotalPageCount() {
totalPageCount = getTotalCount() / getPageSize();
return (totalCount % pageSize == 0) ? totalPageCount
: totalPageCount + 1;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
/**
* 取得选择记录的初始位置
* @return
*/
public int getStartPos() {
return (pageNow - 1) * pageSize;
}
public void setStartPos(int startPos) {
this.startPos = startPos;
}
/**
* 是否是第一页
* @return
*/
public boolean isHasFirst() {
return (pageNow == 1) ? false : true;
}
public void setHasFirst(boolean hasFirst) {
this.hasFirst = hasFirst;
}
/**
* 是否有首页
* @return
*/
public boolean isHasPre() {
// 如果有首页就有前一页,因为有首页就不是第一页
return isHasFirst() ? true : false;
}
public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
/**
* 是否有下一页
* @return
*/
public boolean isHasNext() {
// 如果有尾页就有下一页,因为有尾页表明不是最后一页
return isHasLast() ? true : false;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
/**
* 是否有尾页
* @return
*/
public boolean isHasLast() {
// 如果不是最后一页就有尾页
return (pageNow == getTotalCount()) ? false : true;
}
public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}
}
6).测试
<1>ssm.test–TestService.java
package ssm.test;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ssm.model.User;
import ssm.service.UserService;
import ssm.service.impl.UserServiceImpl;
public class TestService {
ApplicationContext ctx;
@Before
public void setUp() throws Exception {
ctx=new ClassPathXmlApplicationContext("spring-mybatis.xml");
}
@Test
public void test() {
}
}
7).写前端界面
<1>WEB-INF–index.jsp
...
"user/goUser?flag=templet">模板引擎
"user/goUser?flag=json">json
"user/goUser?flag=fileupload">文件上传
...
<2>WEB-INF–jsp–templet.jsp
...
<h1>templeth1>
<form>
<table>
<tr>
<td>usernametd>
<td>
<input type="text" name="userName">
td>
tr>
<tr>
<td>userphonetd>
<td>
<input type="text" name="userPhone">
td>
tr>
<tr>
<td>useremailtd>
<td>
<input type="email" name="userEmail">
td>
tr>
<tr>
<td>passwordtd>
<td>
<input type="password" name="userPwd">
td>
tr>
<td> td>
<td>
<input type="button" value="提交" onclick="addUser()">
td>
tr>
table>
form>
<script type="text/javascript">
//添加用户
function addUser() {
var form = document.forms[0];
form.action = "user/addUserTemplet?flag=add";
form.method = "post";
form.submit();
}
script>
...
<3>WEB-INF–jsp–json.jsp
...
<h1>jsonh1>
<form id="myform">
<table>
<tr>
<td>usernametd>
<td>
<input type="text" name="userName" id="userName">
td>
tr>
<tr>
<td>userphonetd>
<td>
<input type="text" name="userPhone" id="userPhone">
td>
tr>
<tr>
<td>useremailtd>
<td>
<input type="email" name="userEmail" id="userEmail">
td>
tr>
<tr>
<td>passwordtd>
<td>
<input type="password" name="userPwd" id="userPwd">
td>
tr>
<tr>
<td> td>
<td>
<input type="button" value="提交" id="submit" />
td>
tr>
table>
form>
<script type="text/javascript" src="<%=request.getContextPath() %>/resource/js/jquery-1.9.1.min.js">script>
<script type="text/javascript">
$(function(){
$('#submit').click(function(){
//选取表单
var form = $('#myform');
//获取表单数据
var name = $("#userName").val();
var phone = $("#userPhone").val();
var email = $("#userEmail").val();
var pwd = $("#userPwd").val();
var user = {userName:name,userPhone:phone,userEmail:email,userPwd:pwd};//拼装成json格式
//发送AJAX请求
$.post('user/addUserJson',user,function(user){
alert(user);
});
});
});
script>
...
<4>WEB-INF–jsp–showUser.jsp
...
<c:if test="${!empty userList}">
<c:forEach var="user" items="${userList}">
姓名:${user.userName} 手机号:${user.userPhone} 邮箱:${user.userEmail} <br>
c:forEach>
c:if>
<div align="left">
<font size="2">共 ${page.totalPageCount} 页font> <font size="2">第
${page.pageNow} 页font> <a href="addUserTemplet?pageNow=1">首页a>
<c:choose>
<c:when test="${page.pageNow - 1 > 0}">
<a href="addUserTemplet?pageNow=${page.pageNow - 1}">上一页a>
c:when>
<c:when test="${page.pageNow - 1 <= 0}">
<a href="addUserTemplet?pageNow=1">上一页a>
c:when>
c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="addUserTemplet?pageNow=${page.pageNow}">下一页a>
c:when>
<c:when test="${page.pageNow + 1 < page.totalPageCount}">
<a href="addUserTemplet?pageNow=${page.pageNow + 1}">下一页a>
c:when>
<c:when test="${page.pageNow + 1 >= page.totalPageCount}">
<a href="addUserTemplet?pageNow=${page.totalPageCount}">下一页a>
c:when>
c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="addUserTemplet?pageNow=${page.pageNow}">尾页a>
c:when>
<c:otherwise>
<a href="addUserTemplet?pageNow=${page.totalPageCount}">尾页a>
c:otherwise>
c:choose>
div>
...
<5>WEB-INF–jsp–fileupload.jsp
...
${message}
...
8).由于7)的步骤需要jquery,所以需要引进jquery
在webapp下建立resource目录,在resource下建立js目录,在js目录下存放一个jquery-1.9.1.min.js
9).写控制类处理页面逻辑
<1>ssm.controller–UserController.java
package ssm.controller;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import ssm.model.User;
import ssm.service.UserService;
import ssm.util.FileUpload;
import ssm.util.Page;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
private Logger log = Logger.getLogger(UserController.class);
@Resource
private UserService userService;
/*json数据交互*/
@RequestMapping("/addUserJson")
public void addUserJson(HttpServletRequest request, HttpServletResponse response, User user)
throws IOException {
log.info("添加用户");
System.out.println("添加用户"+user.getUserName()+","+user.getUserPhone()+","+
user.getUserEmail()+","+user.getUserPwd()+".");
userService.addUser(user);
List userList = userService.getAllUsers();
JSONArray jsons = new JSONArray();
for(User a_user : userList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", a_user.getId());
jsonObject.put("UserName", a_user.getUserName());
jsonObject.put("UserPhone", a_user.getUserPhone());
jsonObject.put("UserEmail", a_user.getUserEmail());
jsonObject.put("UserPwd", a_user.getUserPwd());
jsons.add(jsonObject);
}
/*设置字符集为'UTF-8'*/
response.setCharacterEncoding("UTF-8");
response.getWriter().print(jsons.toString()) ;
}
/*模板引擎渲染*/
@RequestMapping("/addUserTemplet")
public String addUserTemplet(HttpServletRequest request, Model model, User user){
String flag = request.getParameter("flag");
if(null != flag && flag.equals("add"))
{
log.info("添加用户");
System.out.println("添加用户"+user.getUserName()+","+user.getUserPhone()+","+
user.getUserEmail()+","+user.getUserPwd()+".");
userService.addUser(user);
}
Page page = null;
String pageNow = request.getParameter("pageNow");
List userList = new ArrayList();
int totalCount = userService.getUserCount();
if (pageNow != null) {
page = new Page(totalCount, Integer.parseInt(pageNow));
userList = userService.getUserByPage(page.getStartPos(), page.getPageSize());
} else {
page = new Page(totalCount, 1);
userList = userService.getUserByPage(page.getStartPos(), page.getPageSize());
}
model.addAttribute("userList", userList);
model.addAttribute("page", page);
return "showUser";
}
/*文件上传*/
@RequestMapping("/addUserFileUpload")
public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file,
HttpServletRequest request, Model model){
log.info("添加用户");
System.out.println("文件上传");
FileUpload fileUpload = new FileUpload();
String filename = fileUpload.upload(request, file);
System.out.println(filename);
model.addAttribute("message", "文件上传成功");
return "fileupload";
}
@RequestMapping("/goUser")
public String goUser(HttpServletRequest request, Model model){
log.info("前往用户界面");
String flag = request.getParameter("flag");
if(null != flag && flag.equals("fileupload")) {
return "fileupload";
}
if(null != flag && flag.equals("templet")) {
return "templet";
}
else {
return "json";
}
}
}
10).完