ssm整合
整合:spring4.2.5+mybatis3.2.8+springMVC+maven环境:Myeclipse2014+mysql5.5.20+tomcat8+jdk1.7+linux目标:实现对用户表的简单添加(分别有表单数据提交和json提交)、分页查看和文件上传源码在github上:https://github.com/fuckyourdick/myRegisterSystem/t
整合: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.0</modelVersion>
<groupId>com.hsp.maven</groupId>
<artifactId>mavenSSH</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mavenSSH</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- spring版本号 -->
<spring.version>4.2.5.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.8</mybatis.version>
<!-- mysql驱动版本号 -->
<mysql-driver.version>5.1.29</mysql-driver.version>
<!-- log4j日志包版本号 -->
<slf4j.version>1.7.18</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<!-- 添加jstl依赖 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 添加spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 添加mybatis/spring整合包依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 添加mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver.version}</version>
</dependency>
<!-- 添加数据库连接池依赖 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 添加fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
<!-- 添加日志相关jar包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<!-- 本地环境要求 -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1-b07</version>
</dependency>
</dependencies>
<build>
<finalName>mavenSSM</finalName>
</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
<?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"
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"/>
<!-- 第一种方式:加载一个properties文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<!-- 第二种方式:加载多个properties文件
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:common.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
</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>
<!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapping/*.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
<5>spring-mvc.xml
<?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-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">
<!-- 自动扫描 @Controller-->
<context:component-scan base-package="ssm.controller"/>
<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->
</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"/>
<!-- 上传文件大小限制为31M,31*1024*1024 -->
<property name="maxUploadSize" value="32505856"/>
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="4096"/>
</bean>
</beans>
<6>web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>ssm</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!-- 编码过滤器 -->
<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>
<!-- spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止spring内存溢出监听器,比如quartz -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- 访问静态文件 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<!-- spring mvc servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do 形式 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<!-- session配置 -->
<session-config>
<session-timeout>20</session-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<User> getAllUser();
public List<User> selectUserByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize);
public int selectUserCount();
}
<4>mapping–UserMapper.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="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>
<!-- 分页SQL语句 -->
<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<User> getAllUsers();
public List<User> 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<User> getAllUsers() {
return userDao.getAllUser();
}
public List<User> 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
...
<a href="user/goUser?flag=templet">模板引擎</a><br>
<a href="user/goUser?flag=json">json</a><br>
<a href="user/goUser?flag=fileupload">文件上传</a><br>
...
<2>WEB-INF–jsp–templet.jsp
...
<h1>templet</h1>
<form>
<table>
<tr>
<td>username</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>userphone</td>
<td>
<input type="text" name="userPhone">
</td>
</tr>
<tr>
<td>useremail</td>
<td>
<input type="email" name="userEmail">
</td>
</tr>
<tr>
<td>password</td>
<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>json</h1>
<form id="myform">
<table>
<tr>
<td>username</td>
<td>
<input type="text" name="userName" id="userName">
</td>
</tr>
<tr>
<td>userphone</td>
<td>
<input type="text" name="userPhone" id="userPhone">
</td>
</tr>
<tr>
<td>useremail</td>
<td>
<input type="email" name="userEmail" id="userEmail">
</td>
</tr>
<tr>
<td>password</td>
<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>
<!-- 分页 start -->
<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>
<!-- 分页 End -->
...
<5>WEB-INF–jsp–fileupload.jsp
...
<form action="user/addUserFileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file" /> <input type="submit" value="上传" /></form>
<h3>${message}</h3>
...
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<User> 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<User> userList = new ArrayList<User>();
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).完
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)