一个简单的SSM框架实例(使用IDEA)

快速搭建SSM项目

开发环境:jdk1.8、服务器Tomcat8、项目管理工具apache-maven-3.6.0、MySQL数据库

1、新建项目:

选择【Maven】,勾选【Create from archetype】,选择【maven-archetype-webapp】  (可以选择jdk),具体如下图:

填写【GroupId】和【ArtifactId】等信息,具体如下图:

在【Maven home directory】中选择Maven的安装路径,在【User settings】和【Local repository】中选择Maven的配置文件和仓库的位置(尽量不要使用默认的位置,因为它是放在C盘,需要在Maven文件夹中创建一个文件夹repository),在【Properties】属性列表中添加属性名name:archetypeCatalog,Value:internal,具体如下图:

点击【Finish】,如下图:

创建完成后,在/src/main目录下创建java和resource目录,将java标记为Sources Root、resource标记为Resources Root,具体如下:

2、集成Spring

在pom文件中添加Spring相关的依赖,具体代码如下:

  <properties>
    <spring.version>5.0.5.RELEASE</spring.version>
  </properties>

<!--spring start-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
<!--    spring end-->

在/src/main/resources目录下创建applicationContext.xml配置文件,具体代码如下:

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

    <context:component-scan base-package="com"/>
<!-- <context:component-scan/>注解:扫描base-package包或者子包下所有的Java类,并把匹配的Java类注册成Bean。这里我们设置成扫描com包下所有的Java类 -->
</beans>

在web.xml配置文件中添加如下代码:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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_3_0.xsd"
         version="3.0">
<!--<web-app>-->
  <display-name>Archetype Created Web Application</display-name>

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
</web-app>

3、集成Spring MVC框架

在pom.xml添加相关依赖,具体代码如下:

  <properties>
    <javax.servlet.version>4.0.0</javax.servlet.version>
    <jstl.version>1.2</jstl.version>
  </properties>

      <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>

      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>${javax.servlet.version}</version>
      </dependency>

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
      </dependency>
<!--      spring mvc end-->

在web.xml配置文件中添加DispatcherServlet配置,具体代码如下:

DispatcherServlet类:DispatcherServlet是前置控制器,主要用于拦截匹配的请求,拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。

  <!--  配置DispatcherServlet-->
  <servlet>
    <servlet-name>spring-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--    配置SpringMVC需要加载的配置文件spring-mvc.xml-->
    <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>spring-dispatcher</servlet-name>
<!--匹配以.do为后缀的所有请求 --> <url-pattern>*.do</url-pattern> </servlet-mapping>

在/src/main/resources目录下创建配置文件spring-mvc.xml,具体代码如下:

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"

       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/mvc
         http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         ">
<!-- 扫描controller(后端控制器),并且扫描其中的注解 -->
    <context:component-scan base-package="com.controller"/>
<!--    设置配置方案-->
    <!--开启注解-->
    <mvc:annotation-driven/>

<!-- 配置JSP 显示ViewResolver(视图解析器) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

4、集成MyBatis框架

在pom.xml文件中添加相关依赖,具体代码如下:

  <properties>
    <mybatis.version>3.4.6</mybatis.version>
    <mysql.connector.java.version>8.0.9-rc</mysql.connector.java.version>
    <druid.version>1.1.9</druid.version>
    <mybatis.spring.version>1.3.2</mybatis.spring.version>
  </properties>

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>${mysql.connector.java.version}</version>
          <scope>runtime</scope>
      </dependency>
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>${druid.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
      </dependency>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>${mybatis.spring.version}</version>
      </dependency>
<!--      mybatis end-->

在/src/main/resources目录下创建jdbc.properties配置文件,具体代码如下:

#驱动
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
#mysql连接信息
jdbc.url=jdbc:mysql://127.0.0.1:3306/goodsapplydb?serverTimezone=GMT
#goodsapplydb为数据库名称
#用户名
jdbc.username=root
#密码
jdbc.password=123456

在applicationContext.xml配置文件中添加如下配置,具体代码如下:

<!--    1、配置数据库相关参数-->
    <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>
<!--    2、数据源druid-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
<!--    3、配置SqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--        注入数据库连接池-->
        <property name="dataSource" ref="dataSource"/>
<!--        扫描sql配置文件:mapper需要的xml文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
<!--    扫描basePackage下所有以@MyBatisDao注解的接口-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.dao"/>
    </bean>

5、集成Log4j日志框架

在pom.xml中添加相关依赖,具体代码如下:

  <properties>
    <slf4j.version>1.7.7</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>

      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>${log4j.version}</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>${slf4j.version}</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>${slf4j.version}</version>
      </dependency>
<!--      log4j2 end-->

在/src/main/resources目录下创建log4j.properties配置文件,具体代码如下:

#log levels
log4j.rootLogger = DEBUG,Console

#输出到控制台
log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target = System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n

 6、配置服务器

在IDEA开发菜单栏中,选择【run】—>【Edit Configuration】,点击【+】—>【Tomcat Server】—>【Local】,在【Aplication server】中选择Tomcat的安装路径,在【JRE】中选择JDK的安装路径。

 

点击【Deployment】—>【+】—>【Artifact】

 选择 【下图中选择的】

 下图中画红线的地方  删掉(我之前因为没有删掉 就总是报错)

 注意下图画红线的地方,在【Deployment】配置好之后,改变下图中的地方。设置这个的目的是:在修改一些东西之后就只需要在浏览器上面刷新一下就可以了,不需要改一点东西重新运行一下程序。

配置好服务器之后,就可以运行程序了。

结果如下图:

下面开发一个比较复杂的画面,将数据库中的数据查询出来显示在画面上

下图为项目的目录:  注意静态资源文件,如css、js等,最好放在webapp目录下面,之前我是放在WEB-INF下面,最后文件总是获取不到

在model目录下创建数据表的实体类

package com.model;

import java.io.Serializable;

public class goodsApply implements Serializable {
    //属性首字母需小写 否则在JSP画面中获取时,会报错
    private Integer id;
    private String goodsName;
    private String claimant;
    private String applyTime;
    private String unit;
    private Integer quantity;
    private Integer isApply;
    private String comment;

    public Integer getId() {
        return id;
    }

    public String getApplyTime() {
        return applyTime;
    }

    public String getClaimant() {
        return claimant;
    }

    public Integer getIsApply() {
        return isApply;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public String getUnit() {
        return unit;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public String getComment() {
        return comment;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setApplyTime(String applyTime) {
        this.applyTime = applyTime;
    }

    public void setClaimant(String claimant) {
        this.claimant = claimant;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public void setIsApply(Integer isApply) {
        this.isApply = isApply;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }
}

在【dao】目录下创建相应接口,该接口与之后的...mapper.xml文件有关

package com.dao;

import com.model.goodsApply;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface GoodsApplyDao {
    List<goodsApply> findAll();

    int delGoods(@Param("id") int id);

    goodsApply findGoodsById(@Param("id") int id);

    int addGoods(goodsApply goods);

    int updateGoods(goodsApply goods);
}

在【mapper】目录下创建与表相关的mapper文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.GoodsApplyDao">

    <sql id="goodsApplyField">
        ${prefix}.id as "id",
        ${prefix}.goodsName as "goodsName",
        ${prefix}.claimant as "claimant",
        ${prefix}.applyTime as "applyTime",
        ${prefix}.unit as "unit",
        ${prefix}.quantity as "quantity",
        ${prefix}.isApply as "isApply",
        ${prefix}.comment as "comment"
    </sql>
<!--    获取所有物品申请记录-->
    <resultMap id="goodsApplyMap" type="com.model.goodsApply">
        <id property="id" column="id"/>
        <id property="goodsName" column="goodsName"/>
        <id property="claimant" column="claimant"/>
        <id property="applyTime" column="applyTime"/>
        <id property="unit" column="unit"/>
        <id property="quantity" column="quantity"/>
        <id property="isApply" column="isApply"/>
        <id property="comment" column="comment"/>
    </resultMap>
<!-- 下面的id与dao文件中的方法名称相同 --> <select id="findAll" resultMap="goodsApplyMap"> select <include refid="goodsApplyField"> <property name="prefix" value="a"/> </include> from goodsApplyTb as a </select>
<!-- 根据id删除一条物品记录--> <delete id="delGoods" parameterType="int"> delete from goodsApplyTb where id=#{id} </delete> <!-- 根据id查询一条物品记录--> <select id="findGoodsById" resultMap="goodsApplyMap" parameterType="int"> select <include refid="goodsApplyField"> <property name="prefix" value="a"/> </include> from goodsApplyTb as a where id=#{id} </select> <!-- 新增一条记录--> <insert id="addGoods" useGeneratedKeys="true" keyProperty="id" parameterType="com.model.goodsApply"> insert into goodsApplyTb(goodsName,claimant,applyTime,unit,quantity,isApply,comment) value(#{goodsName},#{claimant},#{applyTime},#{unit},#{quantity},#{isApply},#{comment}) </insert> <!-- 修改一条记录--> <update id="updateGoods" parameterType="com.model.goodsApply"> update goodsApplyTb set goodsName=#{goodsName}, claimant=#{claimant}, applyTime=#{applyTime}, unit=#{unit}, quantity=#{quantity}, isApply=#{isApply}, comment=#{comment} where id=#{id} </update> </mapper>

在【service】目录下创建相应的接口

package com.service;

import com.model.goodsApply;

import java.util.List;

public interface GoodsApplyService {
    List<goodsApply> findAll();

    int delGoods(int id);

    goodsApply findGoodsById(int id);

    int addGoods(goodsApply goods);

    int updateGoods(goodsApply goods);
}

在【impl】目录下创建相应的service接口的实现类

package com.service.impl;

import com.dao.GoodsApplyDao;
import com.model.goodsApply;
import com.service.GoodsApplyService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class GoodsApplyServiceImpl implements GoodsApplyService {

    @Resource
    private GoodsApplyDao goodsApplyDao;

    public List<goodsApply> findAll(){
        return goodsApplyDao.findAll();
    }

    public int delGoods(int id){
        return goodsApplyDao.delGoods(id);
    }

    public goodsApply findGoodsById(int id){
        return goodsApplyDao.findGoodsById(id);
    }

    public int addGoods(goodsApply goods){
        return goodsApplyDao.addGoods(goods);
    }

    public int updateGoods(goodsApply goods){
        return goodsApplyDao.updateGoods(goods);
    }
}

在【controller】目录下创建controlle类

import com.model.goodsApply;
import com.service.GoodsApplyService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

import static java.lang.Integer.parseInt;

@Controller
public class GoodsApplyController {

    @Resource
    private GoodsApplyService goodsApplyService;

    @GetMapping("/goodsList.do")
    public ModelAndView findAll(){
        List<goodsApply> goodsApplyList=goodsApplyService.findAll();
        // for (goodsApply goods : goodsApplyList) {
        //     System.out.println(goods.getClaimant()+"申请了"+goods.getGoodsName());
        // }
        ModelAndView mv = new ModelAndView();
        mv.addObject("goodsApplyList",goodsApplyList);
//将查询到的数据返回到画面
mv.setViewName("goodsList"); return mv; } }

下面是相应的jsp画面

在index.jsp中直接跳转到goodsList.jsp画面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
<%
String path = request.getContextPath();
// http://localhost:8080
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML>
<html>
<head>
    <base href="<%=basePath%>">
    <script type="text/javascript">
        window.location = "<%=basePath%>goodsList.do";
    </script>
</head>
<body>
<h2>Hello World!</h2>
</body>
</html>

下面为goodsList.jsp画面

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.model.goodsApply" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<%--    <base href="<%=basePath%>">--%>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>物品申请</title>
    <link rel="stylesheet" href="<%=path%>/css/goodsList.css">
    <link href="<%=path%>/css/jquery-confirm.min.css" rel="stylesheet">
    <script src="<%=path%>/js/jquery.min.js" type="text/javascript"></script>
    <script src="<%=path%>/js/jquery-confirm.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        //删除操作
        function del(obj) {
            $('.delete').confirm({
                title: '提示!',
                content: '您确定要删除这条数据?',
                type:'green',
                buttons: {
                    确定: function () {
                        var id = $(obj).attr("rel");
                        window.location = "<%=basePath%>goodsDel.do?id=" + id;
                    },
                    取消: function () {
                        // $.alert('取消!');
                    }
                }
            });
        }
        // 跳转新增页面
        function addGoods() {
            window.location="<%=basePath%>addGoods.do";
        }
        // 修改记录
        function updateGoods(obj) {
            var id = $(obj).attr("rel");
            window.location = "<%=basePath%>selectGoods.do?id=" + id;
        }
    </script>
</head>
<body>
    <div class="content">
        <div>
            <input type="button"  value="新增" class="button" onclick="addGoods()">
            <input type="hidden" value="${delete_result}" id="del_result">
            <input type="hidden" value="${insert_result}" id="ins_result">
            <input type="hidden" value="${update_result}" id="upd_result">
        </div>
        <table id="goodsContent">
            <thead>
                <tr>
                    <th class="table-goodsname">物品名称</th>
                    <th class="table-claimant">申领人</th>
                    <th class="table-applyTime">申领时间</th>
                    <th class="table-unit">单位</th>
                    <th class="table-quantity">数量</th>
                    <th class="table-isApply">已领</th>
                    <th class="table-operate">操作</th>
                </tr>
            </thead>
            <tbody>
                <c:if test="${empty goodsApplyList}">
                    <tr>
                        <td colspan="7" style="color: red"><b>没有数据!</b></td>
                    </tr>
                </c:if>
                <c:forEach var="goodsApply" items="${goodsApplyList}">
                    <tr>
                        <td>${goodsApply.goodsName}</td>
                        <td>${goodsApply.claimant}</td>
                        <td>${goodsApply.applyTime}</td>
                        <td>${goodsApply.unit}</td>
                        <td>${goodsApply.quantity}</td>
                        <td id="isApply">${goodsApply.isApply}</td>
                        <td>
                            <input type="hidden" value="${goodsApply.id}" id="goodsId">
                            <a href="javascript:void(0)" class="operate alter" id="update" rel="${goodsApply.id}" onclick="updateGoods(this)">修改</a>
                            <a href="javascript:void(0)" class="operate delete" id="delete" rel="${goodsApply.id}" onclick="del(this)">删除</a>
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </div>
<script type="text/javascript">
    var del_result = $('#del_result').val();
    if(del_result==="success"){
        alert("删除成功!");
    }
    if(del_result==="failed"){
        alert("删除失败!");
    }

    var ins_result=$('#ins_result').val();
    if(ins_result==="success"){
        alert("新增成功!");
    }

    var upd_result = $('#upd_result').val();
    if(upd_result==="success"){
        alert("修改成功!");
    }
    if(upd_result==="failed"){
        alert("修改失败!");
    }

    $(document).ready(function () {
        $('#goodsContent tr').each(function () {
            var isApply=$(this).children('td:eq(5)').text();

            if(isApply==="1"){
                $(this).children('td:eq(5)').html('是');
                // 当已经领用了的,不允许再删除 把删除按钮禁用
                $(this).children('td:eq(6)').find('#delete').css("cursor","default");
                $(this).children('td:eq(6)').find('#delete').css("color","grey");
                $(this).children('td:eq(6)').find('#delete').removeAttr("onclick");
            }
            else {
                $(this).children('td:eq(5)').html('否');
            }
        });
    });

</script>
</body>
</html>

最后还需要改一下web.xml文件。

<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_3_0.xsd"
         version="3.0">
<!--<web-app>-->
<!--将web-app改为上面的-->

如果不改,会是下图这种情况

程序运行结果如下图

该程序还有新增、修改以及删除功能,具体可以下载全部程序查看

https://pan.baidu.com/s/15Jjrd4P6oWpa9gRLm2XLiQ

猜你喜欢

转载自www.cnblogs.com/209yin/p/11374216.html