Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

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

 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>
pom.xml 文件内容

3>.编写代码

  创建包结构如下:

  具体代码如下:

 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 }
BaseDao.java 文件内容
 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 }
UserDaoImpl.java 文件内容
 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 }
User.java 文件内容
 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 }
UserService.java 文件内容
 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 }
UserServiceImpl.java 文件内容
 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 }
HomeController.java 文件内容
 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 }
UserController.java 文件内容

4>.编辑Spring和Mybatis配置文件

   文件存放路径如下:

  具体代码如下:

 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>
beans.xml 文件内容
 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>
mybatis-config.xml 文件内容
 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>
UserMapper.xml 文件内容

5>.配置web文件

  配置目录如下:

 

  具体文件内容如下:

【web/user目录】

 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>
edit.jsp 文件内容
 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}"/>]&nbsp;&nbsp;
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>&nbsp;&nbsp;
35                 </c:if>
36             </c:forEach>
37         </td>
38     </tr>
39 
40 </table>
41 </body>
42 </html>
list.jsp 文件内容
 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>
reg.jsp 文件内容

【web/WEB-INF目录】

 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>
dispatcher-servlet.xml 文件内容
 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.xml 文件内容

【web根目录】

  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=" 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>
index.jsp 文件内容
 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>
myhtml.html 文件内容(主要是测试HTML标签的代码文件)

koala.gif是一张考拉的图片,这个大家可以随意放一张照片上去,如下:

6>.添加Tomcat服务端插件

7>.修改Tomcat的服务器名称

8>.添加开发环境(选中项目名称)

 

9>.配置Tomcat的相关参数(配置完毕之后需要点击ok确认哟)

10>.给项目添加依赖库

  点击OK确认配置成功,如下图:

11>.启动Tomcat服务器

  启动成功之后,会自动打开我们设置的浏览器,如下图:

三.通过Web界面实现增删改查

  由于我的首页会在5秒之后进行自动跳转,因此咱们的手速得快,我们需要切换到指定的路径中去“/user/list”。

1>.查看数据库信息

 

2>.通过web界面网数据库里插入数据

  添加新用户

  添加测试用户:

   添加数据成功:

3>.删除数据(我们用上面的方法多添加一些数据信息)

 

4>.修改数据

 

  将修改的数据进行提交:

  查看数据是否修改成功:

原文地址:https://www.cnblogs.com/yinzhengjie/p/9300054.html