基于SSM框架实现的疫情统计系统
- 需求分析
- 登录功能(后台,管理员)
- 数据录入(后台,管理员)
- 数据展示(前台,面向用户,地图、图表、表格)
- 开发环境
- JDK 1.8(运行环境)
- MySQL5.7
- Tomcat8.0
mode层:管理员
package com.ycu.epidemic.bean; public class UserInfo { private Integer userId; private String account; private String password; private String userName; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserInfo{" + "userId=" + userId + ", account='" + account + '\'' + ", password='" + password + '\'' + ", userName='" + userName + '\'' + '}'; } }
Model层省份
package com.ycu.epidemic.bean; public class ProvinceInfo { private Integer provinceId; private String provinceName; private String provincePinYing; public Integer getProvinceId() { return provinceId; } public void setProvinceId(Integer provinceId) { this.provinceId = provinceId; } public String getProvinceName() { return provinceName; } public void setProvinceName(String provinceName) { this.provinceName = provinceName; } public String getProvincePinYing() { return provincePinYing; } public void setProvincePinYing(String provincePinYing) { this.provincePinYing = provincePinYing; } }
model层:疫情信息:确诊,治愈等
package com.ycu.epidemic.bean; import java.util.Date; public class EpidemicInfo { private Integer serialId; private Integer provinceId; private Short dataYear,dataMonth,dataDay; private Integer affirmed,suspected,cured,isolated,dead;//每日疫情数据 private Integer userId; private Date inputDate; public Integer getSerialId() { return serialId; } public void setSerialId(Integer serialId) { this.serialId = serialId; } public Integer getProvinceId() { return provinceId; } public void setProvinceId(Integer provinceId) { this.provinceId = provinceId; } public Short getDataYear(short year) { return dataYear; } public void setDataYear(Short dataYear) { this.dataYear = dataYear; } public Short getDataMonth() { return dataMonth; } public void setDataMonth(Short dataMonth) { this.dataMonth = dataMonth; } public Short getDataDay() { return dataDay; } public void setDataDay(Short dataDay) { this.dataDay = dataDay; } public Integer getAffirmed() { return affirmed; } public void setAffirmed(Integer affirmed) { this.affirmed = affirmed; } public Integer getSuspected() { return suspected; } public void setSuspected(Integer suspected) { this.suspected = suspected; } public Integer getCured() { return cured; } public void setCured(Integer cured) { this.cured = cured; } public Integer getIsolated() { return isolated; } public void setIsolated(Integer isolated) { this.isolated = isolated; } public Integer getDead() { return dead; } public void setDead(Integer dead) { this.dead = dead; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public Date getInputDate() { return inputDate; } public void setInputDate(Date inputDate) { this.inputDate = inputDate; } }
model:累计疫情数据
package com.ycu.epidemic.bean; public class EpidemicDetailInfo extends EpidemicInfo { private String provinceName; //累计的:确诊,疑似。。。 private Integer affirmedTotal,suspectedTotal,curedTotal,isolatedTotal,deadTotal; public String getProvinceName() { return provinceName; } public void setProvinceName(String provinceName) { this.provinceName = provinceName; } public Integer getAffirmedTotal() { return affirmedTotal; } public void setAffirmedTotal(Integer affirmedTotal) { this.affirmedTotal = affirmedTotal; } public Integer getSuspectedTotal() { return suspectedTotal; } public void setSuspectedTotal(Integer suspectedTotal) { this.suspectedTotal = suspectedTotal; } public Integer getCuredTotal() { return curedTotal; } public void setCuredTotal(Integer curedTotal) { this.curedTotal = curedTotal; } public Integer getIsolatedTotal() { return isolatedTotal; } public void setIsolatedTotal(Integer isolatedTotal) { this.isolatedTotal = isolatedTotal; } public Integer getDeadTotal() { return deadTotal; } public void setDeadTotal(Integer deadTotal) { this.deadTotal = deadTotal; } }
model:每日疫情数据
package com.ycu.epidemic.bean; import java.util.List; public class DailyEpidemicInfo { private String date; private List<EpidemicInfo> array;//对应多个省疫情 public String getDate() { return date; } public void setDate(String date) { this.date = date; } public List<EpidemicInfo> getArray() { return array; } public void setArray(List<EpidemicInfo> array) { this.array = array; } }
model:ajax异步请求,封装前台数据(json)
package com.ycu.epidemic.bean; public class AjaxResponseInfo<T> { private int code;//0:正常,其它不正常 private String msg; private T data; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
日期转换类:
package com.ycu.epidemic.common; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @Component public class DateConverter implements Converter<String,Date> { private SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); public Date convert(String s){ if(s == null || s.length()==0){ return null; } Date date = null; try { date = sdf.parse(s); }catch (ParseException e) { e.printStackTrace(); System.out.println("转换提交的参数"+s+"为日期值时出错:"+e.getMessage()); } return date; } }
Controller控制器:
package com.ycu.epidemic.controller; import com.ycu.epidemic.bean.*; import com.ycu.epidemic.service.EpidemicService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpSession; import java.util.List; @Controller @RequestMapping("/epidemicData") public class EpidemicController { @Autowired private EpidemicService epidemicService; @PostMapping("/ajax/input") @ResponseBody public AjaxResponseInfo inputData(@RequestBody DailyEpidemicInfo dailyEpidemicInfo, HttpSession session){ AjaxResponseInfo responseInfo = new AjaxResponseInfo(); UserInfo user = (UserInfo) session.getAttribute("loginUser"); if (user == null){ responseInfo.setCode(-2); responseInfo.setMsg("您没有登录"); }else { /** * 录入每日疫情数据 * @Param dailyEpidemicInfo 对前台数据封装 * @Param session 取到当前用户 * @Author:lijinhua * @Date:2020/7/12 */ List<ProvinceInfo> list = epidemicService.saveData(dailyEpidemicInfo,user.getUserId()); responseInfo.setData(list); } return responseInfo; } @GetMapping("/ajax/lastestData") @ResponseBody public AjaxResponseInfo findLastestData(){ /** * 查最近的数据(累计) * @Param * @Author:lijinhua * @Date:2020/7/12 */ AjaxResponseInfo ajaxResponseInfo = new AjaxResponseInfo(); List<EpidemicDetailInfo> list = epidemicService.findLastestData(); ajaxResponseInfo.setData(list);//转成json串 // System.out.println(ajaxResponseInfo.getData()); return ajaxResponseInfo; } }
package com.ycu.epidemic.controller; import com.ycu.epidemic.bean.AjaxResponseInfo; import com.ycu.epidemic.bean.ProvinceInfo; import com.ycu.epidemic.service.ProvinceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller @RequestMapping("/province") public class ProvinceController { @Autowired private ProvinceService provinceService; @GetMapping("/ajax/noDataList") @ResponseBody public AjaxResponseInfo noDataProvinceList(String date){ List<ProvinceInfo> list = null; AjaxResponseInfo<List<ProvinceInfo>> responseInfo = new AjaxResponseInfo<>(); if (!StringUtils.isEmpty(date)){ list = provinceService.findNoDataProvince(date);//调用业务 responseInfo.setData(list); } else { responseInfo.setCode(-1); responseInfo.setMsg("参数不足"); } return responseInfo; } }
package com.ycu.epidemic.controller; import com.ycu.epidemic.bean.UserInfo; import com.ycu.epidemic.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpSession; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; /** * * @Param user 封装前台请求数据 * @Author:lijinhua * @Date:2020/7/12 */ @RequestMapping("/login") public String login(UserInfo user, Model model, HttpSession session) { UserInfo u = userService.findByAccount(user); if (u == null) { model.addAttribute("msg", "账号或密码不正确"); return "login"; } if (u.getPassword().equals(user.getPassword())) { //登录成功 session.setAttribute("loginUser", u); return "redirect:/main.jsp"; } session.setAttribute("msg", "账号或密码不正确"); return "login"; } //退出登录 @RequestMapping("/logout") public String logout(HttpSession session){ session.invalidate(); return "redirect:/epidemic.jsp"; } }
Mapper层:
疫情Mapper层(保存已录入的数据;查询到累计的疫情数据) package com.ycu.epidemic.mapper; import com.ycu.epidemic.bean.EpidemicDetailInfo; import com.ycu.epidemic.bean.EpidemicInfo; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; @Mapper public interface EpidemicMapper { @Insert(value = "INSERT INTO epidemics(province_id,data_year,data_month,data_day,affirmed,suspected,isolated,dead,cured,user_id,input_date)" + "VALUES(#{provinceId},#{dataYear},#{dataMonth},#{dataDay},#{affirmed},#{suspected},#{isolated},#{dead},#{cured},#{userId},#{inputDate})") public int saveInfo(EpidemicInfo epidemicInfo); @Select(value="SELECT e1.province_id,temp.province_name,e1.data_year,e1.data_month,e1.data_day," + " temp.affirmed_total,temp.suspected_total,temp.isolated_total,temp.cured_total,temp.dead_total" + " FROM epidemics e1 RIGHT OUTER JOIN(" + " SELECT e. province_id,p.province_name,SUM(e.affirmed) affirmed_total," + " SUM(e.suspected) suspected_total,SUM(e.isolated) isolated_total," + " SUM(e.cured) cured_total,SUM(e.dead) dead_total" + " FROM epidemics e RIGHT OUTER JOIN provinces p ON e.province_id = p.province_id" + " GROUP BY e.province_id,p.province_name" + " ) temp ON e1.province_id = temp.province_id" + " WHERE e1.data_year=#{year} AND e1.data_month =#{month} AND e1.data_day =#{day}") public List<EpidemicDetailInfo> findLastestData(Map<String,Short> condition); }
省份mapper层(查找还未录入数据的省份) package com.ycu.epidemic.mapper; import com.ycu.epidemic.bean.ProvinceInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface ProvinceMapper { @Select(value = "SELECT p.province_id,p.province_name,p.province_py FROM provinces p" + " WHERE (p.del_flag IS NULL OR p.del_flag = 0)" + " AND p.province_id NOT IN(" + " SELECT e.province_id FROM epidemics e" + " WHERE e.data_year=#{arg0} AND e.data_month=#{arg1} AND e.data_day =#{arg2}" + " ) ORDER BY p.province_id LIMIT 0,6") public List<ProvinceInfo> findNoDataProvince(short year,short month,short day); }
管理员登录验证Mapper
package com.ycu.epidemic.mapper; import com.ycu.epidemic.bean.UserInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @Mapper public interface UserMapper { @Select("SELECT * from users where account=#{account}") public UserInfo findByAccount(UserInfo user); }
Service层:
package com.ycu.epidemic.service; import com.ycu.epidemic.bean.DailyEpidemicInfo; import com.ycu.epidemic.bean.EpidemicDetailInfo; import com.ycu.epidemic.bean.EpidemicInfo; import com.ycu.epidemic.bean.ProvinceInfo; import java.util.List; public interface EpidemicService { //返回还未录入的省份 public List<ProvinceInfo> saveData(DailyEpidemicInfo dailyEpidemicInfo,Integer userId); public List<EpidemicDetailInfo> findLastestData(); }
package com.ycu.epidemic.service; import com.ycu.epidemic.bean.DailyEpidemicInfo; import com.ycu.epidemic.bean.EpidemicDetailInfo; import com.ycu.epidemic.bean.EpidemicInfo; import com.ycu.epidemic.bean.ProvinceInfo; import com.ycu.epidemic.common.DateConverter; import com.ycu.epidemic.mapper.EpidemicMapper; import com.ycu.epidemic.mapper.ProvinceMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Service public class EpidemicServiceImp implements EpidemicService{ @Autowired private EpidemicMapper epidemicMapper; @Autowired private ProvinceMapper provinceMapper; @Override public List<ProvinceInfo> saveData(DailyEpidemicInfo dailyEpidemicInfo, Integer userId) { /** * 保存每日疫情数据 * @Param dailyEpidemicInfo 每日疫情数据 * @Param userId 录入用户ID * @Author:lijinhua * @Date:2020/7/12 */ // Date curDate = new Date(); String curDate = "2020-7-12";//用上面的new Date实现保存每日数据 String [] arr = dailyEpidemicInfo.getDate().split("-"); short year=2020,month=7,day=12; // year = Short.parseShort(arr[0]); // month = Short.parseShort(arr[1]); // day = Short.parseShort(arr[2]); DateConverter dateConverter = new DateConverter(); Date curDte = dateConverter.convert(curDate); for (EpidemicInfo epidemicInfo:dailyEpidemicInfo.getArray()) { epidemicInfo.setUserId(userId); epidemicInfo.setInputDate(curDte); epidemicInfo.setDataYear(year); epidemicInfo.setDataMonth(month); epidemicInfo.setDataDay(day); epidemicMapper.saveInfo(epidemicInfo); } return provinceMapper.findNoDataProvince(year,month,day); } @Override public List<EpidemicDetailInfo> findLastestData() { /** * 查询每个省份累计疫情 * @Param * @Author:lijinhua * @Date:2020/7/12 */ Calendar calendar = new GregorianCalendar(); short year=2020,month=7,day=12;//注:日期此处写死了 // year = (short) calendar.get(Calendar.YEAR); // month = (short) (calendar.get(Calendar.MONTH)+1);//0~11 // day = (short) calendar.get(Calendar.DATE); Map<String,Short> condition = new HashMap<>(); condition.put("year",year); condition.put("month",month); condition.put("day",day); return epidemicMapper.findLastestData(condition); } }
package com.ycu.epidemic.service; import com.ycu.epidemic.bean.ProvinceInfo; import java.util.List; public interface ProvinceService { public List<ProvinceInfo> findNoDataProvince(String date); }
package com.ycu.epidemic.service; import com.ycu.epidemic.bean.ProvinceInfo; import com.ycu.epidemic.mapper.ProvinceMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ProvinceServiceImp implements ProvinceService{ @Autowired private ProvinceMapper provinceMapper; @Override public List<ProvinceInfo> findNoDataProvince(String date) { /** *查询还没录入数据的省份 * @Param date * @Author:lijinhua * @Date:2020/7/12 */ List<ProvinceInfo> list = null; short year =0,month=0,day=0; String [] arr = date.split("-"); if (arr.length >=3){ year = Short.parseShort(arr[0]); month = Short.parseShort(arr[1]); day = Short.parseShort(arr[2]); list = provinceMapper.findNoDataProvince(year,month,day); } return list; } }
package com.ycu.epidemic.service; import com.ycu.epidemic.bean.UserInfo; public interface UserService { public UserInfo findByAccount(UserInfo user); }
package com.ycu.epidemic.service; import com.sun.deploy.security.BadCertificateDialog; import com.ycu.epidemic.bean.UserInfo; import com.ycu.epidemic.mapper.UserMapper; import org.apache.ibatis.annotations.Mapper; import org.aspectj.apache.bcel.generic.FADD; import org.aspectj.apache.bcel.generic.IADD; import org.aspectj.apache.bcel.generic.LADD; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class UserServiceImp implements UserService{ @Autowired private UserMapper userMapper; @Override public UserInfo findByAccount(UserInfo user) { /** * 通过账号查询用户 * @Param user * @Author:lijinhua * @Date:2020/7/12 */ return userMapper.findByAccount(user); } }
前端使用echarts展示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>疫情信息</title> <style type="text/css"> #body1 { background-color: #10AEB5; } </style> <!-- Bootstrap --> <link href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.css" rel="stylesheet"> <!--[if lt IE 9]> <script src="${pageContext.request.contextPath}/bootstrap/js/html5shiv.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/respond.js"></script> <![endif]--> </head> <body id="body1"> <div class="container"> <div class="row"> <div class="col-md-12" style="background-color:#fff;margin-bottom: 5px;"> <div id="myMap" style="height: 600px;"></div> </div> </div> <div class="row" style="height: 400px; overflow: auto;"> <div class="col-md-16" style="background-color:#fff;"> <table class="table table-hover table-bordered table-striped"> <thead> <tr> <th>省份</th> <th>确诊人数</th> <th>疑似人数</th> <th>隔离人数</th> <th>治愈人数</th> <th>死亡人数</th> </tr> </thead> <tbody id="tbody1"> </tbody> </table> </div> </div> <div class="row" style="margin-top: 5px;"> <div class="col-md-12"> <div id="mycharts" style="height: 500px;border: 1px solid gray;background-color:#fff;"></div> </div> </div> <div class="row"> <a href="login.jsp">登录</a> </div> </div> <script src="${pageContext.request.contextPath}/bootstrap/js/jquery-1.11.2.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/echarts/echarts.js"></script> <script type="text/javascript"> $(function () { //获取当前日期 var myDate = new Date("2020-7-12");//参数去掉即获取当前日期!!!!(日期此处写死了) var y = myDate.getFullYear(); var m = myDate.getMonth()+1; var d = myDate.getDate(); var nowDate = y+"-"+m+"-"+d; //定义个用来给表格中装载数据的函数 var fillToTable = function (epidemics) { var tbody1 = $("#tbody1"); tbody1.empty(); $.each(epidemics, function (index, epidemic) { var tr = $("<tr>"); var td = $("<td>"); td.text(epidemic.provinceName); tr.append(td); td = $("<td>"); td.html("" + epidemic.affirmedTotal); tr.append(td); td = $("<td>"); td.html("" + epidemic.suspectedTotal); tr.append(td); td = $("<td>"); td.html("" + epidemic.isolatedTotal); tr.append(td); td = $("<td>"); td.html("" + epidemic.curedTotal); tr.append(td); td = $("<td>"); td.html("" + epidemic.deadTotal); tr.append(td); tbody1.append(tr); }); }; //初始化图表 var myCharts = echarts.init($("#mycharts").get(0)); var option = { title: { text: "当日全国疫情柱状图", subtext: nowDate }, grid: { show: true }, legend: { data: [nowDate] } , tooltip: { trigger: 'axis' } , xAxis: { data: [] } , yAxis: {} , series: [{ type: 'bar', name: nowDate, data: [] }] }; myCharts.setOption(option); //将服务器端返回的数据设置到图表上 var fillToChart = function (epidemics) { var provinceNames = []; var affirmedTotal = []; $.each(epidemics, function (index, epidemic) { provinceNames.push(epidemic.provinceName); affirmedTotal.push(epidemic.affirmedTotal); }); myCharts.setOption({ xAxis: { data: provinceNames }, series: [{ data: affirmedTotal }] }); }; var myMap = echarts.init($("#myMap").get(0)); //获取地图json数据,显示中国地图 $.getJSON("${pageContext.request.contextPath}/echarts/china.json", {}, function (chinaJson) { echarts.registerMap("china", chinaJson); var option = { title: { text: nowDate+" 全国疫情分布图" }, legend: { data: ["累计确诊人数"] }, tooltip: {}, visualMap: { type: 'piecewise', min: 0, max: 10000, splitList: [{ start: 1000, end: 10000 }, { start: 500, end: 1000 }, { start: 100, end: 500 }, { start: 0, end: 100 }], textStyle: { color: 'orange' } }, series: [ { name: '累计确诊人数', type: 'map', mapType: 'china', data: [] } ] }; myMap.setOption(option); }, "json"); //将数据填充到地图中 var fillToMap = function (epidemics) { var data = []; $.each(epidemics, function (index, epidemic) { var obj = {}; obj.name = epidemic.provinceName; obj.value = epidemic.affirmedTotal; data.push(obj); }); myMap.setOption({ series: [ { name: '累计确诊人数', type: 'map', mapType: 'china', data: data } ] }); }; //发送请求获取最新疫情数据 $.get("${pageContext.request.contextPath}/epidemicData/ajax/lastestData", {}, function (resp) { if (resp.code < 0) { alert(resp.msg); } else { fillToTable(resp.data); fillToChart(resp.data); fillToMap(resp.data); } }, "json"); }); </script> </body> </html>
管理员登录页面:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/3/12 Time: 21:16 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>登录界面</title> <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.css"> </head> <body style="background-color: #10aeb5"> <div class="modal-dialog" style="margin-top: 20%"> <form action="${pageContext .request.contextPath}/user/login" method="post" class="form-horizontal"> <div class="modal-content"> <div class="modal-header" style="text-align: center" ;> <h4>登录</h4> </div> <div class="modal-body" id="modal-body"> <div class="form-group" style="margin-left: 20px;margin-right:20px"> <input type="text" class="form-control" placeholder="请输入账号" name="account" autocomplete="off" > </div> <div class="form-group" style="margin-left: 20px;margin-right:20px"> <input type="text" class="form-control" placeholder="请输入密码" name="password" autocomplete="off" > </div> </div> <div class="modal-footer" id="modal-footer"> <div class="form-group" style="margin-left: 20px;margin-right: 20px; "> <button type="submit" class="btn btn-primary form-control">登录</button> </div> </div> <c:if test="${not empty msg}"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <div class="alert alert-danger alert-dismissable" > <button type="button" class="close" data-dismiss="alert"><span>x</span></button> ${msg} </div> </div> </div> </c:if> </div> </form> </div> <script src="${pageContext.request.contextPath}/bootstrap/js/jquery-1.11.2.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.js"></script> </body> </html>
录入数据页面:
<%-- Created by IntelliJ IDEA. User: lijinhua Date: 2020/7/10 Time: 10:56 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>疫情数据统计系统后台管理</title> <jsp:include page="template/bootstrap_common.jsp"></jsp:include> </head> <body> <script src="${pageContext.request.contextPath}/bootstrap/js/jquery-1.11.2.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.js"></script> <div class="container"> <%-- 头部--%> <jsp:include page="template/top.jsp"></jsp:include> <div class="row"> <%-- 左边菜单--%> <div class="col-md-3"> <jsp:include page="template/menu.jsp"></jsp:include> </div> <div class="col-md-9"> <%--右边--%> <ul class="breadcrumb"> <li><a href="${pageContext.request.contextPath}/main.jsp">主页</a></li> <li>后台主页</li> </ul> 欢迎使用疫情数据统计系统 </div> </div> </div> </body> </html>