Spring+SpringMVC+Mybatis整合笔记

出于兴趣,最近在研究SSM,参考着别人的技术资料并结合实际情况,一步一步的跑通了SSM整合的整个过程,现整理如下,希望对于同样对SSM有兴趣的你有所帮助,当然,因本人能力有限,可能有些问题,希望您能够指出来,咱们一起学习进步。

 

主要技术点:

l  Spring + SpringMVC + Mybatis的整合

l  使用maven管理jar包及版本

l  使用mybatis generator代码生成器自动生成代码

l  使用SpringJUnit4ClassRunner进行单元测试

 

主要配置环境清单:

l  Windows10 64位

l  Jdk 1.8

l  Eclipse 4.6

l  Maven 3.3.9

l  Spring 4.3.1.RELEASE

l  Spring MVC 4.3.1.RELEASE

l  Mybatis 3.4.1

l  Junit 4.12

l  Mysql 5.7

以上均为至2016年7月20日最新版本,其实新旧版本影响并不大,各位可酌情处理。

 

关于JDK、Eclipse的安装配置在此就不多言了。如有需要,请百度或者Google。本文直接从maven的安装开始。

一.Maven相关

1.Maven安装配置

下载maven,就是一个包:apache-maven-3.3.9-bin.zip,解压到一个路径,然后配置环境变量:

MAVEN_HOME  变量值:C:\JavaIDE\apache-maven-3.3.9(这是我的MAVEN路径)

Path  在最前面加上:%MAVEN_HOME%\bin;(注意,最后要有个";"作为分隔符)

2.新建Maven项目

在Eclipse里,点击File,New,Other,MavenProject,在Maven Archetype处,选择maven-archetype-webapp,如图:


该选择项表示你要用maven建一个符合web开发结构的项目,例如有web.xml,webapp等文件夹或文件。

 

在Group Id处输入域名,如org.sample,在Artifact Id处输入项目名,如ssmexample,如图:

 

点击Finish,完成项目新建。我们还需要对项目进行一些设置。

首先,在项目名上,右键,properties,修改项目编码为utf-8,以防止乱码,如图


然后,选择Java Build Path,修改jre为1.8,原来为1.5,比较out了,可能会引发一些未知问题。

 

最后,修正新建项目的一个错误,如图


只需要在pom.xml中,添加引入java ee的jar包即可。在pom.xml中引入:

<!-- 导入java ee jar 包 -->  

        <dependency>  

            <groupId>javax</groupId>  

            <artifactId>javaee-api</artifactId>  

            <version>7.0</version>  

        </dependency>  

当然此处也可以选择忽略,因为,之后我们将会对pom.xml进行修改。

 

二. 修改pom文件

1.pom文件是maven项目的纲领性文件,可以用来管理项目依赖,版本控制,比较高级的用法还有编译、单元测试、系统测试、文档生成等,此处主要用到jar包的管理和mybatis的代码自动生成。

首先,引入SSM需要的jar包,使用maven管理依赖包,只需要在pom.xml中添加对相关jar包的依赖即可。

pom.xml中添加的内容如下,均为SSM常用的包,说明请见注释:

<properties>

<!-- javaee-api版本号 -->

<javaee-api.version>7.0</javaee-api.version>

<!-- junit版本号(20160720) -->

<junit.version>4.12</junit.version>

<!-- spring版本号(20160720) -->

<spring.version>4.3.1.RELEASE</spring.version>

<!-- mybatis版本号(20160720) -->

<mybatis.version>3.4.1</mybatis.version>

<mybatis-spring.version>1.3.0</mybatis-spring.version>

<mybatis-generator-maven-plugin.version>1.3.3</mybatis-generator-maven-plugin.version>

<!-- log4j日志文件管理包版本号(20160720) -->

<slf4j.version>1.7.21</slf4j.version>

<log4j.version>1.2.17</log4j.version>

<!-- mysql-connector-java版本号(20160720) -->

<mysql-connector-java.version>5.1.39</mysql-connector-java.version>

<!-- commons-dbcp版本号(20160720) -->

<commons-dbcp.version>1.4</commons-dbcp.version>

<!-- jstl版本号(20160720) -->

<jstl.version>1.2</jstl.version>

<!-- fastjson版本号(20160720) -->

<fastjson.version>1.2.14</fastjson.version>

<jackson-databind.version>2.8.1</jackson-databind.version>

<!-- jackson-mapper-asl版本号(20160720) -->

<jackson-mapper-asl.version>1.9.13</jackson-mapper-asl.version>

<jackson-core-asl.version>1.9.13</jackson-core-asl.version>

<!-- commons-fileupload版本号(20160720) -->

<commons-fileupload.version>1.3.2</commons-fileupload.version>

<commons-io.version>2.5</commons-io.version>

<commons-codec.version>1.10</commons-codec.version>

</properties>

<dependencies>

<!-- junit包 -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</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-aop</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-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>${mybatis-spring.version}</version>

</dependency>

<!-- 导入mybatis代码生成器jar包 -->

<dependency>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>${mybatis-generator-maven-plugin.version}</version>

</dependency>

<!-- 导入Mysql数据库链接jar包-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql-connector-java.version}</version>

</dependency>

<!-- 导入java ee jar 包 -->

<dependency>

<groupId>javax</groupId>

<artifactId>javaee-api</artifactId>

<version>${javaee-api.version}</version>

</dependency>

<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>${commons-dbcp.version}</version>

</dependency>

<!-- JSTL标签类 -->

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>${jstl.version}</version>

</dependency>

<!-- 日志文件管理包 -->

<!-- log start -->

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

<!-- 格式化对象,方便输出日志-->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>${fastjson.version}</version>

</dependency>

<!-- log end -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>${jackson-databind.version}</version>

</dependency>

<!-- 映入JSON -->

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-mapper-asl</artifactId>

<version>${jackson-mapper-asl.version}</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-core-asl</artifactId>

<version>${jackson-core-asl.version}</version>

</dependency>

<!-- 上传组件包 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>${commons-fileupload.version}</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>${commons-io.version}</version>

</dependency>

<dependency>

<groupId>commons-codec</groupId>

<artifactId>commons-codec</artifactId>

<version>${commons-codec.version}</version>

</dependency>

</dependencies>

<build>

<finalName>ssmtest</finalName>

<plugins>

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>${mybatis-generator-maven-plugin.version}</version>

<configuration>

<!--允许移动生成的文件-->

<verbose>true</verbose>

<!--允许覆盖生成的文件-->

<overwrite>true</overwrite>

</configuration>

</plugin>

</plugins>

</build>

 

添加以上内容并保存之后,maven将会自动下载对应的jar包,非常方便,如图:

 

三.整合spring和mybatis

1.整合spring和mybatis,在resource文件夹下建立jdbc.properties,用于存放数据库连接的相关信息,本文使用的是mysql,内容如下:

 

2.在resource下新建spring-mybatis.xml,用于存放spring和mybatis的整合信息,内容如下:

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<!-- 自动扫描 -->

<context:component-scanbase-package="org.sample" />

<!-- 引入配置文件的写法一-->

<bean id="propertyConfigurer"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location" value="classpath:jdbc.properties"/>

</bean>

<!-- 引入配置文件的写法二 (对于@ContextConfiguration(locations ={"classpath:spring-mybatis.xml"})这种方式不能用)

<context:property-placeholderlocation="classpath:jdbc.properties"/>

-->

<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName"value="${driver}" />

<property name="url"value="${url}" />

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

 

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->

<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource"ref="dataSource" />

<!-- 自动扫描mapping.xml文件 -->

<property name="mapperLocations"value="classpath:org/sample/mapping/*.xml"></property>

</bean>

 

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->

<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage"value="org.sample.dao" />

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

 

</beans>

 

配置文件中需要注意包名org.sample,要改成你自己的,并且在之后的配置文件中,都需要注意包名要和你实际的程序保持一致,否则会出错!

如图:

 

3.在resource下新建log4j.properties,用于输出log,关于log4j的高级用法在此不多说,这里只用了一个比较基本的例子。

 

#定义LOG输出级别

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=[%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][%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

 

如图:

 

4.在mysql中新建一个表,作为项目中的数据来源。

DROP TABLE IF EXISTS `user_t`;

 

CREATE TABLE `user_t` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `user_name` varchar(40) NOT NULL,

  `password` varchar(255) NOT NULL,

  `age` int(4) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

/*Data for the table `user_t` */

 

insert  into`user_t`(`id`,`user_name`,`password`,`age`) values (1,'Bill','sfasgfaf',24);

 

如图:

 

 

5.利用mybatis的代码生成器,根据表格定义,生成对应的实体类、SQL操作映射文件以及mapper接口,由于mybatis generator的jar包已经在pom中定义了,在此,可以使用maven直接操作生成,具体步骤如下:

 

a.在resource下新建generatorConfig.xml,该文件用于被maven调用生成代码,(注意:需要引入jdbc.properties数据库驱动需要全路径,指定生成代码的路径,指定要生成代码的表,特别注意schema,也就是数据库名)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration

PUBLIC "-//mybatis.org//DTD MyBatis GeneratorConfiguration 1.0//EN"

"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

<!-- 引入配置文件-->

<properties resource="jdbc.properties"/>

<!-- 数据库驱动-->

<classPathEntrylocation="C:/Users/Bill/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar"/>

<context id="DB2Tables"targetRuntime="MyBatis3">

<commentGenerator>

<property name="suppressDate"value="true"/>

<!-- 是否去除自动生成的注释 true:是 : false:否-->

<property name="suppressAllComments"value="true"/>

</commentGenerator>

<!--数据库链接URL,用户名、密码 -->

<jdbcConnection driverClass="${driver}"connectionURL="${url}" userId="${username}"password="${password}">

</jdbcConnection>

<javaTypeResolver>

<property name="forceBigDecimals"value="false"/>

</javaTypeResolver>

<!-- 生成模型的包名和位置-->

<javaModelGeneratortargetPackage="org.sample.pojo"targetProject="src/main/java">

<property name="enableSubPackages"value="true"/>

<property name="trimStrings"value="true"/>

</javaModelGenerator>

<!-- 生成映射文件的包名和位置-->

<sqlMapGeneratortargetPackage="org.sample.mapping"targetProject="src/main/java">

<property name="enableSubPackages"value="true"/>

</sqlMapGenerator>

<!-- 生成DAO的包名和位置-->

<javaClientGenerator type="XMLMAPPER"targetPackage="org.sample.dao"targetProject="src/main/java">

<property name="enableSubPackages"value="true"/>

</javaClientGenerator>

<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->

<table schema="ssmdb"tableName="user_t" domainObjectName="User"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table>

</context>

</generatorConfiguration>

 

如图:

 

b.项目右键-Run as-Run Configuration

c.双击 Maven Build,在弹出的页面中,输入名字(可选),Base directory处点击Workspace选择项目ssmexample,然后在Goals中输入:mybatis-generator:generate

d.点击Apply,然后点击Run,利用Maven操作mybatis-generator-maven-plugin生成代码


e.生成成功,刷新项目,如图

 

 

6.接下来,在test中写一个测试用例,用来检测spring+mybatis是否整合成功

a.新建service接口和实现类

IUserService.java

package org.sample.service;

 

import org.sample.pojo.User;

 

public interface IUserService {

 

public User getUserById(int userId);

}

 

UserServiceImpl.java

package org.sample.service.impl;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Service;

 

import org.sample.dao.UserMapper;

import org.sample.pojo.User;

import org.sample.service.IUserService;

 

@Service("userService")

public class UserServiceImpl implements IUserService {

@Resource

private UserMapper userMapper;

public User getUserById(int userId){

return this.userMapper.selectByPrimaryKey(userId);

}

}

 

如图:

 

b.新建一个test用例,New-Other-TestCase

TestUser.java

package org.sample;

 

import javax.annotation.Resource;

 

import org.apache.log4j.Logger;

import org.junit.Test;

import org.junit.runner.RunWith;

importorg.springframework.test.context.ContextConfiguration;

importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 

import com.alibaba.fastjson.JSON;

import org.sample.pojo.User;

import org.sample.service.IUserService;

 

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations ={"classpath:spring-mybatis.xml"})

public class TestUser {

 

private static Logger logger =Logger.getLogger(TestUser.class);

@Resource

private IUserService userService=null;

@Test

public void test() {

int userId=1;

User user=userService.getUserById(userId);

logger.info(JSON.toJSON(user));

}

 

}

 

如图:

 

c.TestUser.java文件上,右键Run As,Junit Test,出现以下结果,说明spring和mybatis整合成功

 

四、整合springMVC

接下来,整合spring-mvc

1.在resource下,添加spring-mvc.xml

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->

<context:component-scan base-package="org.sample.controller"/>

<!--避免IE执行AJAX时,返回JSON出现下载文件 -->

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

<!-- 定义跳转的文件的前后缀,视图模式配置-->

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->

<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="10485760000" />

<!-- 内存中的最大值 -->

<property name="maxInMemorySize"value="40960" />

</bean>

 

</beans>

 

2.修改原web.xml文件,添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

version="3.0">

<display-name>Archetype Created WebApplication</display-name>

<!-- Spring和mybatis的配置文件 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-mybatis.xml</param-value>

</context-param>

<!-- 编码过滤器 -->

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<async-supported>true</async-supported>

<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内存溢出监听器 -->

<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: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,对应struts的后缀习惯-->

<url-pattern>/</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>/index.jsp</welcome-file>

</welcome-file-list>

 

</web-app>

 

五.最终测试

以上已经完成了SSM的整合,接下来,我们测试一下是否成功

1.在webapp/WEB-INF下,新建jsp文件夹,之后的jsp页面就放在该文件夹下面

新建一个jsp页面shouUser.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">

<title>第一个SSM实例</title>

</head>

<body>

欢迎你,${user.userName }

</body>

</html>

 

2.新建controller,在src/java下新建controller包,新建一个UserController.java

package org.sample.controller;

 

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

 

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

importorg.springframework.web.bind.annotation.RequestMapping;

 

import org.sample.pojo.User;

import org.sample.service.IUserService;

 

@Controller

@RequestMapping("/user")

public class UserController {

@Resource

private IUserService userService=null;

@RequestMapping("/showUser")

public String toIndex(HttpServletRequest request,Modelmodel){

intindex=Integer.parseInt(request.getParameter("id"));

User user=this.userService.getUserById(index);

model.addAttribute("user",user);

return "showUser";

}

}

 

3.最后,进行测试,将ssmexample发布至server上


4.启动server,在浏览器上输入http://127.0.0.1:8080/ssmexample/user/showUser?id=1

5.出现以下画面,恭喜你,SSM整合完成!

 

over!

 


本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

DOS命令大全(经典收藏) - 2016-07-22 22:07:05

#1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: \\ip\c$ 登陆后映射对方C:到本地为H: net use \\ip\ipc$ /del 删除IPC链接 net use h: /del 删除映射对方到本地的为H:的映射 net user 用
原文地址:【 http://www.sciencedirect.com/science/article/pii/S0167865514001056 】 一、传统的Mean-Shift 原文地址:【 http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1195991tag=1 】 个人理解(可能存在偏差,会不断改进): Mean-Shift算法用于tracking时,通过最小化两个概率密度函数之间的距离来进行,是一种 非参数技术 。 对于模板中的目标,即
如果你真的就看完了《 packetdrill框架点滴剖析以及TCP重传的一个细节 》,我觉得你应该有一个疑问,那就是RH发行版使用的2.6.32内核真的使用了PRR降窗算法吗?为此,我把故事再撸一遍。         按照标准的2.6.32内核,第一次收到SACK的时候,在进入重传之前,拥塞窗口的值应该是in_flight+1,即2+1=3个段,也就是说可以重传1个段,但是抓包发现重传了2个段,tcpprobe也证实了在进入重传之前,拥塞窗口的值是4,而in_flight的值为2,完全对不上tcp_cwnd
OSSEC linux(server) windows(agent)史上最详细中文配置 作者:谭丙章 E-mail:feifengwind@163.com ossec官方网站: http://www.ossec.net/ ossec帮助文档: http://ossec-docs.readthedocs.org/en/latest/manual/index.html 介绍 SSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等

反汇编mbr - 2016-07-22 19:07:23

https://notelzg.github.io/2016/07/17/disamy-mbr/ 个人博客,排版更好 今天把我们每次开机都用到的MBR,反汇编看看里面的引导代码是怎么样的顺便说一下 MBR 相关的开机过程。以及我们经常用的U盘自启动 程序到底值怎么玩的。 window开机流程 流程 加电--BIOS-- MBR-- DPT-- pbr-- Bootmgr-- bcd-- Winload.exe--- —- 内核加载– 整个windows7系统 细节 在CPU上电之后,若由硬盘启动,则BIO
Members 成员 Members are used for registering and authenticating external users of an Umbraco installation (ie. forum members, intranet users and so forth). Unlike with Document Types and Media Types everything is done in the Members section both defining a
特此说明:我参考了李林锋老师写的《netty权威指南》一书,支持大家买正版书学习。学会了,赶紧写下来,不但为了加深记忆也希望对大家有所帮助! 上节我们讲解了LineBasedFrameDecoder和StringDecoder的使用,如果大家理解了这二个东西,那么这一章学起来将是轻车熟路。话不多说开始吧。 本章我们将讲解一下内容: DelimiterBasedFrameDecoder(可以自动完成以分隔符做结束标志的消息解码)FixedLengthFrameDecoder(可以自动完成对定长消息的解码)

漫谈处理器体系结构 - 2016-07-22 19:07:08

漫谈处理器体系结构 前言: 这篇博客本应该是《 深入理解计算机体系结构 》(第二版)中第一部分第4章处理器体系结构的读后感,但是感觉这样的名字有点low,因为毕竟加入了自己的理解和总结。 ISA(Instruction-Set Architecture) 几乎所有讲体系结构的书都会讲到这个指令集。指令集确实应该是最先说明的问题。一句话概括起来指令集就是说CPU能干什么事。基本常用的指令集包括:传送指令、算术逻辑指令、跳转指令等。是体系结构需要实现的功能。指令集对人类来说是友好的,可阅读的。但对于只认识01

Linux学习---文件查找 - 2016-07-22 18:07:56

grep, egrep, fgrep  :文本查找 文件查找 locate 全系统查找,非实时,模糊匹配。查找时根据全系统文件数据库进行的。 系统在每天的计划任务时间生成数据库。 updatedb  手动生成文件数据库。 速度快。 find 实时查找,精确。速度慢。 遍历指定目录中所有文件完成查找。 支持多种查找标准。 find   PATH   查找标准   找到后的处理动作           路径默认:表示当前目录           标准默认:指定路径下所有文件           动作默认:为打
在上一篇文章中,详细讲述了Spring中注册AOP解析器的过程。在这篇文章中,将进一步讲解Advisors的创建过程。 Spring中注册AOP解析器的所有操作都是针对AnnotationAwareAspectJAutoProxyCreator进行的。AnnotationAwareAspectJAutoProxyCreator是实现AOP的根本。首先观察AnnotationAwareAspectJAutoProxyCreator的类层次结构。 图1 AnnotationAwareAspectJAutoPr