这是我完成的第一个项目
1.首先说一下这个项目是干什么的,项目的源码地址在下面
2.数据库的设计
表结构很简单,当初建的时候没考虑那么全。那个外键可有可无。
接下来是项目网站的页面
1.网站首页
2.登录页面
3.后台页面
借鉴了一个后台的项目模板,大概就是这个样子。下面是pom文件和我以链接举个例子
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sz</groupId>
<artifactId>Publicity</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>product Publicity website</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.8.RELEASE</spring.version>
<jackson.version>2.9.3</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--spring 依赖 start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</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-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--利用它来处理事务问题-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring end-->
<!-- json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 新添加处理json为javaBean-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.2</version>
</dependency>
<!-- 新添加处理json为javabean end-->
<!-- 文件上传依赖 start-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 文件上传依赖 end-->
<!-- 持久层依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 日志依赖 start-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 日志依赖 end-->
<!-- 数据源的引入-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<!-- mybatis与spring整合所需的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- servlet jsp jstL 等依赖 start-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- servlet jsp jstL 等依赖 end-->
<!-- 处理时间格式-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
<!-- mybatis 分页依赖 start-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<!-- apache 用于MD5加密-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-maven-plugin -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>Publicity</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</plugin>
</plugins>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
链接模块的表结构
controller层
package com.sz.controller;
import com.sz.pojo.NewLink;
import com.sz.service.SsmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/link")
public class SsmController {
/**
*链接控制层
*/
@Autowired
SsmService ssmService;
@RequestMapping("/find")
public String findAll(Model model){
model.addAttribute("map", ssmService.queryAllDate());
return "link";
}
/**
* 修改前查询操作
* @param id
* @param model
* @return
*/
@RequestMapping("/findbyid")
public String findById(Integer id, Model model){
model.addAttribute("map", ssmService.queryDateById(id));
return "linkupdate";
}
//修改操作
@RequestMapping("/updLink")
public String updUserById(String text, String link, Integer id){
NewLink newLink = new NewLink();
newLink.setText(text);
newLink.setLink(link);
newLink.setId(id);
ssmService.updLink(newLink);
return "linkupdate";
}
@RequestMapping("/findBefore")
public String findLink(Model model){
model.addAttribute("map", ssmService.queryAllDate());
return "index";
}
}
service层接口
public interface SsmService {
Map<String, NewLink> queryAllDate();
//更新
void updLink(NewLink newLink);
NewLink queryDateById(Integer id);
}
service层实现类
package com.sz.service.impl;
import com.sz.mapper.SsmMapper;
import com.sz.pojo.NewLink;
import com.sz.service.SsmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.xml.ws.ServiceMode;
import java.util.HashMap;
import java.util.Map;
@Service("ssmService")
public class SsmServiceImpl implements SsmService {
@Autowired
SsmMapper ssmMapper;
@Override
public Map<String, NewLink> queryAllDate() {
Map<String, NewLink> map = new HashMap<>();
for (int i = 1; i <= 6; i ++){
NewLink newLink = ssmMapper.queryAllDate(i);
map.put(i+"" ,newLink);
}
return map;
}
@Override
public void updLink(NewLink newLink) {
ssmMapper.updLink(newLink);
}
@Override
public NewLink queryDateById(Integer id) {
return ssmMapper.queryDateById(id);
}
}
这里for循环里的6应该用查询出来count代替的。
mapper层接口
public interface SsmMapper {
NewLink queryAllDate(Integer id);
//更新前查询
NewLink queryDateById(Integer id);
//更新
void updLink(NewLink newLink);
}
mapper.xml
<?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.sz.mapper.SsmMapper">
<select id="queryAllDate" parameterType="int" resultType="com.sz.pojo.NewLink">
select * from new_link
where id = #{id}
</select>
<select id="queryDateById" resultType="com.sz.pojo.NewLink">
select * from new_link
where id = #{id}
</select>
<!--更新-->
<update id="updLink" parameterType="com.sz.pojo.NewLink">
update new_link set text=#{text},link=#{link} where id=#{id}
</update>
</mapper>
数据库配置 db.properties
jdbc.url=jdbc:mysql://localhost:3306/airuiqi_website?characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=自己的数据库用户名
jdbc.password=自己的用户名密码
没有密码的置空不写就行了。
jsp页面
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>爱蕊崎产品宣传网站</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="all,follow">
<!-- Bootstrap CSS-->
<link rel="stylesheet" href="../page/behindPage/vendor/bootstrap/css/bootstrap.min.css">
<!-- Font Awesome CSS-->
<link rel="stylesheet" href="../page/behindPage/vendor/font-awesome/css/font-awesome.min.css">
<!-- Fontastic Custom icon font-->
<link rel="stylesheet" href="../page/behindPage/css/fontastic.css">
<!-- Google fonts - Poppins -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,700">
<!-- theme stylesheet-->
<link rel="stylesheet" href="../page/behindPage/css/style.default.css" id="theme-stylesheet">
<!-- Custom stylesheet - for your changes-->
<link rel="stylesheet" href="../page/behindPage/css/custom.css">
<!-- Favicon-->
<link rel="shortcut icon" href="../page/behindPage/img/favicon.ico">
<!-- Tweaks for older IEs-->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
<style type="text/css">
a:link {
color: black;
/*未访问的链接颜色*/
}
a:visited {
color: red;
/*已访问的链接颜色*/
}
a:hover {
color: blue;
/*鼠标移动到链接的颜色*/
text-decoration: underline;
}
a:active {
color: orange;
/*鼠标点击时的颜色*/
}
a {
text-decoration: none;
/*去掉下划线*/
}
h1.h4{
text-shadow: 5px 5px 5px #FF0000;
}
</style>
</head>
<body>
<div class="page">
<!-- Main Navbar-->
<header class="header">
<nav class="navbar">
<!-- Search Box 准备用留言板的,到时候看看用不用-->
<div class="search-box">
<button class="dismiss"><i class="icon-close"></i></button>
<form id="searchForm" action="#" role="search">
<input type="search" placeholder="What are you looking for..." class="form-control">
</form>
</div>
<div class="container-fluid">
<div class="navbar-holder d-flex align-items-center justify-content-between">
<!-- Navbar Header-->
<div class="navbar-header">
<!-- Navbar Brand -->
<a href="#" class="navbar-brand d-none d-sm-inline-block">
<div class="brand-text d-none d-lg-inline-block"><span>爱蕊崎</span><strong>后台管理</strong></div>
<div class="brand-text d-none d-sm-inline-block d-lg-none"><strong>BD</strong></div>
</a>
<!-- Toggle Button--><a id="toggle-btn" href="#" class="menu-btn active"><span></span><span></span><span></span></a>
</div>
<!-- Navbar Menu -->
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
<ul aria-labelledby="notifications" class="dropdown-menu">
<li>
<a rel="nofollow" href="#" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-envelope bg-green"></i>You have 6 new messages </div>
<div class="notification-time"><small>4 minutes ago</small></div>
</div>
</a>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-twitter bg-blue"></i>You have 2 followers</div>
<div class="notification-time"><small>4 minutes ago</small></div>
</div>
</a>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-upload bg-orange"></i>Server Rebooted</div>
<div class="notification-time"><small>4 minutes ago</small></div>
</div>
</a>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item">
<div class="notification">
<div class="notification-content"><i class="fa fa-twitter bg-blue"></i>You have 2 followers</div>
<div class="notification-time"><small>10 minutes ago</small></div>
</div>
</a>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item all-notifications text-center"> <strong>view all notifications </strong></a>
</li>
</ul>
</li>
<!-- Messages -->
<li class="nav-item dropdown"> <a id="messages" rel="nofollow" data-target="#" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link"><i class="fa fa-envelope-o"></i><span class="badge bg-orange badge-corner">${sessionScope.get("count")}</span></a>
</li>
<!-- Languages dropdown -->
<li class="nav-item dropdown">
<ul aria-labelledby="languages" class="dropdown-menu">
<li>
<a rel="nofollow" href="#" class="dropdown-item"> <img src="../page/behindPage/img/flags/16/DE.png" alt="English" class="mr-2">German</a>
</li>
<li>
<a rel="nofollow" href="#" class="dropdown-item"> <img src="../page/behindPage/img/flags/16/FR.png" alt="English" class="mr-2">French </a>
</li>
</ul>
</li>
<!-- Logout -->
<li class="nav-item">
<a href="login.jsp" class="nav-link logout"> <span class="d-none d-sm-inline">退出登录</span><i class="fa fa-sign-out"></i></a>
</li>
</ul>
</ul>
</div>
</div>
</nav>
</header>
<div class="page-content d-flex align-items-stretch">
<!-- Side Navbar -->
<nav class="side-navbar">
<!-- Sidebar Header-->
<div class="sidebar-header d-flex align-items-center">
<div class="avatar"><img src="${ctx}/page/behindPage/img/logo01.png" alt="..." class="img-fluid rounded-circle"></div>
<div class="title">
<!--以后要调成用户名一样-->
<h1 class="h4">${sessionScope.get("user").username}</h1>
<p>Welcome</p>
</div>
</div>
<!-- Sidebar Navidation Menus--><span class="heading">功能列表</span>
<ul class="list-unstyled">
<li class="active">
<a href="${ctx}/user/find?id=${sessionScope.get("user").id}"> <i class="icon-home"></i>用户管理 </a>
</li>
<li>
<a href="${ctx}/product/find"> <i class="icon-grid"></i>产品管理 </a>
</li>
<li>
<a href="${ctx}/gszixun/find"> <i class="fa fa-bar-chart"></i>公司咨讯 </a>
</li>
<li>
<a href="${ctx}/companyNew/find"> <i class="icon-padnote"></i>公司简介 </a>
</li>
<li>
<a href="${ctx}/message/find"> <i class="icon-padnote"></i>留言板管理 </a>
</li>
<li>
<a href="${ctx}/link/find"> <i class="icon-padnote"></i>链接管理 </a>
</li>
<li>
<a href="${ctx}/page/login.jsp"> <i class="icon-interface-windows"></i>登录页面 </a>
</li>
</ul>
</nav>
<div class="content-inner">
<!-- Page Header-->
<header class="page-header">
<div class="container-fluid">
<h2 class="no-margin-bottom">用户管理</h2>
</div>
</header>
<body>
<table class="table table-hover" border="1px" >
<tr>
<th>序号</th>
<th>名称</th>
<th>链接</th>
<th>操作</th>
</tr>
<c:forEach items="${map}" var="obj" varStatus="status">
<tr>
<td>
<p style="text-align: center; font-size: medium;">
${status.count}
</p>
</td>
<td>
<p style="text-align: center; font-size: medium;">
${obj.value.text}
</p>
</td>
<td>
<a href="">${obj.value.link}</a>
</td>
<td>
<a href="${ctx}/link/findbyid?id=${obj.value.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
</body>
<!-- Page Footer-->
<footer class="main-footer">
<div class="container-fluid">
<div class="row">
<div class="col-sm-6">
</div>
<div class="col-sm-6 text-right">
<p></p>
<!-- Please do not remove the backlink to us unless you support further theme's development at https://bootstrapious.com/donate. It is part of the license conditions. Thank you for understanding :)-->
</div>
</div>
</div>
</footer>
</div>
</div>
</div>
<!-- JavaScript files-->
<script src="../page/behindPage/vendor/jquery/jquery.min.js"></script>
<script src="../page/behindPage/vendor/popper.js/umd/popper.min.js">
</script>
<script src="../page/behindPage/vendor/bootstrap/js/bootstrap.min.js"></script>
<script src="../page/behindPage/vendor/jquery.cookie/jquery.cookie.js">
</script>
<script src="../page/behindPage/vendor/chart.js/Chart.min.js"></script>
<script src="../page/behindPage/vendor/jquery-validation/jquery.validate.min.js"></script>
<script src="../page/behindPage/js/charts-home.js"></script>
<!-- Main File-->
<script src="../page/behindPage/js/front.js"></script>
</body>
</html>
大概就这么些了,下面说两句
这个项目还是有待改进的,下面是我的github上的项目地址
https://gitee.com/zhoushiwangchao/SSMairuiqiwebsite
github地址:https://github.com/zhoushibo-111/SSMairuiqiwebsite