目录
1.技术选型
2.功能设计
3.系统架构
4.开发流程
5.开发背景
6.开发目标
7.技术可行性
8.功能可行性
8.1功能图
8.2 界面设计
8.3 部分代码
构建一个基于Spring Boot、Java Web、J2EE、MySQL数据库以及Vue前后端分离的科研成果网站,可以实现科研信息的发布、查看以及科研成果论文的下载等功能。以下是一个简要的方案概述:
-
1.技术选型
- 后端:使用Spring Boot框架,集成Spring MVC、MyBatis等技术栈,提供RESTful API接口。
- 数据库:采用MySQL数据库,用于存储科研成果、论文等数据。
- 前端:使用Vue.js框架,实现前后端分离,提供丰富的用户界面和交互体验。
- 小程序:可额外开发小程序版本,利用Vue或微信小程序原生开发,方便移动端用户访问。
-
2.功能设计
- 信息发布:管理员可发布科研成果、新闻公告等信息。
- 成果展示:用户可浏览各类科研成果,包括详细信息展示。
- 论文下载:提供科研成果相关的论文下载链接或直接在线预览功能。
- 用户管理:支持用户注册、登录,不同用户角色(如管理员、普通用户)拥有不同权限。
-
3.系统架构
- 采用B/S架构,用户通过浏览器访问网站。
- 前端通过Ajax请求与后端进行数据交互。
- 后端处理业务逻辑, 与MySQL数据库进行交互,返回数据给前端展示。
-
4.开发流程
- 需求分析:明确网站需要实现的具体功能。
- 系统设计:包括数据库设计、接口设计、前端页面设计等。
- 编码实现:按照设计文档进行前后端开发。
- 测试部署:完成系统测试后,部署到服务器上线运行。
5.开发背景
计算机毕业设计科研成果网站开发背景主要源于科研规模和复杂度的增加,以及科研成果管理的迫切需求。随着科研活动产生的数据量庞大,且越来越多的成果涌现,需要有效的数据管理系统来对高校科研成果进行处理、审核和发布。传统的科研成果管理方式存在繁琐的流程、信息不透明等问题,因此,开发一套系统化、高效便捷的管理工具成为必然选择。此外,随着数字化转型的深入,网站作为展示形象、传递信息的重要平台,其开发与设计也受到了越来越多的关注。在此背景下,计算机毕业设计科研成果网站的开发旨在实现科研成果的数字化、网络化、智能化管理,提高管理效率和质量 。
6.开发目标
具体目标包括:
- 用户管理与认证:确保申报过程的安全性与合规性,实现用户身份认证与权限管理。1
- 文件信息管理:构建灵活的文件信息管理系统,支持多种格式文件的上传、存储与检索,提升申报材料的处理效率。1
- 成果展示与交流:建立科技成果分类展示机制,便于科研人员快速了解领域内最新成果,促进学术交流与合作。12
- 资源与服务集成:集成友情链接功能,连接国内外重要科研资源与服务,拓宽科研人员的信息获取渠道。
7.技术可行性
基于JAVA、VUE、MYSQL的科研网站技术可行性分析表明,该项目在技术选型、开发环境和工具选择等方面均具备可行性。
- 技术选型:项目采用Java作为后端开发语言,利用其强大的跨平台能力和丰富的生态系统;前端采用Vue.js框架,实现响应式界面和丰富的用户交互;数据库选用MySQL,确保数据的稳定性和高效性12。
- 开发环境与工具:开发环境选择JDK1.8和Tomcat8,开发工具为Idea2020,数据库管理工具为Navicat。这些工具和环境的选择均符合当前Java Web开发的主流标准45。
- 技术可行性结论:综上所述,基于JAVA、VUE、MYSQL的科研网站在技术上是可行的,能够满足科研机构对于科研管理的需求,提高科研效率。
8.功能可行性
该科研成果管理网站主要服务于高校及科研机构,具备全面的功能以满足不同角色的需求。具体功能包括:
- 用户登录注册:支持科研人员、科研秘书、管理员等不同角色的登录注册,确保系统安全。
- 个人信息管理:用户可以维护个人资料,包括密码修改、个人信息完善等。
- 科研成果管理:科研人员可以提交、查看和管理自己的科研成果,包括初审、终审状态追踪。
- 科研项目管理:支持科研项目的申报、审批、进度跟踪及成果发布。
- 系统通知管理:用户可以查看系统通知,及时了解科研动态和审批结果。
- 反馈信息管理:提供反馈渠道,用户可以向系统提交问题和建议,优化用户体验。
8.1功能图
8.2 界面设计
8.3 部分代码
package com.controller.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* Action 基类
*/
@Controller
public class BaseAdminAction {
/* 日志 */
protected final Log log = LogFactory.getLog(getClass());
/* 获取基本环境 */
public Map<String, String[]> getParameters() {// 封装为Map的requestParameters
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attrs.getRequest().getParameterMap();
}
public HttpServletRequest getRequest() {
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attrs.getRequest();
}
public HttpSession getSession() {
HttpSession session = null;
try {
session = this.getRequest().getSession();
} catch (Exception e) {
}
return session;
}
}
package com.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringBootConfiguration;
/**
* springboot项目启动之后自动启动默认浏览器
* SpringBoot有自带的监听任务,只需实现对应的接口,调用cmd启动浏览器即可
*
* @author Levi
*/
@SpringBootConfiguration
public class AutoStartProjectInDefaultBrowser implements CommandLineRunner {
//注入项目的端口号
@Value("${server.port}")
private String port;
//注入项目的名称
@Value("${server.servlet.context-path}")
private String context_path;
/**
* springboot自带的监听任务
*
* @param args
* @throws Exception
*/
@Override
public void run(String... args) throws Exception {
try {
Runtime.getRuntime().exec("cmd /c start http://localhost:" + port + context_path+"/web/index.action");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
package com.config;
import com.interceptor.AdminLoginInterceptor;
import com.interceptor.WebLoginInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//拦截器
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
/**
* 通过@Bean注解,将我们定义的拦截器注册到Spring容器
*
* @return
*/
/* @Bean
public HandlerInterceptor loginInterceptor(){
return new WebLoginInterceptor();
}
*/
//注入项目的名称
@Value("${server.servlet.context-path}")
private String context_path;
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//System.out.println(context_path);
//M do后辍
//WEB action后辍
//先将静态资源排除
//后台访问拦截器
registry.addInterceptor(new AdminLoginInterceptor())
.excludePathPatterns(
"/assets/**"
, "/upfiles/**"
, "/admin/login/login.action"
, "/admin/users/getById.action"
)//排除的连接
.addPathPatterns("/admin/**")//未登录所有连接不可以访问
;
//前台访问拦截器 普通 用户
registry.addInterceptor(new WebLoginInterceptor())
.addPathPatterns(
"/web/preOrders.action",
"/web/addOrders.action",
"/web/myOrders.action",
"/web/cancel.action",
"/web/prePwd.action",
"/web/editpwd.action",
"/web/preInfo.action",
"/web/editinfo.action"
)//未登录所有连接不可以访问
;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ taglib
prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%><!DOCTYPE html>
<html>
<head>
<title></title>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf8"/>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/layui/css/layui.css">
<script src="assets/js/jquery-3.2.1.js"></script>
</head>
<body>
<div class="layui-row">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>添加</legend>
</fieldset>
<form class="layui-form" method="post" action="admin/banner/add.action"
name="myform" onsubmit="return check()" method="post">
<div class="layui-form-item">
<label class="layui-form-label">主题名称</label>
<div class="layui-input-block"><input type="text" lay-verify="required" required="required"
class="layui-input" placeholder="请输入主题名称"
name="bannername" style="width: 160px" id="bannername"/></div>
</div>
<div class="layui-form-item">
<div class="layui-input-block"><input type="submit" class="layui-btn" lay-submit="" name="Submit"
value="提交"/>
</div>
</div>
</form>
</div>
<script src="assets/layui/layui.js"></script>
<script>
function check() {
if (document.myform.bannername.value == '') {
alert('请输入主题名称');
return false;
}
}
layui.use('form', function () {
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
//……
//但是,如果你的HTML是动态生成的,自动渲染就会失效
//因此你需要在相应的地方,执行下述方法来进行渲染
form.render();
});
</script>
</body>
</html>