一、项目结构截图:
![!\[在这里插入图片描述\](https://img-blo](https://img-blog.csdnimg.cn/20190309205353843.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309205537363.png)

二、配置文件介绍

POM文件配置:

<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.ssm</groupId>
<artifactId>blog</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>blog Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>

<!-- 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>

<!--spring-security版本号-->
<spring-security.version>4.1.3.RELEASE</spring-security.version>

<!--spring-data-redis版本号-->
<spring.data.redis.version>1.7.1.RELEASE</spring.data.redis.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>

<!-- 添加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>

<!-- 添加日志相关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 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.xbean/xbean-spring -->
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>4.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>


<!-- 引入Mybatis分页插件 -->
<!-- 引入5.0版本在测试的时候会报错 4.2版本也会报错
4.2版本总是出现String无法转换为某个对象的错误
-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.1</version>
</dependency>
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.0</version>
</dependency>

</dependencies>
<build>
<finalName>blog</finalName>
</build>
</project>

 

 

(1)、jdbc.properties:

概念:
jdbc.properties文件主要是配置了数据库连接信息(JDBC 加载驱动类、数据库地址URL、数据库账号密码、初始连接数、最大连接数等),主要是为了方便后面spring和mybatis整合时引入数据源,为了连接数据库而配置。

配置:
#数据库驱动
driverClasss=com.mysql.jdbc.Driver
#数据库地址
jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true
&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
#数据库账号
username=root
#数据库密码
password=137972zc

#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000

(2)、log4j.properties文件配置

概念:
log4j.properties主要是为了设置日志信息,主要将程序运行中的日志信息输出到控制台和保存到文件.可以通过设置日志文件的输出级别来控制输出那些信息。
ERROR > WARN > INFO > DEBUG
设置级别为 ERROR 只会打印出 ERROR 日志;
设置级别为 WARN 会打印出 ERROR 和 WRAN 日志;
设置级别为 INFO 会打印出 ERROR、WARN 和 INFO 日志;
设置级别为 DEBUG会打印出 ERROR、WARN 、 INFO和 DEBUG日志;

配置:
#指定输出级别为DEBUG,输出到Console,和File变量指定的地方
log4j.rootLogger=DEBUG,Console,File
log4j.logger.org.springframework=ERROR,Console
#设置Console变量,日志输出到控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
#指定SYSTEM_OUT 或 SYSTEM_ERR,默认是SYSTEM_OUT
log4j.appender.Console.Target=System.out
#设置为自定义布局
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#日志输出格式设置,翻译为
[DEBUG][线程名][2019-02-01 12:01:54][类名]-输出信息-\n
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=G:/javaWorkspace/blog/log4j/run.log
#单个日志文件大小设置
log4j.appender.File.MaxFileSize=10MB
#输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
#[ALL][线程名][2019-03-01 12:01:42]-输出信息-\n
log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

(3)、mybatis-config.xml 文件配置

概念:
mybatis-config.xml 是mybatis的核心配置文件,主要是配置分页插件、设置实体别名、设置控制台打印sql语句等。
配置:
<?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="mapUnderscoreToCamelCase" value="true"/>
<!-- 打印sql语句 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 别名 -->
<typeAliases>
<!--扫描包,默认别名为:javabean 的首字母小写的非限定类名来作为它的别名-->
<package name="com.base.entity" />
</typeAliases>
<!-- mybatis分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
</configuration>

(4)、spring-mybatis.xml文件配置

概念:
spring-mybatis.xml这个文件主要是用来整合spring和mybatis框架的,主要是做了以下设置:
1、自动扫描包,扫描范围内的java文件,只要带有spring注解,就把这些类交给spring容器管理,以下是几个常见的spring注解:
@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层
@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理
@repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id=" " class=" "/>) 当组件不好归类的时候,我们可以使用这个注解进行标注。
2、引入配置文件(jdbc.properties),引入后,当前xml就可以使用jdbc.properties里面设置的参数和属性,用于声明数据源
3、声明数据源
4、声明事务管理器,将数据源注入事务管理器
5、声明通知,将事务管理器注入通知,设置通知属性(事务管理模式,方法是否只读等等)
6、aop切入事务(声明切点,切面,切入通知)
7、声明sqlSessionFactory(sql会话工厂),注入mybatis核心配置文件、数据源,自动扫描mapping.xml文件路径。(声明sqlSessionFactory,设置dataSource,configLocation,mapperLocations三个属性)
dataSource:数据库
configLocation:配置路径
mapperLocations:映射路径
8、声明MapperScannerConfigurer(mapping扫描配置器),扫描DAO接口,注入sqlSessionFactory(sql会话工厂),从而完成DAO接口和mapping.xml文件的映射。(设置basePackage和sqlSessionFactoryBeanName)
basePackage:要扫描的DAO接口所在的包
sqlSessionFactoryBeanName:前面声明sqlSessionFactory的id(把sql会话注入到这些自动扫描到的DAO接口里面去)

配置:
<?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">

<!-- 自动扫描,自动扫描这些包下的java文件,如果带有spring注解
(@Service,@Component,@Repository,@Controller等),
就把这些类注册为bean,由spring管理 -->
<context:component-scan base-package="com.base"/>

<!--加载多个properties文件,加载后,当前xml就可以使用加载文件的属性-->
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:system/jdbc.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的配置映射文件,
声明sqlSessionFactory,注入数据源和mybatis核心配置文件,
配置扫描路径configLocation(扫描xml -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 配置Mybati的核心配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
<!-- 自动扫描mapping.xml文件-->
<property name="mapperLocations" value="classpath:**/dao/mapping/*.xml"></property>
</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类,扫描dao接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.base.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文件配置

概念:
spring-mvc.xml文件是springMVC的核心配置文件,主要是配置了一下几点:
1、<mvc:default-servlet-handler />:启动自动检测机制,判断是否是静态资源,如果是静态资源就交给Servlet容器处理,否则就交给DispatcherServlet继续处理
2、开启自动扫描,将@Controller标注的类,交给spring容器管理
3、设置自动将对象转换成Json格式数据(JSON自动转换器)
4、启用注解驱动
5、视图模式配置(跳转路径的前后缀)
6、文件上传配置

配置:

<?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">
<!-- 检查,如果是静态资源,就交给就将该请求转由Web应用服务器默认的Servlet处理,
如果不是静态资源的请求,才由DispatcherServlet继续处理。 -->
<mvc:default-servlet-handler />
<!-- 自动扫描, 扫描包下的java文件,
如果带有@Component,@Repository,@Service,@Controller,
就会将这个对象作为Bean注册进Spring容器。 -->
<context:component-scan base-package="com.base.controller"/>

<!--自动将对象转换成Json格式数据,避免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>

<!-- 启用注解驱动 -->
<mvc:annotation-driven />

<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/page" />
<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>

<!-- 对静态资源文件的访问-->
<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>

</beans>

(6)、web.xml 配置

概念:
web.xml 是web程序启动时,tomcat要加载的文件,主要是设置以下初始化配置:
1、Web 应用的名字、描述(display-name 和 description 标签);
2、应用范围的初始化参数,定义要装配的文件(context-param 标签);
3、过滤器配置(filter 标签);
4、监听器配置(listener 标签);
5、servlet 配置(servlet 标签,如前端控制器和验证码);
6、欢迎页面(welcome-file-list 标签,如 index.jsp 页面);
7、session失效时间(session-config 标签);
8、错误页面配置(error-page 标签,如 404、500错误页面等)。

配置:

<?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>Archetype Created Web Application</display-name>
<display-name>blog-web</display-name>

<!-- 配置应用级参数contextConfigLocation,
定义了要装入的 Spring 配置文件。 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/spring-mybatis.xml
</param-value>
</context-param>

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:system/log4j.properties</param-value>
</context-param>

<context-param>
<param-name>log4jRefreshInterval</param-name >
<param-value> 600000 </param-value >
</context-param>

<!--log4j配置监听-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<!-- 编码过滤器 解决POST乱码问题-->
<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>

<!-- 设置过滤器encodingFilter扫描范围,/*-->
<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>

<!-- 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:springMvc/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<!-- servlet-mapping -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do 形式 -->
<url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 指明对于如下资源文件不采用spring的过滤器,
对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>page/index.jsp</welcome-file>
<welcome-file>page/index.html</welcome-file>
</welcome-file-list>

<!-- session配置 -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>

 

(7)、对于整合SSM框架我的总结:

主要步骤:
<1>:配置jdbc.properties文件,为了连接数据库
<2>:配置log4j文件,为了记录和输出日志信息。
<3>:配置mybatis.xml文件,为了指定mybatis的基本设置(别名\方言\分页插件等等)
<4> : 配置spring-mybatis文件,为了整合spring和mybatis,让spring管理mybatis。其中分为这样几步:
(1):<context:component-scan base-package="com.base"/>
设置自动扫描,扫描包下的java文件,如果带有spring注解,就交给spring来管理(@Service,@Component,@Repository,@Controller等)
(2):加载多个properties文件,加载后,当前xml就可以使用加载文件的属性
(3):配置数据源
(4):声明"sqlSessionFactory"(sql会话),注入数据源和mybatis核心配置文件(mybatis.xml文件),配置扫描路径configLocation(也就是mapper映射文件的路径)
(5):扫描dao接口,指定basePackage,Spring会自动查找其下的类,扫描dao接口,再将sqlSessionFactory注入进去。完成dao接口和mapper映射文件的映射。
(6):事务管理,声明事务管理器,将数据源注入到事务管理器,再设置通知(事务管理模式,方法是否只读等等),然后再设置aop,用aop的方式来管理事务(切点和切面(管理的范围就是切面),再通过动态代理的方法,把切点和通知联系起来,从而完成aop管理事务.

<5> : 配置spring-MVC文件,为了设置Controller 层的包扫描、视图模式配置(跳转路径的前后缀)、文件上传配置、静态资源处理等
(1): <context:component-scan base-package="com.base.controller"/>
自动扫描, 扫描包下的java文件,
如果带有@Component,@Repository,@Service,@Controller, 就会将这个对象作为Bean注册进Spring容器。
(2):mappingJacksonHttpMessageConverter
设置json转换器
(3):启动注解驱动 <mvc:annotation-driven />
(4):定义跳转的文件的前后缀 ,视图模式配置
(5):文件上传配置
(6):设置对静态资源文件的访问


<6> : 配置web.xml文件,用来初始化配置信息(项目启动时,要加载那些东西)
(1):配置应用级参数contextConfigLocation,定义要装入的配置文件。
(2):配置编码过滤器 解决POST乱码问题
(3):配置spring监听器
(4):配置spring mvc servlet,也就是DispatcherServlet(前端控制器)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、开始增删改查功能

(1)、DAO层:

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" >

<!--namespace就是与此文件对应的Dao接口的全路径-->
<mapper namespace="com.base.dao.IUserDao" >
<!--根据id查询user实体-->
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultType="userEntity">
SELECT
ID as id, NAME as name, AGE as age
FROM
USER
WHERE
ID = #{userId}
</select>

<!--插入user实体数据到数据库-->
<insert id="saveUser" parameterType="userEntity">
INSERT INTO USER(
NAME,
AGE
)
VALUES (
#{name},
#{age}
);
</insert>

<!--根据id删除user信息-->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE
FROM
USER
WHERE
ID IN (#{ids})
</delete>

<!--根据id更新user信息-->
<update id="updateUserEntity" parameterType="userEntity">
UPDATE
USER
SET
NAME=#{name},
AGE=#{age}
WHERE
ID=#{id}
</update>

<!--查询所有user数据集合-->
<select id="getUserList" parameterType="java.util.HashMap" resultType="java.util.HashMap">
SELECT
ID AS id,
NAME AS name,
AGE AS age
FROM
USER
WHERE
1=1
<if test="id !=null">
AND ID=#{id}
</if>
</select>

</mapper>


IUserDao:

/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved.
*
* 功能描述:
* @Package: com.base.dao
* @author: zhangCheng
* @date: 2019年3月3日 下午1:00:19
*/
package com.base.dao;

import java.util.HashMap;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.base.entity.UserEntity;

/**
* Copyright: Copyright (c) 2019 LanRu-Caifu
*
* @ClassName: IUserDao.java
* @Description: 用户模块dao接口
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月3日 下午1:00:19
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/

@Repository("userDao")
public interface IUserDao {

/**
* @Function: IUserDao.java
* @Description: 根据id查询用户实体
*
* @param:userId: userID
* @return:
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月3日 下午1:03:01
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/
public UserEntity selectByPrimaryKey(Integer userId);


/**
*
* @Function: IUserDao.java
* @Description: 添加user信息
*
* @param:userEntity 实体
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: Administrator
* @date: 2019年3月8日 下午8:15:59
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 Administrator v1.0.0 修改原因
*/
public void saveUser(UserEntity userEntity);



/**
* @Function: IUserDao.java
* @Description: 更新user信息
*
* @param:userEntity user实体
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:45:23
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
public void updateUserEntity(UserEntity userEntity);


/**
*
* @Function: IUserDao.java
* @Description: 根据ids删除user信息
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:46:07
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
public void deleteUser(Integer ids);



/**
*
* @Function: IUserDao.java
* @Description: 该函数的功能描述
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月9日 上午10:55:24
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月9日 zhangCheng v1.0.0 修改原因
*/
public List<Object> getUserList(HashMap<String, Object> map);
}

 

(2)、Service层

IUserService:

package com.base.service;

import java.util.HashMap;
import java.util.List;
import javax.xml.rpc.ServiceException;
import com.base.entity.UserEntity;
/**
*
* Copyright: Copyright (c) 2019 LanRu-Caifu
*
* @ClassName: IUserService.java
* @Description: 用户模块Service接口
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月3日 上午10:33:13
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/
public interface IUserService {
/**
*
* @Function: IUserService.java
* @Description: 根据id查询user信息
*
* @param:根据id查询用户
* @return:用户实体
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月3日 上午10:34:16
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/
public UserEntity selectByPrimaryKey(int userId) throws ServiceException;



/**
* @Function: IUserService.java
* @Description: 添加user信息
*
* @param:userEntity
* @return: void
* @throws:ServiceException
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:25:30
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 Administrator v1.0.0 修改原因
*/
public void saveUser(UserEntity userEntity) throws ServiceException;


/**
*
* @Function: IUserService.java
* @Description: 根据删除user信息
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:28:12
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
public void deleteUser(Integer id) throws ServiceException;



/**
* @Function: IUserService.java
* @Description: 更新user
*
* @param:userEntity 用户实体
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:31:55
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
public void updateUser(UserEntity userEntity) throws ServiceException;



/**
*
* @Function: IUserService.java
* @Description: 查询list信息
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月9日 上午10:52:26
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月9日 zhangCheng v1.0.0 修改原因
*/
public List<Object> getUserList(HashMap<String, Object> map)throws ServiceException;

}

UserServiceImpl:

/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved.
*
* 功能描述:用户模块Service接口实现
* @Package: com.base.service.impl
* @author: zhangCheng
* @date: 2019年3月3日 上午10:38:42
*/
package com.base.service.impl;

import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.xml.rpc.ServiceException;
import org.springframework.stereotype.Service;
import com.base.dao.IUserDao;
import com.base.entity.UserEntity;
import com.base.service.IUserService;
/**
* Copyright: Copyright (c) 2019 LanRu-Caifu
*
* @ClassName: UserServiceImpl.java
* @Description: 用户模块Service接口实现类
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月3日 上午10:38:42
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/

@Service("userService")
public class UserServiceImpl implements IUserService {

@Resource(name = "userDao")
private IUserDao userDao;

/**
* @see com.base.service.IUserService#getUserById(int)
* @Function: UserServiceImpl.java
* @Description: 根据id查询user信息
*
* @param: userId
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月3日 上午10:40:04
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/
@Override
public UserEntity selectByPrimaryKey(int userId) throws ServiceException {
UserEntity userEntity = null;
try {
userEntity=userDao.selectByPrimaryKey(userId);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
return userEntity;
}



/**
* @see com.base.service.IUserService#saveUser(com.base.entity.UserEntity)
* @Function: UserServiceImpl.java
* @Description: 添加user信息
*
* @param: userId
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月8日 下午8:32:45
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@Override
public void saveUser(UserEntity userEntity) throws ServiceException {
try {
userDao.saveUser(userEntity);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}

}



/**
* @see com.base.service.IUserService#deleteUser(java.lang.Integer)
* @Function: UserServiceImpl.java
* @Description: 根据id删除user信息
*
* @param:userId
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月8日 下午8:32:45
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@Override
public void deleteUser(Integer ids) throws ServiceException {
try {
userDao.deleteUser(ids);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}

}



/**
* @see com.base.service.IUserService#updateUser(com.base.entity.UserEntity)
* @Function: UserServiceImpl.java
* @Description: 更新user
*
* @param: userId
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月8日 下午8:32:45
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@Override
public void updateUser(UserEntity userEntity) throws ServiceException {

try {
userDao.updateUserEntity(userEntity);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}

}



/**
* @see com.base.service.IUserService#getUserList(java.util.HashMap)
* @Function: UserServiceImpl.java
* @Description: 查询list信息
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月9日 上午10:53:13
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月9日 zhangCheng v1.0.0 修改原因
*/
@Override
public List<Object> getUserList(HashMap<String, Object> map) throws ServiceException {
List<Object> list=null;
try {
list=userDao.getUserList(map);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
return list;
}

}

(3)、UserController层

UserController:

/**
* Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved.
*
* 功能描述:
* @Package: com.base.controller
* @author: zhangCheng
* @date: 2019年3月3日 下午1:18:14
*/
package com.base.controller;

import java.util.HashMap;
import javax.xml.rpc.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.base.entity.UserEntity;
import com.base.service.IUserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

/**
* Copyright: Copyright (c) 2019 LanRu-Caifu
*
* @ClassName: UserController.java
* @Description: 用户模块Controller层
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月3日 下午1:18:14
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月3日 zhangCheng v1.0.0 修改原因
*/

@Controller
@RequestMapping(value = "/user")
public class UserController {

//注入userService
@Autowired
IUserService userService;


/**
*
* @Function: UserController.java
* @Description: 根据id查询user信息
*
* @param: id:用户id
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午8:56:17
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping(value="selectByPrimaryKey")
public ModelAndView selectByPrimaryKey(Integer id) throws ServiceException {
//声明ModelAndView对象
ModelAndView mv=new ModelAndView();
try {
//加入属性"user",设置值为查询出来的user实体
mv.addObject("user",userService.selectByPrimaryKey(id));
//为了跳转到editUser.jsp页面
mv.setViewName("/user/editUser");
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
return mv;
}

/**
*
* @Function: UserController.java
* @Description: 添加用户信息
*
* @param:userEntity 用户信息
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月8日 下午9:14:32
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping("saveUser")
public String saveUser(UserEntity userEntity) throws ServiceException {
try {
if(userEntity!=null);
userService.saveUser(userEntity);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
//重定向到getUserList方法
return "redirect:/user/getUserList";
};

/**
*
* @Function: UserController.java
* @Description: 跳转到用户添加页面
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月9日 上午10:34:16
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月9日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping("toAdduser")
public String toAdduser() {
//转发到addUser.jsp页面
return "/user/addUser";
}



/**
*
* @Function: UserController.java
* @Description: 删除user信息
*
* @param: ids: id字符串
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月8日 下午9:24:33
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月8日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping("/deleteUser")
public String deleteUser(Integer ids) throws ServiceException {
try {
userService.deleteUser(ids);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
//重定向到getUserList方法
return "redirect:/user/getUserList";
};


/**
*
* @Function: UserController.java
* @Description: 更新user实体
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @date: 2019年3月10日 下午12:32:26
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月10日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping("updateUser")
public String updateUser(UserEntity userEntity) throws ServiceException {
try {
userService.updateUser(userEntity);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("错误信息:"+e.getMessage());
}
//重定向到getUserList方法
return "redirect:/user/getUserList";
};






/**
*
* @Function: UserController.java
* @Description: 跳转到首页
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: zhangCheng
* @throws ServiceException
* @date: 2019年3月9日 上午10:01:21
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2019年3月9日 zhangCheng v1.0.0 修改原因
*/
@RequestMapping("getUserList")
public ModelAndView getUserList(@RequestParam(value="pn",defaultValue="1")Integer pn,ModelAndView mav) throws ServiceException{
PageHelper.startPage(pn, 5);
mav.setViewName("/user/userInfo");
HashMap<String, Object> paramMap=new HashMap<String, Object>();
//将用户信息放入PageInfo对象里
PageInfo page = new PageInfo(userService.getUserList(paramMap),5);
mav.addObject("pageInfo",page);
return mav;
};

/*public String getUserList(HttpServletRequest request) throws ServiceException{
HashMap<String, Object> paramMap=new HashMap<String, Object>();
request.setAttribute("userList", userService.getUserList(paramMap));
return "/user/userInfo";
}*/

}

 

(4)、页面:

先在网上下载,把静态资源放入项目里面: bootstrap和layui文件,在各种的官网上可以下载。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130419195.png)

index.jsp: (首页,启动项目进入的页面)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130037259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("path", request.getContextPath());
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
<style type="text/css">
a {
text-decoration: none;
color: #fff;
font-size: 14px;
}

h3 {
width: 180px;
height: 38px;
margin: 100px auto;
text-align: center;
line-height: 38px;
background: #5BC0DE;
border-radius: 4px;
}

</style>
</head>
<body>
<h3>
<a href="${path}/user/getUserList">进入用户管理页</a>
</h3>
</body>
</html>


in.jsp:公共页面(定义一些公共变量或者方法,引入公共js\css)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="path" scope="session" value="${pageContext.request.contextPath}"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>in.jsp</title>
<link href="${path}/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7-dist/js/jquery-1.10.1.min.js"></script>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="${path}/static/layui/layui.all.js"></script>
<script type="text/javascript">

//弹出框
function alert(text) {
layer.open({
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['300px', '220px'], //宽高
shadeClose: true,
shade: 0.8,
content: text
});
};


</script>

</head>
<body>

</body>
</html>

userInfo.jsp: (数据列表页面)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190311204348136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<jsp:include page="../in.jsp" flush="true"/>
<!DOCTYPE HTML>
<html>
<head>
<title>用户列表</title>
</head>

<body>

<div class="container">
<!-- 标题 -->
<div class="row">
<div class="col-md-12">
<h1>用户管理</h1>
</div>
</div>
<!-- 按钮 -->
<div class="row">
<div class="col-md-4 col-md-offset-8">
<a class="btn btn-primary" href="${path}/user/toAdduser">新增</a>
</div>
</div>
<!-- 表格 -->
<div class="row">
<div class="col-md-12">
<table class="table table-hover">
<tr>
<th>id</th>
<th>用户名</th>
<th>年龄</th>
<th>操作</th>
</tr>
<c:forEach items="${pageInfo.list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name }</td>
<td>${user.age }</td>
<td>
<a type="button" href="${path}/user/selectByPrimaryKey?id=${user.id}" class="btn btn-info btn-sm">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
编辑</a>
<a type="button" href="${path}/user/deleteUser?ids=${user.id}" class="btn btn-danger btn-sm">
<span class="glyphicon glyphicon-trash" aria-hidden="true" ></span>
删除</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</div>

<hr style="height:1px;border:none;border-top:1px solid #ccc;" />


<!-- 分页导航栏 -->
<!-- 分页信息 -->
<div class="row">
<!-- 分页文字信息,其中分页信息都封装在pageInfo中 -->
<div class="col-md-6">
当前第:${pageInfo.pageNum}页,总共:${pageInfo.pages}页,总共:${pageInfo.total}条记录
</div>
<!-- 分页条 -->
<div class="col-md-6">
<nav aria-label="Page navigation">
<ul class="pagination">
<li><a href="${path}/user/getUserList?pn=1">首页</a></li>
<!-- 如果还有上一页,则显示 -->
<c:if test="${pageInfo.hasPreviousPage }">
<li>
<a href="${path}/user/getUserList?pn=${pageInfo.pageNum-1}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<!-- 循环所有页码 -->
<c:forEach items="${pageInfo.navigatepageNums }" var="page_Num">
<!-- 如果等于当前页 -->
<c:if test="${page_Num == pageInfo.pageNum }">
<li class="active"><a href="#">${ page_Num}</a></li>
</c:if>
<c:if test="${page_Num != pageInfo.pageNum }">
<li><a href="${path}/user/getUserList?pn=${ page_Num}">${ page_Num}</a></li>
</c:if>
</c:forEach>


<c:if test="${pageInfo.hasNextPage }">
<li>
<a href="${path}/user/getUserList?pn=${pageInfo.pageNum+1}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>

</ul>
</nav>
</div>
</div>
</div>
</body>
</html>

editUser.jsp: (数据编辑页面)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130106379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<jsp:include page="../in.jsp" flush="true"/>
<!DOCTYPE html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>编辑用户</title>
<script type="text/javascript">
function updateUser() {
var form = document.forms[0];
form.action = "${path}/user/updateUser";
form.method = "post";
form.submit();
}
</script>

</head>
<body>
<div class="container">
<!-- 标题 -->
<div class="row">
<div class="col-md-12">
<h1>编辑用户</h1>
</div>
</div>
<!-- 表单 -->
<form class="form-horizontal" action="" name="userForm">
<input type="hidden" type="text" name="id" value="${user.id }">
<div class="form-group">
<label for="inputEmail3" class="col-md-2 control-label">姓名:</label>
<div class="col-md-4">
<input class="form-control" type="text" name="name" value="${user.name }">
</div>
</div>

<div class="form-group">
<label for="inputEmail3" class="col-md-2 control-label">年龄:</label>
<div class="col-md-4">
<input class="form-control" type="text" name="age" value="${user.age }">
</div>
</div>

<div class="form-group">
<label class="col-md-2 control-label"></label>
<div class="col-md-4">
<button type="submit" class="btn btn-primary" onclick="updateUser()" >编辑</button>
</div>
</div>

</form>
</div>
</body>
</html>

addUser.jsp: (数据添加页面)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190310130131496.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NDc0MA==,size_16,color_FFFFFF,t_70)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<jsp:include page="../in.jsp" flush="true"/>
<!DOCTYPE HTML>
<html>
<head>
<title>添加用户</title>
<script type="text/javascript">
function addUser() {
var form = document.forms[0];
form.action = "${path}/user/saveUser";
form.method = "post";
form.submit();
};
</script>
</head>
<body>
<div class="container">
<!-- 标题 -->
<div class="row">
<div class="col-md-12">
<h1>添加用户</h1>
</div>
</div>
<!-- 表单 -->
<div class="row">
<div class="col-md-12">
<form class="form-horizontal" action="" name="userForm">
<div class="form-group">
<label for="inputEmail3" class="col-md-2 control-label">姓名:</label>
<div class="col-md-4">
<input class="form-control" type="text" name="name" >
</div>
</div>

<div class="form-group">
<label class="col-md-2 control-label">年龄:</label>
<div class="col-md-4">
<input class="form-control" type="text" name="age" >
</div>
</div>


<div class="form-group">
<label class="col-md-2 control-label"></label>
<div class="col-md-4">
<button type="submit" class="btn btn-primary" onclick="addUser()" >添加</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>

 


以上就是ssm实现增删查改的全部过程。

posted on 2019-03-31 10:43  millerzc  阅读(741)  评论(0编辑  收藏  举报