前言
因为挺多人私信需要,该项目代码与数据库备份文件已上传至github,如果对您有帮助希望可以给github上的项目点个star!谢谢。
https://github.com/ZhChessOvO/hometown_and_selfintro
目录
用到的技术
(都是比较基础的技术)
前端:JSP+Bootstrap框架**(萌新记得导入BootStrap的文件!不然什么显示效果都不会有)**
数据交互:Servlet
数据库:MySQL
服务器:Tomcat7
课设内容
个人及家乡展示展示管理平台应该具备如下几方面的内容。
系统功能详细介绍
前端
- 欢迎页面(首页):实现照片的轮播,以及其他功能的链接等。
- 个人简介:个人情况的简单介绍界面,根据个人兴趣设计。
- 个人技能管理:科研情况,学习成绩,开发技能,获奖 其他(可根据自己的喜好分类)。最好把这些做成下拉菜单的进行选择。
- 家乡简介:家乡情况的简单介绍,根据个人兴趣设计。
- 特色介绍:主要从美食、美景、风土人情等几方面进行介绍,但不局限于此,根据自己的喜好进行设计。
- 用户留言:设置留言板,游客可以留言,并能实现回复功能。
后端
- 用户管理:包括管理员和游客(游客可以注册,注册之后可以进行留言),管理员管理整个后端的信息
- 技能管理:这部分包括了下拉菜单中涉及的科研情况管理,学习成绩等管理,开发技能管理等。管理指web界面实现(增删改查等工作)
- 家乡特色介绍:这部分主要在web界面进行对美食、美景、风土人情的管理,实现增删改查等功能。
- 留言管理:可以实现留言的管理。管理同上。
实现方法(源码示例)
涉及个人隐私的页面会略去
贯穿所有页面的侧边导航栏(Bootstrap+JSP)
<!-- Sidebar -->
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
<!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.jsp">
<div class="sidebar-brand-icon rotate-n-15">
<i class="fas fa-laugh-wink"></i>
</div>
<div class="sidebar-brand-text mx-3">我与家乡</div>
</a>
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Nav Item - Dashboard -->
<li class="nav-item active">
<a class="nav-link" href="index.jsp">
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>欢迎页</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
个人
</div>
<!-- Nav Item - Pages Collapse Menu -->
<li class="nav-item">
<a class="nav-link" href="selfIntro.jsp">
<i class="fas fa-fw fa-cog"></i>
<span>个人简介</span>
</a>
</li>
<!-- Nav Item - Utilities Collapse Menu -->
<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities"
aria-expanded="true" aria-controls="collapseUtilities">
<i class="fas fa-fw fa-wrench"></i>
<span>个人技能管理</span>
</a>
<div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities"
data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">方向:</h6>
<a class="collapse-item" href="science.jsp">科研情况</a>
<a class="collapse-item" href="study.jsp">学习成绩</a>
<a class="collapse-item" href="develop.jsp">开发技能</a>
<a class="collapse-item" href="reward.jsp">获奖</a>
</div>
</div>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
家乡
</div>
<!-- Nav Item - Charts -->
<li class="nav-item">
<a class="nav-link" href="hometown.jsp">
<i class="fas fa-fw fa-chart-area"></i>
<span>家乡简介</span></a>
</li>
<!-- Nav Item - Pages Collapse Menu -->
<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages"
aria-expanded="true" aria-controls="collapsePages">
<i class="fas fa-fw fa-folder"></i>
<span>特色介绍</span>
</a>
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">南京特色:</h6>
<a class="collapse-item" href="food.jsp">美食</a>
<a class="collapse-item" href="scene.jsp">美景</a>
<a class="collapse-item" href="custom.jsp">风土人情</a>
</div>
</div>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
留言板
</div>
<!-- Nav Item - Tables -->
<li class="nav-item">
<a class="nav-link" href="messageBoard.jsp">
<i class="fas fa-fw fa-table"></i>
<span>用户留言</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Sidebar Toggler (Sidebar) -->
<div class="text-center d-none d-md-inline">
<button class="rounded-circle border-0" id="sidebarToggle"></button>
</div>
<!-- Sidebar Message -->
<div class="sidebar-card">
<img class="sidebar-card-illustration mb-2" src="static/img/undraw_rocket.svg" alt="">
<p class="text-center mb-2"><strong>个人家乡管理展示平台</strong> 是我为java高级应用课设而开发的平台!访问更多代码,请点击: </p>
<a class="btn btn-success btn-sm" href="https://blog.csdn.net/xiangQiAtCSDN">访问我的博客!</a>
</div>
</ul>
<!-- End of Sidebar -->
贯穿所有页面的顶部信息栏(Bootstrap+JSP)
<!-- Topbar -->
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
<!-- Sidebar Toggle (Topbar) -->
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
<i class="fa fa-bars"></i>
</button>
<!-- Topbar Navbar -->
<ul class="navbar-nav ml-auto">
<div class="topbar-divider d-none d-sm-block"></div>
<!-- Nav Item - User Information -->
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<%
CheckLogDAO dao = new CheckLogDAO();
List<LogStatus> list = dao.readLogStatus();
for (LogStatus ls : list) {
%>
<span class="mr-2 d-none d-lg-inline text-gray-600 small">
<%=ls.getName()%>
</span>
<%}%>
<img class="img-profile rounded-circle"
src="static/img/undraw_profile.svg">
</a>
<!-- Dropdown - User Information -->
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
aria-labelledby="userDropdown">
<a class="dropdown-item" href="login.jsp">
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
访客注册/登录/切换账号
</a>
<a class="dropdown-item" href="loginAdmin.jsp">
<i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i>
管理员登录/切换账号
</a>
<div class="dropdown-divider"></div>
<form method="post" action="ServletLogout">
<button class="dropdown-item" type="submit" data-toggle="modal">
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
退出登录
</button>
</form>
</div>
</li>
</ul>
</nav>
<!-- End of Topbar -->
用户/管理员的登录/注册/退出登录
因为前端几乎一样,前端以用户登录为例
<!-- Outer Row -->
<div class="row justify-content-center">
<div class="col-xl-10 col-lg-12 col-md-9">
<div class="card o-hidden border-0 shadow-lg my-5">
<div class="card-body p-0">
<!-- Nested Row within Card Body -->
<div class="row">
<div><img src="static/img/nj1.jpg" width="450"></div>
<div class="col-lg-6" align="center">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">欢迎登录!</h1>
</div>
<form class="user" action="ServletLogin" method="post">
<div class="form-group">
<input type="email" class="form-control form-control-user"
name="email" aria-describedby="emailHelp"
placeholder="请输入邮箱...">
</div>
<div class="form-group">
<input type="password" class="form-control form-control-user"
name="password" placeholder="请输入密码...">
</div>
<div class="form-group">
<div class="custom-control custom-checkbox small">
<input type="checkbox" class="custom-control-input" id="customCheck">
<label class="custom-control-label" for="customCheck">Remember
Me</label>
</div>
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
登录
</button>
</form>
<hr>
<div class="text-center">
<a class="small" href="register.jsp">注册新用户</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Servlet层以用户登录为例
package com.servlet;
import com.entity.LogStatus;
import com.entity.User;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "ServletLogin", value = "/ServletLogin")
public class ServletLogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
String password = request.getParameter("password");
String realPassword = "0";
String name = "未登录";
// PrintWriter out = response.getWriter();
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "select * from user where email ='" + email + "'";
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
if (rs.next()) {
realPassword = rs.getString("password");
name = rs.getString("name");
System.out.println("有数据"+realPassword+password);
}
if (realPassword.equals(password)) { //密码正确
sql = "update logstatus set name='" + name + "'";
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
System.out.println("登录状态修改为"+name);
response.sendRedirect("/myWeb_war_exploded/index.jsp");
} else { //密码错误
response.sendRedirect("/myWeb_war_exploded/login.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
实体层以用户为例
package com.entity;
public class User {
private String email;
private String name;
private String password;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String email, String name, String password) {
this.email = email;
this.name = name;
this.password = password;
}
}
首页的轮播:(JSP+CSS)
JSP部分
<div class="screen">
<marquee scrollamount="10" direction="left" width="1000" height="500" onmouseover="this.stop();"
onmouseout="this.start();">
<img src="static/img/nj2.jpg" width="1000" height="500"/>
<img src="static/img/nj3.jpg" width="1000" height="500"/>
<img src="static/img/custom1.jpg" width="1000" height="500"/>
<img src="static/img/scene3.jpg" width="1000" height="500"/>
<img src="static/img/scene4.jpg" width="1000" height="500"/>
</marquee>
</div>
CSS部分
.screen {
width: 1200px;
height: 600px;
position: absolute;
left:65%;
margin-top:0px;
margin-left:-600px;
border:1px solid #FFFFFF;
}
个人信息页(JSP+Bootstrap,为静态页面)
涉及隐私不予展示,和后边介绍家乡的前端差不多
个人技能管理页(共科研,学习,开发技能,获奖4页,之间的内容几乎一致,因此以科研为例)
科研实体层
package com.entity;
public class Science {
private int id;
private String name;
private String status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Science(int id, String name, String status) {
this.id = id;
this.name = name;
this.status = status;
}
}
科研DAO层
package com.dao;
import com.entity.LogStatus;
import com.entity.Science;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ScienceDAO {
public List readScience() {
List<Science> list = new ArrayList<>();
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "select * from science";
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String status = rs.getString("status");
Science science = new Science(id,name,status);
list.add(science);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void addScience(int id1, String name1,String status1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "insert into science values " +
"("+id1+",'"+name1+"','"+status1+"')";
System.out.println(name1+" "+status1);
System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void editScience(int id1, String name1,String status1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "update science " +
"set name='"+name1+"',status='"+status1+"' " +
"where id = "+ id1;
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void deleteScience(int id1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "delete from science" +
" where id = "+id1;
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
科研Servlet层
package com.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
import com.dao.ScienceDAO;
import com.entity.Science;
@WebServlet(name = "ServletScience", value = "/ServletScience")
public class ServletScience extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = new Integer(request.getParameter("deleteId"));
ScienceDAO dao = new ScienceDAO();
dao.deleteScience(id);
response.sendRedirect("/myWeb_war_exploded/science.jsp");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = new Integer(request.getParameter("editId"));
String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
String status = new String(request.getParameter("status").getBytes("iso-8859-1"), "utf-8");
System.out.println(name+" "+status);
ScienceDAO dao = new ScienceDAO();
List<Science> list = dao.readScience();
boolean flag = false; //还没有指定id的内容
for(Science s:list){
// System.out.println(s.getId());
if(s.getId()==id){
flag = true;
break;
}
}
if(flag){ //编辑
dao.editScience(id,name,status);
}else{ //添加
dao.addScience(id,name,status);
}
response.sendRedirect("/myWeb_war_exploded/science.jsp");
}
}
科研前端,表格显示与查询部分
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">科研情况</h1>
</div>
<div>
<%
LogStatus ls = list.get(0);
if ("Chess".equals(ls.getName())) {
%>
<a href="editScience.jsp" class="btn btn-primary btn-icon-split" id="button1">
<span class="icon text-white-50">
<i class="fas fa-flag"></i>
</span>
<span class="text">管理此页内容</span>
</a>
<%}%>
</div>
<div> </div>
<!-- DataTales Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">科研情况表</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>序号</th>
<th>名称</th>
<th>状态</th>
</tr>
</thead>
<tfoot>
<tr>
<th>序号</th>
<th>名称</th>
<th>状态</th>
</tr>
</tfoot>
<tbody>
<%
ScienceDAO dao2 = new ScienceDAO();
List<Science> list2 = dao2.readScience();
for (Science science : list2) {
%>
<tr>
<td><%=science.getId()%>
</td>
<td><%=science.getName()%>
</td>
<td><%=science.getStatus()%>
</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
科研前端:增删改表单部分
<div class="card-body p-0">
<!-- Nested Row within Card Body -->
<div class="row">
<img src="static/img/register.jpg" width="450">
<div class="col-lg-7">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">添加/编辑条目</h1>
</div>
<form class="user" action="ServletScience" method="post">
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input class="form-control form-control-user"
name="editId" placeholder="输入序号...">
</div>
<div class="col-sm-6">
<input class="form-control form-control-user"
name="status" placeholder="科研任务状态...">
</div>
</div>
<div class="form-group">
<input class="form-control form-control-user" name="name"
placeholder="科研项目名称...">
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
提交修改!
</button>
</form>
<div> </div>
<div> </div>
<hr>
<div> </div>
<div> </div>
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">删除条目</h1>
</div>
<form class="user" action="ServletScience" method="get">
<div class="form-group">
<input class="form-control form-control-user" name="deleteId"
placeholder="输入要删除的序号...">
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
删除指定条目!
</button>
</form>
</div>
</div>
</div>
</div>
家乡介绍页(JSP+Bootstrap,为静态页面)
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">家乡简介</h1>
</div>
<div class="row">
<div class="col-lg-6">
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">历史沿革</h6>
</div>
<div class="card-body">
历史上南京既受益又罹祸于其得天独厚的地理位置和气度不凡的风水佳境,过去曾多次遭受兵燹之灾,但亦屡屡从瓦砾荒烟中重整繁华。且在中原被异族所占领,汉民族即将遭受灭顶之灾时,通常汉民族都会选择南京休养生息,立志北伐,恢复华夏。大明、民国二次北伐成功;东晋、萧梁、刘宋三番北伐功败垂成。南宋初立,群臣皆议以建康为都以显匡复中原之图,惜宋高宗无意北伐而定行在于临安,但迫于舆论仍定金陵为行都。太平天国以南京为都,也以驱除异族统治为动员基础和合法性之一。所以南京被视为汉族的复兴之地,在中国历史上具有特殊地位和价值。故朱偰先生在比较了长安、洛阳、金陵、燕京四大古都后,言“此四都之中,文学之昌盛,人物之俊彦,山川之灵秀,气象之宏伟,以及与民族患难相共,休戚相关之密切,尤以金陵为最。” [23]
<br> 据史志记载,南京一带在100-120万年前就有古人类活动 [24] 。60多万年前古猿人在南京地域生活,汤山旧石器时代文化遗址出土的南京猿人化石,是研究东亚早期人类演化及旧石器时代考古领域具有世界意义的重大发现,再次证明南京是中华文明的发祥地之一 [25] 。同一化石点发现两个人种,全世界仅有南京一处。这不仅让“南京猿人洞”成了全球唯一的同一化石点发现两个人种的地方,也为人类多地起源论提供了有力依据——中国人并非起源于非洲 [26] 。 [27-28]
<br> 7000年前,南京栖霞地区已有农业文明产生 [29] 。6000年前,出现以北阴阳营文化为代表的新石器时代原始村落,在南京及周边地区发现200多处新石器时代的遗址 [30] 。4000年前,秦淮河流域出现了密集的原始聚落,被称为湖熟文化,在这些聚落的基础上形成了南京地区最早的城邑 [31] 。
<div align="center"><img src="static/img/nj3.jpg" width="400"></div>
<br> 3100年前,南京是西周周章的封地。前571年,楚国在六合已设有棠邑,置棠邑大夫,这是南京有历史记载的最早的地方建置,也是南京建城的开始,至2020年已有2591年。前541年,吴国在高淳建濑渚邑,因城池坚固,又名固城。前495年前后,吴国在朝天宫一带筑冶城。前473年,越灭吴,于中华门外的长干里筑越城。前333年,楚灭越,楚威王熊商欲借南京的长江天堑为屏障以图谋天下,于石头城筑金陵邑,金陵之名源于此 [32] 。
<br> 229年,吴大帝孙权在此建都,南京从此崛起,使中国的政治中心走出黄河文化板块的格局,引领了长江流域及整个中国南方地区的发展。此后,东晋、南朝的宋、齐、梁、陈相继在此建都,故南京有“六朝古都”之称,其文化辐射力达整个东亚地区 [33] 。六朝建康城在中国都城发展史上具有重要地位,首开中轴对称布局的先例,形成了东亚都城特有的以中轴线为基准,主要建筑左右对称的布局和风格,成为后世都城建设的范本。六朝皇宫建康宫是当时中国规模最大、最壮丽的宫殿,存世三百六十年,史书记载“穷极壮丽,冠绝古今” [34] 。其平面布局、建筑形制不仅直接影响了北朝和隋唐的都城,还进而影响到日本的京都、奈良以及朝鲜半岛的百济等都城,深远影响了后世宫室建设的形制 [35] 。今南京图书馆和六朝博物馆下仍保留有建康城遗址 [36] 。
</div>
</div>
</div>
<div class="col-lg-6">
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">经济</h6>
</div>
<div class="card-body">
<div align="center"><img src="static/img/nj4.jpg" width="300"></div>
<br> 1981年南京被国家列为15个经济中心城市 [59] 。1992年被国家九个部委列为中国投资硬环境“四十优”城市。1994年中国城市综合实力五十强南京名列第5 [60] 。2001年被评为亚太地区最有发展前景的城市之一 [61] 。2004年经济中心定位指数排名,南京列中国大陆第6,仅次于北上广深津 [62] 。2008年总部经济发展能力列中国第5,位居北上广深之后,在长三角中南京发展总部经济的能力仅次于上海 [63] 。2014年中国区域中心城市竞争力评估,南京仅次于深圳广州 [64] 。2015年全国投资吸引力城市排名,南京列中国第5,紧随北上广深 [65] 。2020年8月,名列上半年中国GDP十强 [66] 。
<br> 2019年,南京地区生产总值14030.15亿元,列全国第11位,比上年增长7.8%。人均地区生产总值152886元,在中国直辖市、副省级市及省会城市中排名第二,仅次深圳,省会城市排名第一。第一产业增加值289.82亿元、增长0.7%;第二产业增加值5040.86亿元、增长6.7%;第三产业增加值8699.47亿元、增长8.6%。三次产业增加值结构为2.1:35.9:62.0 [5] 。
</div>
</div>
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">位置境遇</h6>
</div>
<div class="card-body">
南京位于中国东部、长江下游中部地区,是长三角辐射带动中西部地区发展的国家重要门户城市 [52] ,南京经济区主席方城市 [53] ,地理坐标为北纬31°14″至32°37″,东经118°22″至119°14″。市中心新街口地理坐标为北纬32°02'38"、东经118°46'43" [54] ,总面积6587平方千米 [55] ,2019年建成区面积823平方千米 [4] 。
</div>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
家乡介绍管理页(共美食、美景、风土人情3页,之间的内容几乎一致,因此以美食为例)
美食实体层
package com.entity;
public class Food {
private int id;
private String name;
private String info;
private String img;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public Food(int id, String name, String info, String img) {
this.id = id;
this.name = name;
this.info = info;
this.img = img;
}
public Food(int id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
this.img="";
}
@Override
public String toString() {
return "Food{" +
"id=" + id +
", name='" + name + '\'' +
", info='" + info + '\'' +
", img='" + img + '\'' +
'}';
}
}
美食DAO层
package com.dao;
import com.entity.Food;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class FoodDAO {
public List readFood() {
List<Food> list = new ArrayList<>();
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "select * from food";
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String info = rs.getString("info");
Food food;
if(rs.getString("img")==null){
food = new Food(id,name,info);
}else{
food = new Food(id,name,info,rs.getString("img"));
}
list.add(food);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void addFood(int id1, String name1, String info1, String img1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "insert into food values " +
"("+id1+",'"+name1+"','"+info1+"','"+img1+"')";
// System.out.println(name1+" "+status1);
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void editFood(int id1, String name1, String info1, String img1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "update food " +
"set name='"+name1+"',info='"+ info1 +"',img='"+img1+"' "+
"where id = "+ id1;
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void deleteFood(int id1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "delete from food" +
" where id = "+id1;
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
美食Servlet层
package com.servlet;
import com.dao.FoodDAO;
import com.entity.Food;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "ServletFood", value = "/ServletFood")
public class ServletFood extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = new Integer(request.getParameter("deleteId"));
FoodDAO dao = new FoodDAO();
dao.deleteFood(id);
response.sendRedirect("/myWeb_war_exploded/food.jsp");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = new Integer(request.getParameter("editId"));
String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
String info = new String(request.getParameter("info").getBytes("iso-8859-1"), "utf-8");
String img = new String(request.getParameter("img").getBytes("iso-8859-1"), "utf-8");
System.out.println(img+"路径");
FoodDAO dao = new FoodDAO();
List<Food> list = dao.readFood();
boolean flag = false; //还没有指定id的内容
for (Food s : list) {
// System.out.println(s.getId());
if (s.getId() == id) {
flag = true;
break;
}
}
if (flag) { //编辑
dao.editFood(id, name, info, img);
} else { //添加
dao.addFood(id, name, info, img);
}
response.sendRedirect("/myWeb_war_exploded/food.jsp");
}
}
美食前端:美食卡片展示部分
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">美食</h1>
</div>
<div>
<%
LogStatus ls = list.get(0);
if ("Chess".equals(ls.getName())) {
%>
<a href="editFood.jsp" class="btn btn-primary btn-icon-split" id="button1">
<span class="icon text-white-50">
<i class="fas fa-flag"></i>
</span>
<span class="text">管理此页内容</span>
</a>
<%}%>
</div>
<div> </div>
<%
FoodDAO foodDAO = new FoodDAO();
List<Food> list1 = foodDAO.readFood();
int num = list1.size(); //食物数量
int col = num / 2; //第一列的数量
%>
<div class="row">
<div class="col-lg-6">
<%
for (int i = 0; i < col; i++) {
%>
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary"><%=list1.get(i).getId()%> <%=list1.get(i).getName()%>
</h6>
</div>
<div class="card-body">
<%=list1.get(i).getInfo()%>
<%
if (!list1.get(i).getImg().equals("")) {
%>
<div align="center">
<img src="<%=list1.get(i).getImg()%>" width="400">
</div>
<%
}
System.out.println(list1.get(i));
%>
</div>
</div>
<%}%>
</div>
<div class="col-lg-6">
<%
for (int i = col; i < num; i++) {
%>
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary"><%=list1.get(i).getId()%> <%=list1.get(i).getName()%>
</h6>
</div>
<div class="card-body">
<%=list1.get(i).getInfo()%>
<%
if (!list1.get(i).getImg().equals("")) {
%>
<div align="center">
<img src="<%=list1.get(i).getImg()%>" width="400">
</div>
<%
}
%>
</div>
</div>
<%}%>
</div>
</div>
</div>
<!-- /.container-fluid -->
美食前端:美食管理表单部分
<div class="card-body p-0">
<!-- Nested Row within Card Body -->
<div class="row">
<img src="static/img/register.jpg" width="450">
<div class="col-lg-7">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">添加/编辑条目</h1>
</div>
<form class="user" action="ServletFood" method="post">
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input class="form-control form-control-user"
name="editId" placeholder="输入序号...">
</div>
<div class="col-sm-6">
<input class="form-control form-control-user"
name="name" placeholder="食物名称...">
</div>
</div>
<div class="form-group">
<input class="form-control form-control-user" name="info"
placeholder="食物描述...">
</div>
<div class="form-group">
<input class="form-control form-control-user" name="img"
placeholder="图片路径...(不输入即没有图片)">
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
提交修改!
</button>
</form>
<div> </div>
<div> </div>
<hr>
<div> </div>
<div> </div>
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">删除条目</h1>
</div>
<form class="user" action="ServletFood" method="get">
<div class="form-group">
<input class="form-control form-control-user" name="deleteId"
placeholder="输入要删除的序号...">
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
删除指定条目!
</button>
</form>
</div>
</div>
</div>
</div>
留言板页面
留言信息实体
package com.entity;
public class Comment {
private int id;
private String user;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Comment(int id, String user, String content) {
this.id = id;
this.user = user;
this.content = content;
}
}
留言回复实体
package com.entity;
public class Reply {
private int id;
private int re;
private String user;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getRe() {
return re;
}
public void setRe(int re) {
this.re = re;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Reply(int id, int re, String user, String content) {
this.id = id;
this.re = re;
this.user = user;
this.content = content;
}
}
留言信息DAO
package com.dao;
import com.entity.Comment;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class CommentDAO {
public List readComment() {
List<Comment> list = new ArrayList<>();
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "select * from Comment";
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String user = rs.getString("user");
String content = rs.getString("content");
Comment comment= new Comment(id,user,content);
list.add(comment);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void addComment(int id, String user, String content){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "insert into Comment values " +
"("+id+",'"+user+"','"+content+"')";
// System.out.println(name1+" "+status1);
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void editComment(int id, String user, String content){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "update Comment " +
"set user='"+user+"',content='"+ content +"' "+
"where id = "+ id;
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void deleteComment(int id1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "delete from comment" +
" where id = "+id1;
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
留言回复DAO
package com.dao;
import com.entity.Reply;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ReplyDAO {
public List readReply() {
List<Reply> list = new ArrayList<>();
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "select * from Reply";
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
int re = rs.getInt("re");
String user = rs.getString("user");
String content = rs.getString("content");
Reply reply = new Reply(id,re,user,content);
list.add(reply);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void addReply(int id, int re, String user, String content){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "insert into reply values " +
"("+id+","+re+",'"+user+"','"+content+"')";
// System.out.println(name1+" "+status1);
// System.out.println(sql);
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void deleteReply(int id1){
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hometown?serverTimezone=UTC", "root", "root");
String sql = "delete from reply" +
" where id = "+id1;
psmt = con.prepareStatement(sql);
psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
留言管理Servlet
package com.servlet;
import com.dao.CheckLogDAO;
import com.dao.CommentDAO;
import com.dao.ReplyDAO;
import com.entity.Comment;
import com.entity.LogStatus;
import com.entity.Reply;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "ServletMessage", value = "/ServletMessage")
public class ServletMessage extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除留言
int id = new Integer(request.getParameter("deleteId"));
CommentDAO commentDAO = new CommentDAO();
commentDAO.deleteComment(id);
//删除相关回复
ReplyDAO replyDAO = new ReplyDAO();
List<Reply> replyList = replyDAO.readReply();
for(Reply r:replyList){
if(r.getRe()==id){
replyDAO.deleteReply(r.getId());
}
}
response.sendRedirect("/myWeb_war_exploded/messageBoard.jsp");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//添加留言
CommentDAO commentDAO = new CommentDAO();
List<Comment> commentList = commentDAO.readComment();
int id = commentList.get(commentList.size() - 1).getId() + 1;
CheckLogDAO checkLogDAO = new CheckLogDAO();
List<LogStatus> logStatusList = checkLogDAO.readLogStatus();
String user = logStatusList.get(0).getName();
String content = new String(request.getParameter("content").getBytes("iso-8859-1"), "utf-8");
commentDAO.addComment(id, user, content);
response.sendRedirect("/myWeb_war_exploded/messageBoard.jsp");
}
}
回复管理Servlet
package com.servlet;
import com.dao.CheckLogDAO;
import com.dao.CurrentReplyDAO;
import com.dao.ReplyDAO;
import com.entity.CurrentReply;
import com.entity.LogStatus;
import com.entity.Reply;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "ServletReply", value = "/ServletReply")
public class ServletReply extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ReplyDAO replyDAO = new ReplyDAO();
List<Reply> replyList = replyDAO.readReply();
int id = replyList.get(replyList.size() - 1).getId() + 1;
CurrentReplyDAO currentReplyDAO = new CurrentReplyDAO();
List<CurrentReply> currentReplyList = currentReplyDAO.readCurrentReply();
int re = currentReplyList.get(0).getId();
CheckLogDAO checkLogDAO = new CheckLogDAO();
List<LogStatus> logStatusList = checkLogDAO.readLogStatus();
String user = logStatusList.get(0).getName();
String content = new String(request.getParameter("content").getBytes("iso-8859-1"), "utf-8");
replyDAO.addReply(id, re, user, content);
currentReplyDAO.setCurrentReply(0);
response.sendRedirect("/myWeb_war_exploded/messageBoard.jsp");
}
}
留言板前端(JSP+Bootstrap,全页面设计最复杂的地方)
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">用户留言</h1>
</div>
<div>
<%
LogStatus ls = list.get(0);
if ("Chess".equals(ls.getName())) {
%>
<a href="messageDelete.jsp" class="btn btn-primary btn-icon-split" id="button1">
<span class="icon text-white-50">
<i class="fas fa-flag"></i>
</span>
<span class="text">管理留言</span>
</a>
<%
}
if (!"未登录".equals(ls.getName())) {
%>
<a href="messageAdd.jsp" class="btn btn-success btn-icon-split">
<span class="icon text-white-50">
<i class="fas fa-check"></i>
</span>
<span class="text">我要留言!</span>
</a>
<%
}
%>
</div>
<div> </div>
<%
//准备各种参数
CommentDAO commentDAO = new CommentDAO();
List<Comment> commentList = commentDAO.readComment();
ReplyDAO replyDAO = new ReplyDAO();
List<Reply> replyList = replyDAO.readReply();
CurrentReplyDAO currentReplyDAO = new CurrentReplyDAO();
List<CurrentReply> currentReplyList = currentReplyDAO.readCurrentReply();
int num = commentList.size(); //评论数量
int col = num / 2; //第一列的数量
int replyId = currentReplyList.get(0).getId();
%>
<div class="row">
<div class="col-lg-6">
<%
for (int i = 0; i < col; i++) {
%>
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<%=commentList.get(i).getId()%>楼 留言人:<%=commentList.get(i).getUser()%>
<%
if (commentList.get(i).getUser().equals("Chess")) {
%>
[管理员]
<%
} else if (commentList.get(i).getUser().equals("未登录")) {
} else {
%>
[游客]
<%
}
%>
</h6>
</div>
<div class="card-body">
<%=commentList.get(i).getContent()%>
<%
//如果还没选择评论谁
if (replyId == 0) {
%>
<form method="post" action="ServletSetReply">
<div align="right">
<input type="hidden" name="idbox" value="<%=i+1%>">
<button type="submit">回复</button>
</div>
</form>
<%
}
%>
<%
//如果当前是被评论条目
if (replyId == i + 1) {
%>
<form method="post" action="ServletReply">
<div> </div>
<hr>
<div> </div>
<div align="center">
<div class="form-group">
<input class="form-control form-control-user" name="content"
placeholder="评论...">
</div>
</div>
<div align="right">
<button type="submit" class="btn btn-success btn-icon-split">
<span class="icon text-white-50">
<i class="fas fa-check"></i>
</span>
<span class="text">提交评论</span>
</button>
</div>
</form>
<%
}
for (Reply r : replyList) {
if (r.getRe() == i + 1) {
//评论区
%>
<hr>
<div>
回复人:<%=r.getUser()%>
</div>
<div>
<%=r.getContent()%>
</div>
<%
}
}
%>
</div>
</div>
<%
}
%>
</div>
<div class="col-lg-6">
<%
for (int i = col; i < num; i++) {
%>
<!-- Basic Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<%=commentList.get(i).getId()%>楼 留言人:<%=commentList.get(i).getUser()%>
<%
if (commentList.get(i).getUser().equals("Chess")) {
%>
[管理员]
<%
} else if (commentList.get(i).getUser().equals("未登录")) {
} else {
%>
[游客]
<%
}
%>
</h6>
</div>
<div class="card-body">
<%=commentList.get(i).getContent()%>
<%
//如果还没选择评论谁
if (replyId == 0) {
%>
<form method="post" action="ServletSetReply">
<div align="right">
<input type="hidden" name="idbox" value="<%=i+1%>">
<button type="submit">回复</button>
</div>
</form>
<%
}
%>
<%
//如果当前是被评论条目
if (replyId == i + 1) {
%>
<form method="post" action="ServletReply">
<div> </div>
<hr>
<div> </div>
<div align="center">
<div class="form-group">
<input class="form-control form-control-user" name="content"
placeholder="评论...">
</div>
</div>
<div align="right">
<button type="submit" class="btn btn-success btn-icon-split">
<span class="icon text-white-50">
<i class="fas fa-check"></i>
</span>
<span class="text">提交评论</span>
</button>
</div>
</form>
<%
}
for (Reply r : replyList) {
if (r.getRe() == i + 1) {
//评论区
%>
<hr>
<div>
回复人:<%=r.getUser()%>
</div>
<div>
<%=r.getContent()%>
</div>
<%
}
}
%>
</div>
</div>
<%
}
%>
</div>
</div>
</div>
<!-- /.container-fluid -->