一、创建项目
1、创建一个Maven项目
.
1.1 打开eclipse,选择new ===》 project,之后选择如下图中的Maven Project。
1.2 之后出现,如下图,可以按照图中配置。
1.3 选择Next 进入下一步,填写初始项目的一些信息,如下图。
注意:
Packaging选择打成war包了。至于Group Id等信息,按照需求自己填写。
选择Finish,此时一个项目基本上就创建好了。
1.4 生成web.xml文件,此文件的作用主要是用来初始化配置信息,比如Welcome页面(前后端分离开发可能就用不上了)、servlet和servlet-mapping、filter(过滤器配置信息)、listener(监听器配置)、启动加载级别等,web.xml具体配置会在下方有详细介绍,此步只是生成一个web.xml文件,如下图。
注意:
将新建的项目文件夹展开,按照上图操作,就会在src/main/webapp/WEB-ING文件下生成一个web.xml文件。
1.5 配置项目的运行环境,这里采用的tomcat,具体操作如下图
右键单击项目,选择Properties,之后如下图。
若tomcat不存在,请自行下载,并在eclipse中添加tomcat,在这里此处步骤就不详细介绍了。
1.6 此时,项目就可在放到tomcat上启动了,具体步骤如下图。
按照上图步骤操作,会出现一个弹窗,让你选择tomcat,直接单击Next,出现如下图。
选中Available列表下的项目(新建的项目名称),单击Add,即可将你新建的项目加入Configured列表下,若Configured列表下有其它的项目最后给Remove掉,省的tomcat启动异常。之后点击Finish,项目也就在tomcat上启动了。
注意:
查看console(控制台)是否有报错。下图是启动成功图片,可以作为参考。
二 . 增加配置文件,引入jar依赖
.
2.1 本项目目录结构如下图
2.2 pom.xml文件如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.github.linpn</groupId>
<artifactId>ibatis</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-ibatis</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--@Data注解依赖,省去大量的get和set-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
<!--解决@ResponseBody 返回对象异常而添加的依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.4</version>
</dependency>
</dependencies>
2.3 web.xml文件配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>ssi-project</display-name>
<!--欢迎界面配置,此次暂时没有用到,可以删掉。-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--配置加载spring-dao.xml文件的监听器,当容器启动时自动加载spring-dao.xml文件-->
<!--spring-dao.xml文件主要配置集成ibatis一些配置信息,包括数据库源的配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-dao.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置的中文过滤器,解决中文乱码问题 -->
<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-mvc.xml文件 -->
<servlet>
<servlet-name>dispatcherServlet</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>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
2.4 spring-mvc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" >
<!--配置扫描的基础路径-->
<context:component-scan base-package="demo"/>
<mvc:annotation-driven />
</beans>
2.5 spring-dao.cml文件
<?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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" >
<!--将配置数据库连接信息的文件引入到数据库连接池中-->
<util:properties location="classpath:jdbc.properties" id="dbconf" />
<!--提供好的数据库链接池类 -->
<bean id="dataSource"
class=" org.apache.commons.dbcp.BasicDataSource">
<property value="#{dbconf.driverClassName}"
name="driverClassName" />
<property value="#{dbconf.url}" name="url" />
<property value="#{dbconf.username}" name="username" />
<property value="#{dbconf.password}" name="password" />
</bean>
<!-- 配置SqlMapClient对象 -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 根据sqlMapClien创建一个SqlMapClient模版类 -->
<bean id="sqlMapClientTemplate"
class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
</beans>
2.6 jdbc.properties文件
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/ssi?useUnicode=true&characterEncoding=utf-8
username = root
password = root
2.7 sqlMapConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- 配置settings -->
<settings lazyLoadingEnabled="true" useStatementNamespaces="false"/>
<!-- 配置sql映射文件 -->
<sqlMap resource="sqlMap/UserLoginSqlMap.xml"/>
</sqlMapConfig>
此时,spring-mvc集成ibatis的配置文件基本已经完成,下列就是本次demo的测试代码了。
2.8 首先在resources文件夹创建sqlMap文件夹,之后创建UserLoginSqlMap.xml文件,进行书写sql,具体如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="user_login" >
<select id="selectUserInfoByUserName" resultClass="demo.dto.UserInfoDTO" parameterClass="java.lang.String">
SELECT
user_name userName,password password,nick_name nickName,real_name realName
FROM
user
WHERE
is_delete='0'
AND
user_name =#username#
LIMIT 1;
</select>
</sqlMap>
2.9 DTO创建
UserInfoDTO实现:
package demo.dto;
import lombok.Data;
@Data
public class UserInfoDTO {
//用户名
private String userName;
//密码
private String password;
//真实姓名
private String realName;
//昵称
private String nickName;
}
2.10 创建Dao层代码,具体如下
DAO层接口:
package demo.dao;
import java.util.List;
import demo.dto.UserInfoDTO;
public interface IUserLoginDao {
UserInfoDTO selectUserInfoByUserName(String userName);
}
DAO层实现类:
package demo.dao.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import demo.common.BaseMapper;
import demo.dao.IUserLoginDao;
import demo.dto.UserInfoDTO;
@Repository
public class UserLoginDaoImpl extends BaseMapper implements IUserLoginDao {
public UserInfoDTO selectUserInfoByUserName(String userName) {
// TODO Auto-generated method stub
return this.getSqlMapClientTemplate().queryForObject("selectUserInfoByUserName",userName);
}
}
BaseMapper类的实现:
package demo.common;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.sqlmap.client.SqlMapClient;
import lombok.Data;
public class BaseMapper extends SqlMapClientDaoSupport {
@Resource(name="sqlMapClient")
private SqlMapClient sqlMapClient;
@PostConstruct
public void initSqlMapClient(){
super.setSqlMapClient(sqlMapClient);
}
}
2.11 service层代码如下
service接口:
package demo.service;
import java.util.List;
import demo.dto.UserInfoDTO;
public interface IUserLoginService {
UserInfoDTO toLogin(String userName,String password);
}
service接口实现类:
package demo.service.Impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import demo.dao.IUserLoginDao;
import demo.dto.UserInfoDTO;
import demo.exception.ServiceException;
import demo.service.IUserLoginService;
@Service
public class UserLoginServiceImpl implements IUserLoginService{
@Autowired
private IUserLoginDao userLoginDao;
public UserInfoDTO toLogin(String userName, String password) {
UserInfoDTO userInfoDTO = null;
try {
userInfoDTO = userLoginDao.selectUserInfoByUserName(userName);
}catch(Exception e) {
}
if(null ==userInfoDTO) {
throw new ServiceException("001","用户不存在!");
}
if(!password.equals(userInfoDTO.getPassword())) {
throw new ServiceException("002","密码错误!");
}
return userInfoDTO;
}
}
2.12 自定义运行时异常
ServiceException实现:
package demo.exception;
public class ServiceException extends RuntimeException {
private String errCode ;
public ServiceException(String errCode, String message){
super(message);
this.errCode = errCode ;
}
public String getErrCode() {
return errCode;
}
}
2.13 controller代码如下
UserLoginController实现:
package demo.controller;
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.bind.annotation.ResponseBody;
import demo.common.ResponseBaseDTO;
import demo.dto.UserInfoDTO;
import demo.exception.ServiceException;
import demo.service.IUserLoginService;
@Controller
public class UserLoginController {
@Autowired
private IUserLoginService userLoginService;
@RequestMapping("/user/login")
@ResponseBody
public ResponseBaseDTO login(String userName,String password) {
UserInfoDTO userInfoDTO = new UserInfoDTO();
try {
if(null == userName) {
throw new ServiceException("003","请输入用户名!");
}
if(null == password ) {
throw new ServiceException("003","请输入密码!");
}
userInfoDTO = userLoginService.toLogin(userName, password);
}catch(ServiceException se) {
return ResponseBaseDTO.fail(se.getMessage());
}catch(Exception e) {
return ResponseBaseDTO.fail("网络异常!");
}
return ResponseBaseDTO.success(userInfoDTO);
}
}
2.14 基础的返回类型如下
ResponseBaseDTO实现:
package demo.common;
import lombok.Data;
@Data
public class ResponseBaseDTO {
private String cole;
private String message;
private Object data;
public static ResponseBaseDTO success(Object data) {
ResponseBaseDTO base = new ResponseBaseDTO();
base.setCole("1");
base.setMessage("");
base.setData(data);
return base;
}
public static ResponseBaseDTO fail(String message) {
ResponseBaseDTO base = new ResponseBaseDTO();
base.setCole("0");
base.setMessage(message);
return base;
}
}
2.15 创建数据库和用户表
数据库名为:ssi(若更改,请在jdbc.properties文件下的url等号后中ssi改成相应的库名)
建表语句:
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`real_name` varchar(255) DEFAULT NULL COMMENT '真实姓名',
`nick_name` varchar(255) DEFAULT NULL COMMENT '昵称',
`is_delete` varchar(1) DEFAULT NULL COMMENT '删除位 0:未删除 1:已经删除',
`create_date` datetime DEFAULT NULL,
`create_user` varchar(255) DEFAULT NULL,
`modify_date` datetime DEFAULT NULL,
`modify_user` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
此时一个简单登陆demo就已经实现了,接下来就可以进行测试了,由于此次demo并没有写页面,所以就用PostMan来测试接口
三.测试
3.1 启动项目,具体步骤请看上面1.6
3.2 项目启动成功,打开PostMan测试,具体如下
在<1>中 填写请求路径,请求路径为:
http://ip地址(本机127.0.0.1或如图):端口号(tomcat默认为8080,图中进行修改为8090)/项目名称(ssi-project)/controller中@RequestMapping里填写的uri参数?请求参数,多个用&分隔
在<2>中填写请求头信息Content-Type信息。
单击<3>中单击Send按钮,就会在Body中收到响应的信息。
此时就代表一个简单的登陆接口已经实现,当然这只是一个非常简单的登录demo,也只能作为demo。