pom.xml 配置文件
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <groupId>com.xiwi</groupId> 6 <artifactId>ssm</artifactId> 7 <packaging>war</packaging> 8 <version>0.0.1-SNAPSHOT</version> 9 <name>ssm Maven Webapp</name> 10 <url>http://maven.apache.org</url> 11 12 <properties> 13 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 14 <log4j.version>1.2.17</log4j.version> 15 <spring.version>4.3.9.RELEASE</spring.version> 16 <mybatis.version>3.2.2</mybatis.version> 17 </properties> 18 19 <dependencies> 20 21 <!-- spring --> 22 <dependency> 23 <groupId>org.springframework</groupId> 24 <artifactId>spring-aop</artifactId> 25 <version>${spring.version}</version> 26 </dependency> 27 <dependency> 28 <groupId>org.springframework</groupId> 29 <artifactId>spring-aspects</artifactId> 30 <version>${spring.version}</version> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework</groupId> 34 <artifactId>spring-beans</artifactId> 35 <version>${spring.version}</version> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework</groupId> 39 <artifactId>spring-context</artifactId> 40 <version>${spring.version}</version> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework</groupId> 44 <artifactId>spring-context-support</artifactId> 45 <version>${spring.version}</version> 46 </dependency> 47 <dependency> 48 <groupId>org.springframework</groupId> 49 <artifactId>spring-expression</artifactId> 50 <version>${spring.version}</version> 51 </dependency> 52 <dependency> 53 <groupId>org.springframework</groupId> 54 <artifactId>spring-instrument</artifactId> 55 <version>${spring.version}</version> 56 </dependency> 57 <dependency> 58 <groupId>org.springframework</groupId> 59 <artifactId>spring-instrument-tomcat</artifactId> 60 <version>${spring.version}</version> 61 </dependency> 62 <dependency> 63 <groupId>org.springframework</groupId> 64 <artifactId>spring-jdbc</artifactId> 65 <version>${spring.version}</version> 66 </dependency> 67 <dependency> 68 <groupId>org.springframework</groupId> 69 <artifactId>spring-jms</artifactId> 70 <version>${spring.version}</version> 71 </dependency> 72 <dependency> 73 <groupId>org.springframework</groupId> 74 <artifactId>spring-messaging</artifactId> 75 <version>${spring.version}</version> 76 </dependency> 77 <dependency> 78 <groupId>org.springframework</groupId> 79 <artifactId>spring-orm</artifactId> 80 <version>${spring.version}</version> 81 </dependency> 82 <dependency> 83 <groupId>org.springframework</groupId> 84 <artifactId>spring-oxm</artifactId> 85 <version>${spring.version}</version> 86 </dependency> 87 <dependency> 88 <groupId>org.springframework</groupId> 89 <artifactId>spring-test</artifactId> 90 <version>${spring.version}</version> 91 </dependency> 92 <dependency> 93 <groupId>org.springframework</groupId> 94 <artifactId>spring-tx</artifactId> 95 <version>${spring.version}</version> 96 </dependency> 97 <dependency> 98 <groupId>org.springframework</groupId> 99 <artifactId>spring-web</artifactId> 100 <version>${spring.version}</version> 101 </dependency> 102 <dependency> 103 <groupId>org.springframework</groupId> 104 <artifactId>spring-webmvc</artifactId> 105 <version>${spring.version}</version> 106 </dependency> 107 <dependency> 108 <groupId>org.springframework</groupId> 109 <artifactId>spring-webmvc-portlet</artifactId> 110 <version>${spring.version}</version> 111 </dependency> 112 <dependency> 113 <groupId>org.springframework</groupId> 114 <artifactId>spring-websocket</artifactId> 115 <version>${spring.version}</version> 116 </dependency> 117 118 <!-- mybatis --> 119 <dependency> 120 <groupId>org.mybatis</groupId> 121 <artifactId>mybatis</artifactId> 122 <version>${mybatis.version}</version> 123 </dependency> 124 <dependency> 125 <groupId>org.mybatis</groupId> 126 <artifactId>mybatis-spring</artifactId> 127 <version>1.2.2</version> 128 </dependency> 129 130 <!-- 阿里数据库连接池 下载地址http://www.mvnrepository.com/artifact/com.alibaba/druid--> 131 <dependency> 132 <groupId>com.alibaba</groupId> 133 <artifactId>druid</artifactId> 134 <version>1.1.10</version> 135 </dependency> 136 137 <!-- 上传下载 --> 138 <dependency> 139 <groupId>commons-fileupload</groupId> 140 <artifactId>commons-fileupload</artifactId> 141 <version>1.3.1</version> 142 </dependency> 143 <dependency> 144 <groupId>commons-io</groupId> 145 <artifactId>commons-io</artifactId> 146 <version>2.2</version> 147 </dependency> 148 <dependency> 149 <groupId>taglibs</groupId> 150 <artifactId>standard</artifactId> 151 <version>1.1.2</version> 152 </dependency> 153 154 <!-- javax api --> 155 <dependency> 156 <groupId>javax</groupId> 157 <artifactId>javaee-api</artifactId> 158 <version>8.0</version> 159 <scope>provided</scope> 160 </dependency> 161 <dependency> 162 <groupId>javax</groupId> 163 <artifactId>javaee-web-api</artifactId> 164 <version>8.0</version> 165 <scope>provided</scope> 166 </dependency> 167 168 <!-- https://mvnrepository.com/artifact/org.json/json --> 169 <dependency> 170 <groupId>org.json</groupId> 171 <artifactId>json</artifactId> 172 <version>20180813</version> 173 </dependency> 174 175 176 <dependency> 177 <groupId>javax.servlet</groupId> 178 <artifactId>jstl</artifactId> 179 <version>1.2</version> 180 </dependency> 181 182 <dependency> 183 <groupId>mysql</groupId> 184 <artifactId>mysql-connector-java</artifactId> 185 <version>5.1.41</version> 186 </dependency> 187 188 </dependencies> 189 190 191 <build> 192 <finalName>ssm</finalName> 193 <plugins> 194 195 <plugin> 196 <groupId>org.apache.maven.plugins</groupId> 197 <artifactId>maven-compiler-plugin</artifactId> 198 <configuration> 199 <source>1.8</source> 200 <target>1.8</target> 201 </configuration> 202 </plugin> 203 204 <!-- jetty插件 不需要可移除 --> 205 <plugin> 206 <groupId>org.eclipse.jetty</groupId> 207 <artifactId>jetty-maven-plugin</artifactId> 208 <version>9.3.7.v20160115</version> 209 </plugin> 210 211 </plugins> 212 </build> 213 214 215 </project>
Web.xml 配置文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 6 version="3.0"> 7 8 <welcome-file-list> 9 <welcome-file>index.jsp</welcome-file> 10 </welcome-file-list> 11 12 <!-- 监听配置 --> 13 <listener> 14 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 15 </listener> 16 17 <!-- 加载Spring以及Mybatis配置 以下 *星号 是做了通配处理 --> 18 <context-param> 19 <param-name>contextConfigLocation</param-name> 20 <param-value>/WEB-INF/configs/spring-mvc*.xml</param-value> 21 </context-param> 22 23 <!-- 也可使用多个 context-param标签 24 <context-param> 25 <param-name>contextConfigLocation</param-name> 26 <param-value>classpath:/spring-mvc.xml</param-value> 27 </context-param> 28 <context-param> 29 <param-name>contextConfigLocation</param-name> 30 <param-value>classpath:/spring-mybatis.xml</param-value> 31 </context-param> 32 --> 33 34 35 <!-- 配置文件加载 --> 36 <servlet> 37 <servlet-name>dispatcherServlet</servlet-name> 38 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 39 <init-param> 40 <param-name>contextConfigLocation</param-name> 41 <param-value>/WEB-INF/configs/spring/spring-*.xml</param-value> 42 </init-param> 43 <load-on-startup>1</load-on-startup> 44 </servlet> 45 46 <!-- 拦截请求 /斜杠代表全部 也可以换成 .do代表所有 .do的请求都会被Spring拦截器拦截 --> 47 <servlet-mapping> 48 <servlet-name>dispatcherServlet</servlet-name> 49 <url-pattern>/</url-pattern> 50 </servlet-mapping> 51 52 <!-- 编码过滤器 --> 53 <filter> 54 <filter-name>characterEncoding</filter-name> 55 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 56 <init-param> 57 <param-name>encoding</param-name> 58 <param-value>UTF-8</param-value> 59 </init-param> 60 </filter> 61 <filter-mapping> 62 <filter-name>characterEncoding</filter-name> 63 <url-pattern>/*</url-pattern> 64 </filter-mapping> 65 66 </web-app>
基于 web.xml 配置文件 项目的配置文件位置如下:
spring-mvc.xml 配置文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/mvc 12 http://www.springframework.org/schema/mvc/spring-mvc.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx.xsd 15 "> 16 17 <context:component-scan base-package="com.xiwi.controller"/> 18 <context:component-scan base-package="com.xiwi.service"/> 19 <context:component-scan base-package="com.xiwi.dao"/> 20 21 <mvc:annotation-driven> 22 <!-- 消息转换器 --> 23 <mvc:message-converters register-defaults="true"> 24 <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 25 <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/> 26 </bean> 27 </mvc:message-converters> 28 </mvc:annotation-driven> 29 30 <mvc:default-servlet-handler/> 31 32 33 34 <!-- 对静态资源文件的访问 --> 35 <mvc:resources mapping="/resources/**" location="/resources1/" /> 36 37 <!-- 返回视图 --> 38 <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 39 <property name="prefix" value="/WEB-INF/jsp/"></property> 40 <property name="suffix" value=".jsp"></property> 41 </bean> 42 43 </beans>
spring-mybatis.xml 配置文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:aop="http://www.springframework.org/schema/aop" 7 xmlns:tx="http://www.springframework.org/schema/tx" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context.xsd 12 http://www.springframework.org/schema/aop 13 http://www.springframework.org/schema/aop/spring-aop.xsd 14 http://www.springframework.org/schema/tx 15 http://www.springframework.org/schema/tx/spring-tx.xsd"> 16 17 <!-- 加载数据库配置 --> 18 <context:property-placeholder location="/WEB-INF/configs/mybatis/database.properties"/> 19 20 <!-- 创建数据库,jdbc --> 21 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> 22 <!-- 连接驱动 --> 23 <property name="driverClassName" value="${driverClass}"/> 24 <property name="url" value="${jdbcUrl}"/> 25 <property name="username" value="${user}"/> 26 <property name="password" value="${password}"/> 27 </bean> 28 29 <!-- 配置jdbc的事物 --> 30 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 31 <property name="dataSource" ref="dataSource"></property> 32 </bean> 33 34 <!-- 将配置好的事物加到驱动 :: 指定事务管理器 --> 35 <tx:annotation-driven transaction-manager="transactionManager"/> 36 37 <!-- 获取sqlSessionFactory--> 38 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 39 <property name="dataSource" ref="dataSource" /> 40 <!-- 此处直接指向指定的mapping文件, *表示匹配所有 --> 41 <property name="mapperLocations" value="classpath:com/xiwi/dao/*.xml"></property> 42 </bean> 43 44 45 <!-- 将指定包下面的map与mapping文件进行绑定 --> 46 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 47 <property name="basePackage" value="com.xiwi.dao"></property> 48 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 49 </bean> 50 </beans>
database.properties 配置文件

1 user=root 2 password=root 3 driverClass=com.mysql.jdbc.Driver 4 jdbcUrl=jdbc:mysql://127.0.0.1:3306/xiwi?useUnicode=true&characterEncoding=utf8
新建 Controller控制层 (包名必须要跟 "spring-mvc.xml"配置文件下的 context:component-scan标签的 base-package属性 值一样)

1 package com.xiwi.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 6 @Controller 7 public class IndexController { 8 9 @RequestMapping(value= {"/index", "/"}) 10 public String index () { 11 // 浏览器输入 http://localhost:8080/index 或 http://localhost:8080/ 即可访问控制层 12 System.out.println("进入 IndexConreoller !"); 13 return "index"; 14 } 15 16 }
=========================================
访问成功后,以上是我们最基本的 搭好SpringMVC框架,接下来我们来了解如果在SpringMVC中使用 Mybatis框架对数据库进行CURL操作。
=========================================
来一个简单的 登录操作:
在 控制层 包下 新建一个 UserController.java (此时我们控制层包名为:com.xiwi.controller 可自行修改 也要修改spring-mvc.xml文件)

1 package com.xiwi.controller; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpSession; 8 9 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.stereotype.Controller; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMethod; 13 import org.springframework.web.bind.annotation.ResponseBody; 14 15 import com.xiwi.entity.User; 16 import com.xiwi.service.UserService; 17 import com.xiwi.utils.JsonUtil; 18 19 @Controller 20 public class UserController { 21 @Autowired 22 private UserService userService; 23 24 @RequestMapping(value="/login", method=RequestMethod.GET) 25 public String login(HttpServletRequest request) { return "login"; } 26 @RequestMapping(value="/login", method=RequestMethod.POST) 27 @ResponseBody 28 public Object login(HttpSession session, User u) { 29 30 System.out.println("登录的账号信息: " + u.toString()); 31 32 String user = u.getUser(); 33 String pwd = u.getPwd(); 34 35 System.out.println("user: " + user); 36 System.out.println("pwd: " + pwd); 37 38 if (user==null || user.equals("") || pwd==null || pwd.equals("")) { 39 // 用户名 或 密码不得为空 40 return new JsonUtil().json(-1, "参数不得为空!").toString(); 41 } 42 43 // 验证用户 44 User result = userService.verify(u); 45 if (result!=null) { 46 // 存在账户 并且 账号密码正确 47 System.out.println("u.getId:" + result.getId()); 48 System.out.println("u: " + result.toString()); 49 session.setAttribute("userId", result.getId()); 50 return new JsonUtil().json(1, "登录成功!").toString(); 51 } else { 52 // 用户名或密码错误 53 return new JsonUtil().json(0, "用户名或密码错误!").toString(); 54 } 55 } 56 @RequestMapping(value="/outLogin", method=RequestMethod.GET) 57 public String outLogin(HttpSession session) { 58 session.removeAttribute("uid"); 59 return "redirect:/login"; 60 } 61 62 63 64 65 @RequestMapping(value="/user", method=RequestMethod.GET) 66 public String user(HttpSession session) { 67 68 if (!isLoginn(session)) { 69 // 未登录 70 System.out.println("user 未登录 已重定向 login页面"); 71 return "redirect:/login"; 72 } 73 74 return "user"; 75 } 76 77 private boolean isLoginn(HttpSession session) { 78 String uid = (String)session.getAttribute("userId"); 79 if (uid == null) { 80 return false; 81 } else { 82 return true; 83 } 84 } 85 86 }
新建 service服务层 (此时,我们的service包名为:com.xiwi.service )
在 服务层 包下 新建 UserService.java

1 package com.xiwi.service; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import com.xiwi.dao.UserDao; 9 import com.xiwi.entity.User; 10 11 @Service 12 public class UserService { 13 14 @Autowired(required=false) 15 private UserDao userDao; 16 17 // 登录 18 public User verify (User user){ 19 User u = userDao.findUser(user.getUser(), user.getPwd()); 20 if (u!=null) { 21 return u; 22 } else { 23 return null; 24 } 25 } 26 27 }
新建 Dao数据层 (此时,我们的Dao包名为:com.xiwi.dao )
在 数据层 包下 新建 UserDao.java
package com.xiwi.dao; import com.xiwi.entity.User; // 此时 Dao层的 类类型全部为 interface public interface UserDao { // 根据 用户名,密码 查询用户 public User findUser(@Param("user")String user, @Param("pwd")String pwd); }
新建 实体层 (此时,我们的实体层包名为:com.xiwi.entity )
新建 实体类 User.java (实体层到底是什么意思呢? 通俗点理解就是 里面都是放了 数据库的各各表。而 实体类 就是一个表里面有哪些字段)

1 package com.xiwi.entity; 2 3 public class User { 4 5 private String Id; 6 private String user; 7 private String pwd; 8 private String code_pwd; 9 private String name; 10 private String type; 11 private String create_time; 12 13 public User() {} 14 public User(String id, String user, String pwd, String code_pwd, String name, String type, String create_time) { 15 super(); 16 Id = id; 17 this.user = user; 18 this.pwd = pwd; 19 this.code_pwd = code_pwd; 20 this.name = name; 21 this.type = type; 22 this.create_time = create_time; 23 } 24 25 public String getId() { 26 return Id; 27 } 28 public void setId(String id) { 29 Id = id; 30 } 31 public String getUser() { 32 return user; 33 } 34 public void setUser(String user) { 35 this.user = user; 36 } 37 public String getPwd() { 38 return pwd; 39 } 40 public void setPwd(String pwd) { 41 this.pwd = pwd; 42 } 43 public String getCode_pwd() { 44 return code_pwd; 45 } 46 public void setCode_pwd(String code_pwd) { 47 this.code_pwd = code_pwd; 48 } 49 public String getName() { 50 return name; 51 } 52 public void setName(String name) { 53 this.name = name; 54 } 55 public String getType() { 56 return type; 57 } 58 public void setType(String type) { 59 this.type = type; 60 } 61 public String getCreate_time() { 62 return create_time; 63 } 64 public void setCreate_time(String create_time) { 65 this.create_time = create_time; 66 } 67 68 @Override 69 public String toString() { 70 return "User [Id=" + Id + ", user=" + user + ", pwd=" + pwd + ", code_pwd=" + code_pwd + ", name=" + name 71 + ", type=" + type + ", create_time=" + create_time + "]"; 72 } 73 }
在 Dao数据层下 也就是 上面刚创建 UserDao.java 同级目录下 新建一个 UserMapper.xml (这是Mybatis要操作数据库需要的配置文件 详细路径更改 需在 spring-mybatis.xml 文件中修改)

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 7 注意:使用mapper代理方法开发,namespace有特殊重要的作用 8 --> 9 <mapper namespace="com.xiwi.dao.UserDao"> 10 11 <sql id="fields">Id,user,pwd,code_pwd,name,type,create_time</sql> 12 13 <!-- 根据 user,pwd 查询用户 --> 14 <select id="findUser" parameterType="String" resultType="com.xiwi.entity.User"> 15 SELECT <include refid="fields"></include> FROM user WHERE 16 user = #{user} 17 AND 18 pwd = #{pwd} 19 LIMIT 1; 20 </select> 21 </mapper>
此时,我们的项目目录如下:
后端我们已经编写完毕,接下来编写一下前端代码。
login.jsp前端代码

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>login</title> 8 <script type="text/javascript" src="/resources/js/jquery.js"></script> 9 </head> 10 <body> 11 12 <table> 13 <tr> 14 <td>用户名: </td> 15 <td><input type="text" name="user"></td> 16 </tr> 17 <tr> 18 <td>密码: </td> 19 <td><input type="password" name="pwd"></td> 20 </tr> 21 <tr> 22 <td><button class="reg_but">注册</button></td> 23 <td><button class="ok_but">提交</button></td> 24 </tr> 25 </table> 26 27 </body> 28 29 <script type="text/javascript"> 30 31 $('.reg_but').click(function(){ 32 window.location.href = '/register'; 33 }); 34 35 // 提交 按钮 36 $('.ok_but').click(function(){ 37 var user = $("input[name='user']").val().trim(); 38 var pwd = $("input[name='pwd']").val().trim(); 39 console.log(user); 40 console.log(pwd); 41 42 if (user=='' || pwd=='') { 43 alert('参数不得为空!'); 44 } else { 45 46 // 因为我们后端是用 User类类型来接收参数,所以我们请求参数的时候需要和 实习类User 的成员变量名一致 47 $.ajax({ 48 url : '/login', 49 type: 'POST', 50 data: { 51 user: user, 52 pwd: pwd 53 }, 54 success: function(data){ 55 data = jQuery.parseJSON(data); 56 console.log('data: ' + data); 57 console.log('code: ' + data.code) 58 if (data.code == 1) { 59 // 登录成功 60 window.location.href='/user'; 61 } else { 62 alert(data.msg); 63 } 64 }, 65 error: function(error){ 66 console.log(error); 67 } 68 }); 69 70 } 71 72 73 74 }); 75 76 </script> 77 78 </html>
接下 访问 login.jsp 页面 输入账号密码 然后登录 即可访问 user.jsp 页面了 (user.jsp 前端代码并不需要编写什么判断是否登录,该判断的东西 我们都在 Controller控制层 做判断操作了 )