Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
能看到这篇文章的小伙伴,详细你已经有一定的Java功能,并且对SSM组件已经有一定的了解啦。上次我分享过一篇关于“SSM之Spring和Mybatis整合案例”,这次我们需要在上次的基础之上添加前端的支持。本篇博客只是介绍他们的联合用法,并不涉及具体的业务逻辑。但是我们可以通过这个小案例,来嵌套我们实际生产环境中所需要的处理的业务逻辑哟!
一.开发环境介绍
整合SSM使用的是idea开发工具。在进行开发之前,我们需要准备数据库测试数据以及在Windows操作系统下安装WEB服务器(Tomcat)。
1>.添加数据库数据
1 create database yinzhengjie; 2 3 use yinzhengjie; 4 5 create table if not exists users(id int primary key auto_increment,name varchar(20) , age int) ;
2>.安装Tomcat
安装Tomcat的过程极为艰难,直接在网上下载一个安装即可,当然我这里的测试版本大家也可以下载,直接解压即可完成安装操作。我已经下载好了Tomcat绿色版(链接:https://pan.baidu.com/s/1_fTB5tX0JMUtErI-s0_Ofg 密码:bow5)
二.编写MVC框架代码并启动Tomcat服务器
1>.创建模块,添加web project支持
2>.引入Maven依赖
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>cn.org.yinzhengjie</groupId> 8 <artifactId>MySSM</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 12 <dependencies> 13 <dependency> 14 <groupId>junit</groupId> 15 <artifactId>junit</artifactId> 16 <version>4.11</version> 17 </dependency> 18 <dependency> 19 <groupId>org.springframework</groupId> 20 <artifactId>spring-context-support</artifactId> 21 <version>4.3.5.RELEASE</version> 22 </dependency> 23 <dependency> 24 <groupId>org.springframework</groupId> 25 <artifactId>spring-jdbc</artifactId> 26 <version>4.3.5.RELEASE</version> 27 </dependency> 28 <dependency> 29 <groupId>org.mybatis</groupId> 30 <artifactId>mybatis</artifactId> 31 <version>3.2.1</version> 32 </dependency> 33 <dependency> 34 <groupId>org.mybatis</groupId> 35 <artifactId>mybatis-spring</artifactId> 36 <version>1.3.0</version> 37 </dependency> 38 <dependency> 39 <groupId>c3p0</groupId> 40 <artifactId>c3p0</artifactId> 41 <version>0.9.1.2</version> 42 </dependency> 43 <dependency> 44 <groupId>mysql</groupId> 45 <artifactId>mysql-connector-java</artifactId> 46 <version>5.1.17</version> 47 </dependency> 48 <dependency> 49 <groupId>org.aspectj</groupId> 50 <artifactId>aspectjrt</artifactId> 51 <version>1.6.1</version> 52 </dependency> 53 <dependency> 54 <groupId>org.aspectj</groupId> 55 <artifactId>aspectjweaver</artifactId> 56 <version>1.8.10</version> 57 </dependency> 58 <dependency> 59 <groupId>org.springframework</groupId> 60 <artifactId>spring-webmvc</artifactId> 61 <version>4.3.5.RELEASE</version> 62 </dependency> 63 <dependency> 64 <groupId>javax.servlet</groupId> 65 <artifactId>servlet-api</artifactId> 66 <version>2.5</version> 67 </dependency> 68 <dependency> 69 <groupId>jstl</groupId> 70 <artifactId>jstl</artifactId> 71 <version>1.2</version> 72 </dependency> 73 </dependencies> 74 </project>
3>.编写代码
创建包结构如下:
具体代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.dao; 7 8 import java.util.List; 9 10 /** 11 * Basedao,基本dao 12 */ 13 public interface BaseDao<T> { 14 public abstract void insert(T t) ; 15 public abstract void update(T t) ; 16 public abstract void delete(Integer id) ; 17 public abstract T selectOne(Integer id) ; 18 public abstract List<T> selectAll() ; 19 public abstract List<T> selectPage(int offset, int length) ; 20 public abstract int count() ; 21 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.dao.impl; 7 8 import cn.org.yinzhengjie.ssm.dao.BaseDao; 9 import cn.org.yinzhengjie.ssm.domain.User; 10 import org.apache.ibatis.session.RowBounds; 11 import org.apache.ibatis.session.SqlSessionFactory; 12 import org.mybatis.spring.support.SqlSessionDaoSupport; 13 import org.springframework.stereotype.Repository; 14 15 import javax.annotation.Resource; 16 import java.util.List; 17 18 @Repository("userDao") 19 public class UserDaoImpl extends SqlSessionDaoSupport implements BaseDao<User> { 20 21 public void insert(User user) { 22 getSqlSession().insert("users.insert" , user) ; 23 } 24 25 public void update(User user) { 26 getSqlSession().update("users.update", user); 27 } 28 29 public void delete(Integer id) { 30 getSqlSession().delete("users.deleteOne", id); 31 } 32 33 public User selectOne(Integer id) { 34 return getSqlSession().selectOne("users.selectOne", id); 35 } 36 public int count() { 37 return getSqlSession().selectOne("users.selectCount"); 38 } 39 40 public List<User> selectAll() { 41 return getSqlSession().selectList("users.selectAll"); 42 } 43 public List<User> selectPage(int offset ,int length) { 44 return getSqlSession().selectList("users.selectPage" , new RowBounds(offset,length)); 45 } 46 47 @Resource(name="sqlSessionFactory") 48 public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { 49 super.setSqlSessionFactory(sqlSessionFactory); 50 } 51 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.domain; 7 8 public class User { 9 private Integer id; 10 private String name; 11 private int age; 12 13 public Integer getId() { 14 return id; 15 } 16 17 public void setId(Integer id) { 18 this.id = id; 19 } 20 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public int getAge() { 30 return age; 31 } 32 33 public void setAge(int age) { 34 this.age = age; 35 } 36 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.service; 7 8 import java.util.List; 9 10 public interface UserService<T> { 11 public abstract void insert(T t); 12 13 public abstract void update(T t); 14 15 public abstract void delete(Integer id); 16 17 public abstract T selectOne(Integer id); 18 public abstract int selectCount(); 19 20 public abstract List<T> selectAll(); 21 public abstract List<T> selectPage(int offset, int length); 22 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.service.impl; 7 8 import cn.org.yinzhengjie.ssm.dao.BaseDao; 9 import cn.org.yinzhengjie.ssm.domain.User; 10 import cn.org.yinzhengjie.ssm.service.UserService; 11 import org.springframework.stereotype.Service; 12 13 import javax.annotation.Resource; 14 import java.util.List; 15 16 /** 17 * 用户服务实现类 18 */ 19 @Service("userService") 20 public class UserServiceImpl implements UserService<User> { 21 22 @Resource(name="userDao") 23 private BaseDao<User> userDao ; 24 25 public void insert(User user) { 26 userDao.insert(user); 27 } 28 29 public void update(User user) { 30 userDao.update(user); 31 } 32 33 public void delete(Integer id) { 34 userDao.delete(id); 35 } 36 37 public User selectOne(Integer id) { 38 return userDao.selectOne(id); 39 } 40 41 public List<User> selectAll() { 42 return userDao.selectAll(); 43 } 44 45 public List<User> selectPage(int offset , int length) { 46 return userDao.selectPage(offset , length); 47 } 48 49 public int selectCount() { 50 return userDao.count(); 51 } 52 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.web.controller; 7 8 import cn.org.yinzhengjie.ssm.domain.User; 9 import cn.org.yinzhengjie.ssm.service.UserService; 10 import org.springframework.stereotype.Controller; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 13 import javax.annotation.Resource; 14 15 @Controller 16 @RequestMapping("/home") 17 public class HomeController { 18 19 //注入用户Service 20 @Resource(name="userService") 21 private UserService us ; 22 23 @RequestMapping("/m1") 24 public String m1(){ 25 System.out.println("m1"); 26 User u = new User(); 27 u.setName("yinzhengjie"); 28 u.setAge(18); 29 us.insert(u); 30 return "index" ; 31 } 32 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.ssm.web.controller; 7 8 import cn.org.yinzhengjie.ssm.domain.User; 9 import cn.org.yinzhengjie.ssm.service.UserService; 10 import org.springframework.stereotype.Controller; 11 import org.springframework.ui.Model; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMethod; 14 import org.springframework.web.bind.annotation.RequestParam; 15 16 import javax.annotation.Resource; 17 import java.util.List; 18 19 @Controller 20 @RequestMapping("/user") 21 public class UserController { 22 23 @Resource(name="userService") 24 private UserService<User> us ; 25 26 27 public String findAll(Model m){ 28 List<User> list = us.selectAll(); 29 m.addAttribute("list" , list) ; 30 return "user/list" ; 31 } 32 33 @RequestMapping("/list") 34 public String page(Model m , @RequestParam(value = "pno" , defaultValue = "1") int pno){ 35 //每页显示5条记录 36 int records = 5 ; 37 38 //总页数 39 int pages = 1 ; 40 41 //查询总记录数 42 int count = us.selectCount() ; 43 44 if(count % records == 0){ 45 pages = count / records ; 46 } 47 else{ 48 pages = count / records + 1; 49 } 50 51 List<User> list = us.selectPage( (pno-1) * records, records) ; 52 53 m.addAttribute("list" ,list) ; 54 m.addAttribute("pages" , pages) ; 55 return "user/list" ; 56 } 57 58 @RequestMapping("/delete") 59 public String delete(Integer uid) { 60 us.delete(uid); 61 return "redirect:/user/list"; 62 } 63 64 @RequestMapping("/toadd") 65 public String toadd(){ 66 return "user/reg" ; 67 } 68 69 @RequestMapping(value = "/doadd" ,method = RequestMethod.POST) 70 public String doAdd(User user){ 71 us.insert(user); 72 return "redirect:/user/list" ; 73 } 74 75 @RequestMapping(value = "/modify" ,method = RequestMethod.GET) 76 public String modify(Model m ,Integer uid){ 77 User u = us.selectOne(uid) ; 78 m.addAttribute("user" , u) ; 79 return "user/edit" ; 80 } 81 82 @RequestMapping(value = "/update" ,method = RequestMethod.POST) 83 public String update(User u){ 84 us.update(u); 85 return "redirect:/user/list" ; 86 } 87 }
4>.编辑Spring和Mybatis配置文件
文件存放路径如下:
具体代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <?xml version="1.0"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:context="http://www.springframework.org/schema/context" 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-4.3.xsd 9 http://www.springframework.org/schema/aop 10 http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 11 http://www.springframework.org/schema/context 12 http://www.springframework.org/schema/context/spring-context-4.3.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> 15 <context:component-scan base-package="cn.org.yinzhengjie.ssm.service,cn.org.yinzhengjie.ssm.dao" /> 16 <!-- 数据源 --> 17 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 18 <property name="driverClass" value="com.mysql.jdbc.Driver"/> 19 <property name="jdbcUrl" value="jdbc:mysql://localhost:5200/yinzhengjie"/> 20 <property name="user" value="root"/> 21 <property name="password" value="yinzhengjie"/> 22 <property name="maxPoolSize" value="10"/> 23 <property name="minPoolSize" value="2"/> 24 <property name="initialPoolSize" value="3"/> 25 <property name="acquireIncrement" value="2"/> 26 </bean> 27 28 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 29 <property name="dataSource" ref="dataSource"/> 30 <property name="configLocation" value="classpath:mybatis-config.xml"/> 31 </bean> 32 33 <!-- 事务管理器,在servie层面上实现事务管理的。 --> 34 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 35 <property name="dataSource" ref="dataSource" /> 36 </bean> 37 38 <!-- 事务通知 --> 39 <tx:advice id="txAdvicd" transaction-manager="txManager"> 40 <tx:attributes> 41 <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT" /> 42 <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" /> 43 <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" /> 44 <tx:method name="select*" propagation="REQUIRED" isolation="DEFAULT" read-only="true" /> 45 <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" /> 46 </tx:attributes> 47 </tx:advice> 48 49 <aop:config> 50 <aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvicd" /> 51 </aop:config> 52 </beans>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <typeAliases> 7 <typeAlias type="cn.org.yinzhengjie.ssm.domain.User" alias="_User" /> 8 </typeAliases> 9 <mappers> 10 <mapper resource="UserMapper.xml"/> 11 </mappers> 12 </configuration>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <!-- 定义名字空间 --> 5 <mapper namespace="users"> 6 <insert id="insert"> 7 insert into users(name, age) values(#{name}, #{age}) ; 8 </insert> 9 10 <update id="update"> 11 update users set name = #{name} , age = #{age} where id = #{id} 12 </update> 13 14 <delete id="deleteOne"> 15 delete from users where id = #{id} 16 </delete> 17 18 <select id="selectOne" resultType="_User"> 19 select * from users where id = #{id} 20 </select> 21 22 <select id="selectAll" resultType="_User"> 23 select * from users 24 </select> 25 <select id="selectPage" resultType="_User"> 26 select * from users limit #{offset} , #{limit} 27 </select> 28 <select id="selectCount" resultType="int"> 29 select count(*) from users 30 </select> 31 32 </mapper>
5>.配置web文件
配置目录如下:
具体文件内容如下:
【web/user目录】
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 <html> 4 <head> 5 <title>UserList</title> 6 </head> 7 <body> 8 </body> 9 <form action='<c:url value="/user/update"/>' method="post"> 10 <input type="hidden" name="id" value='<c:out value="${user.id}"/>'> 11 username : <input type="text" name="name" value='<c:out value="${user.name}"/>'><br> 12 age : <input type="text" name="age" value='<c:out value="${user.age}"/>'><br> 13 <input type="submit" value="提交"> 14 </form> 15 </html>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 <html> 4 <head> 5 <title>UserList</title> 6 </head> 7 <body> 8 <a href='<c:url value="/user/toadd" />'>添加新用户</a><br> 9 <table border="1px" cellpadding="0px" cellspacing="0px" 10 style="border-collapse: collapse"> 11 <tr> 12 <td>id</td> 13 <td>name</td> 14 <td>age</td> 15 <td>修改</td> 16 <td>删除</td> 17 </tr> 18 <c:forEach items="${list}" var="u"> 19 <tr> 20 <td><c:out value="${u.id}" /></td> 21 <td><c:out value="${u.name}" /></td> 22 <td><c:out value="${u.age}" /></td> 23 <td><a href='<c:url value="/user/modify?uid=${u.id}" />'>修改</a></td> 24 <td><a href='<c:url value="/user/delete?uid=${u.id}" />'>删除</a></td> 25 </tr> 26 </c:forEach> 27 <tr> 28 <td colspan="5" style="text-align: right"> 29 <c:forEach begin="1" end="${pages}" var="i"> 30 <c:if test="${i == param.pno}"> 31 [<c:out value="${i}"/>] 32 </c:if> 33 <c:if test="${i != param.pno}"> 34 <a href='<c:url value="/user/list?pno=${i}" />'><c:out value="${i}"/></a> 35 </c:if> 36 </c:forEach> 37 </td> 38 </tr> 39 40 </table> 41 </body> 42 </html>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 <html> 4 <head> 5 <title>UserList</title> 6 </head> 7 <body> 8 </body> 9 <form action='<c:url value="/user/doadd"/>' method="post"> 10 username : <input type="text" name="name"><br> 11 age : <input type="text" name="age"><br> 12 <input type="submit" value="提交"> 13 </form> 14 </html>
【web/WEB-INF目录】
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/mvc 9 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 12 <!-- 配置扫描路径 --> 13 <context:component-scan base-package="cn.org.yinzhengjie.ssm.web.controller"/> 14 <!-- 使用注解驱动 --> 15 <mvc:annotation-driven/> 16 <!-- 内部资源视图解析器 --> 17 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 18 <property name="prefix" value="/"/> 19 <property name="suffix" value=".jsp"/> 20 </bean> 21 </beans>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 version="3.1"> 6 7 <!-- 通过上下文参数指定配置文件的位置 --> 8 <context-param> 9 <param-name>contextConfigLocation</param-name> 10 <param-value>classpath:beans.xml</param-value> 11 </context-param> 12 13 <!-- 上下文载入器监听器,确保web服务器启动时,加载spring的配置到容器中 --> 14 <listener> 15 <listener-class>org.springframework.web.context.ContextLoaderListener 16 </listener-class> 17 </listener> 18 19 <filter> 20 <filter-name>characterEncodingFilter</filter-name> 21 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 22 <init-param> 23 <param-name>encoding</param-name> 24 <param-value>UTF-8</param-value> 25 </init-param> 26 <init-param> 27 <param-name>forceEncoding</param-name> 28 <param-value>true</param-value> 29 </init-param> 30 </filter> 31 <filter-mapping> 32 <filter-name>characterEncodingFilter</filter-name> 33 <url-pattern>/*</url-pattern> 34 </filter-mapping> 35 36 <servlet> 37 <servlet-name>dispatcher</servlet-name> 38 <servlet-class>org.springframework.web.servlet.DispatcherServlet 39 </servlet-class> 40 </servlet> 41 <servlet-mapping> 42 <servlet-name>dispatcher</servlet-name> 43 <url-pattern>/</url-pattern> 44 </servlet-mapping> 45 </web-app>
【web根目录】
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <!DOCTYPE html> <!--Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档。html这种模式兼容浏览器是最好的--> 3 <html lang="en"> 4 <head name="尹正杰" age="25"> <!--标签的开头,其里面的内容(name="尹正杰")是标签的属性,其属性可以定义多个。--> 5 <meta charset="UTF-8"/> <!--指定页面编码,我们称这种标签类型为自闭和标签,因为我们需要在标签的结尾写上“/”,为了方便我们识别标签类型。--> 6 <meta http-equiv="refresh" content="5; Url=http://www.cnblogs.com/yinzhengjie/"> <!--这是做了一个界面的跳转,表示30s不运行的话就跳转到指定的URL--> 7 <title>尹正杰的个人主页</title> <!--定义头部(标签)的标题--> 8 <meta name="keywords" content="开发者,博客园,开发者,程序猿,程序媛,极客,编程,代码,开源,IT网站,Developer,Programmer,Coder,Geek,技术社区" /> <!--“content”定义关键字,其作用就是让浏览器通过搜索关键字时,会匹配该网站,这就是说如果你没有单独给百度钱的话,这些关键字就尤为重要啦!--> 9 <meta name="description" content="博客园是一个面向开发者的知识分享社区。自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益。博客园的使命是帮助开发者用代码改变世界。" /> <!--定义描述字符,其作用就告诉客户你的这个网站是干嘛使用的。--> 10 <link rel="shortcut icon" href="https://baike.baidu.com/pic/%E9%82%93%E7%B4%AB%E6%A3%8B/6798196/0/d1a20cf431adcbef011db9bba6af2edda3cc9f66?fr=lemma&ct=single#aid=0&pic=d1a20cf431adcbef011db9bba6af2edda3cc9f66" type="image/x-icon" /> <!--定义头部图标--> 11 <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <!--这个是IE的浏览器生效的规则,如果你用的是谷歌,360等浏览器的话,这行规则不生效,如果你用的是IE浏览器的话,表示用IE最新的引擎去渲染HTML--> 12 </head> <!--标签的结尾,结合该标签的开头,这种标签类型我们称之为主动闭合标签。--> 13 <body> 14 <h1>尹正杰</h1><!--定义文件的内容,其中“h1”标签中--> 15 <h2>尹正杰</h2> 16 <h3>尹正杰</h3> 17 <h4>尹正杰</h4> 18 <h5>尹正杰</h5> 19 <h6>尹正杰</h6> 20 <h1>You are a good boy!</h1> 21 <div style="width: 4000px"> <!--是其缩进代码的父级标签,给其定义宽度属性是200像素大小--> 22 <h1>尹正杰</h1><!--块级标签:也叫父级标签,即自己单独占了一行空间,或者说是占它父级标签的100%。作用:定义文件的内容--> 23 <h1>You are a good boy!</h1> 24 </div> <!--div的标签的结尾--> 25 <p>素胚勾勒出青花笔锋浓转淡<br/>瓶身描绘的牡丹一如你初妆<br/>冉冉檀香透过窗心事我了然<br/>宣纸上走笔至此搁一半<br/>釉色渲染仕女图韵味被私藏<br/>而你嫣然的一笑如含苞待放</p> <!--其中<br/>表示换行符的意思,<p></p>表示一个段落的意思。--> 26 <a>yinzhengjie</a> <!--内联标签,以a开头的标签都是内联标签,这些标签的内容时连接在一起的。:--> 27 <a>2017</a> 28 <a href="http://www.cnblogs.com/yinzhengjie/" target="_blank">尹正杰博客</a> <!--a标签特有的性能,重定向,通过href属性定义需要跳转的网站,通过target="_blank"表示新打开一个标签页并打开新的URL地址--> 29 30 <a href="#Y1">Golang第一章</a> <!--a标签特有的性能,做锚,找ID为"Y1"的标签并跳转过去--> 31 <a href="#Y2">Golang第二章</a> <!--找ID为"Y2"的标签--> 32 <a href="#Y3">Golang第三章</a> <!--找ID为"Y3"的标签--> 33 34 35 36 <div id="Y1" style="height:700px;background-color:antiquewhite"> <!--用id来定义标签为"Y1"(一般要具有唯一性,即尽量不要让标签的id的值相同),用style来定义高度为700像素,颜色用background-color来定义。--> 37 Golang进阶之路Day1<br/> 38 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难让我们有点沮丧”。 这一定位暗示了Go语言希望取代C和Java的地位,成为最流行的通用开发语言。博客地址:http://www.cnblogs.com/yinzhengjie/p/6482675.html 39 </div> 40 41 <div id="Y2" style="height:700px;background-color:rebeccapurple;"> 42 <br/>Golang进阶之路Day2<br/> 43 前者大家应该都很熟悉,因为我在上一篇(http://www.cnblogs.com/yinzhengjie/p/6482675.html)关于GO的博客中用"go build"命令编译不同的版本,但是在这里我们还是要演示一下go build的花式用法。博客地址:http://www.cnblogs.com/yinzhengjie/p/7000272.html 44 </div> 45 46 <div id="Y3" style="height:700px;background-color:brown;"> 47 Golang进阶之路Day3<br/> 48 当然我这里只是介绍了Golang的冰山一角,对Golang感兴趣的小伙伴,可以看一下Golang官网的文档说明。毕竟官方才是最权威的,给出国内地址:https://golang.org/pkg/!博客地址:http://www.cnblogs.com/yinzhengjie/p/7043430.html 49 </div> 50 51 <!--功能最少的标签,最纯洁的易于加工的标签,即他们没有“h1”和"a"标签那么多的属性。--> 52 <div>我是块标签</div> 53 <span>我是内联标签</span> 54 55 <!--列表--> 56 <ul> <!--打印字符穿前面带个小黑点--> 57 <li>菜单一</li> 58 <li>菜单二</li> 59 <li>菜单三</li> 60 </ul> 61 62 <ol> <!--打印字符串前面有数字标识--> 63 <li>第一章</li> 64 <li>第二章</li> 65 <li>第三章</li> 66 </ol> 67 68 <ol> 69 <dd>北京</dd> <!--自带缩进,可以用于写新闻的标题--> 70 <dt>朝阳区</dt> 71 <dt>亦庄经济开发区</dt> 72 <dt>丰台区</dt> 73 <dt>海淀区</dt> 74 <dd>河北</dd> 75 <dt>石家庄</dt> 76 <dt>保定</dt> 77 <dd>陕西</dd> 78 <dt>西安</dt> 79 <dt>安康</dt> 80 </ol> 81 82 83 <!--表格--> 84 <table border="1"> <!--定义一个表格,其属性是border="1",表示加边框的意思。--> 85 <thead> <!--定义表头信息--> 86 <tr> <!--'tr'表示定义一行的数据,里面的内容由子标签<th></th>实现--> 87 <th>姓名</th> <!--'th'定义同一行每一列的内容,也就是说只要带有这个标签的且在其父标签"tr"标签中就是写的同一行内容。--> 88 <th>年龄</th> 89 <td>性别</td> 90 </tr> 91 </thead> 92 <tbody> <!--定义表格的内容--> 93 <tr> <!--'tr'表示每一行的数据,其定义的是行的操作。--> 94 <td>尹正杰</td> <!--td用来定义当前行的每一列的内容,与thead中的'th'用法相同。只不过'th’有加粗效果!--> 95 <td>25</td> 96 <td>boy</td> 97 </tr> 98 <tr> <!--'tr'表示每一行的数据--> 99 <td>尹正杰</td> <!--‘<td></td>’标签定义的是列的操作--> 100 <td colspan="2">26</td> <!--注意,'td'标签的colspan属性表示向右占锯的空间,我们给的值是“2”,就表示会从当前列往后在占一个列,共计当前行的两列空间!--> 101 </tr> 102 <tr> <!--'tr'表示每一行的数据--> 103 <td>yinzhengjie</td> <!--‘<td></td>’标签定义的是列的操作--> 104 <td rowspan="2">26</td> <!--注意,'td'标签的rowspan属性表示向下占据的空间,我们这里给的是还是“2”,即从当前行的当前列,向下扩充空一列内容。--> 105 </tr> 106 <tr> <!--'tr'表示每一行的数据--> 107 <td>yinzhengjie</td> <!--‘<td></td>’标签定义的是列的操作--> 108 <td >26</td> <!--表示这个'td'标签占两列的空间--> 109 </tr> 110 </tbody> 111 </table> 112 </body> 113 </html>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>myhtml.html</title> 6 </head> 7 <body> 8 <table border="1px" cellpadding="0px" cellspacing="0px" style="border-collapse: collapse"> 9 <tr> 10 <td>id</td> 11 <td>name</td> 12 <td>age</td> 13 </tr> 14 <tr> 15 <td>1</td> 16 <td>tom</td> 17 <td>12</td> 18 </tr> 19 <tr> 20 <td>2</td> 21 <td>tomas</td> 22 <td>13</td> 23 </tr> 24 </table> 25 <h1>h1标题</h1> 26 <h2>h2标题</h2> 27 <h3>h3标题</h3> 28 <a href="http://www.baidu.com">百度</a><br> 29 <img src="Koala.gif" width="200px" height="100px"> 30 <input action=""> 31 username : <input type="text" name="user_name"><br> 32 password : <input type="password" name="user_pass"><br> 33 confirm : <input type="password" name="user_confirm"><br> 34 nickname : <input type="text" name="user_nickname"><br> 35 sex : <input type="radio" name="user_sex" value="1">男</input> 36 <input type="radio" name="user_sex" value="0">女</input><br> 37 hobby : <input type="checkbox" name="user_hobby" value="0">足球</input> 38 <input type="checkbox" name="user_hobby" value="1">蓝球</input> 39 <input type="checkbox" name="user_hobby" value="2">排球</input><br> 40 民族 : <select multiple="multiple"> 41 <option value="0">汉族</option> 42 <option value="1">满族</option> 43 <option value="2">回族</option> 44 </select> 45 <br> 46 <textarea></textarea> 47 </form> 48 </body> 49 </html>
koala.gif是一张考拉的图片,这个大家可以随意放一张照片上去,如下:
6>.添加Tomcat服务端插件
7>.修改Tomcat的服务器名称
8>.添加开发环境(选中项目名称)
9>.配置Tomcat的相关参数(配置完毕之后需要点击ok确认哟)
10>.给项目添加依赖库
点击OK确认配置成功,如下图:
11>.启动Tomcat服务器
启动成功之后,会自动打开我们设置的浏览器,如下图:
三.通过Web界面实现增删改查
由于我的首页会在5秒之后进行自动跳转,因此咱们的手速得快,我们需要切换到指定的路径中去“/user/list”。
1>.查看数据库信息
2>.通过web界面网数据库里插入数据
添加新用户
添加测试用户:
添加数据成功:
3>.删除数据(我们用上面的方法多添加一些数据信息)
4>.修改数据
将修改的数据进行提交:
查看数据是否修改成功: