一、游览

  在游览器地址栏输入:http://localhost:8080/index,即访问计科院首页,由于前期对数据库以及JavaBean的设计考虑不够充分,导致后期的代码臃肿,所以项目启动时对首页进行数据的填充难以实现,必须输入上述地址发出请求才可以实现(即按照实际生活中,游客访问首页的实际行为)。

二、游客

  未登陆的游客仅可以在首页查看新闻,或者点击每一个模块的More>>链接查看更多新闻,以及点击具体的某一条新闻查看它的全部信息。

三、登录

在工作人员登录后,可以添加。修改以及删除新闻

四、项目部分代码:

  本着文件的安全性考虑,第一次尝试的时候将所以的视图文件放在WEB-INF目录下,但是遇到Ueditor富文本编辑器始终无法正常显示的问题,并且未曾得到解决,无奈将所有文件移到web的根目录下。

package mySpringMVC;

import javaBean.Employee;
import javaBean.News;
import myConnection.DBConn;
import myConnection.Modify;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List; @Controller
public class MyController { //登录验证
@RequestMapping("/login")
public ModelAndView checkLogin(HttpServletRequest request){
HttpSession session = request.getSession();
Employee employee = new Employee();
employee.setName(request.getParameter("name"));
employee.setPassword(request.getParameter("password"));
Boolean isTrue = DBConn.check(employee);
session.setAttribute("isTrue",isTrue);
session.setAttribute("userName",request.getParameter("name"));
if (isTrue)
return setIndex();
else
return new ModelAndView("login");
} //注销
@RequestMapping("/loginOut")
public ModelAndView loginOut(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("isTrue",false);
return setIndex();
} //点击单一新闻的请求响应
@RequestMapping("/info")
public ModelAndView dispatcherInfo(@RequestParam("type") String type,
@RequestParam("id") String id){
News news = null;
if ("imagenews".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
else if ("academiccommunication".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
else if ("couriernews".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
else if ("dynamicofparty".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
else if ("notifydynamic".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
else if ("projectlist".equals(type)){
news = DBConn.getNewsById(type,Integer.parseInt(id));
}
return getModel(news);
} //设置网站的访问路径和全部新闻的显示,以及返回按钮访问新闻主页
@RequestMapping(value = {"/index","/back"})
public ModelAndView setIndex(){
ModelAndView modelAndView = new ModelAndView("index");
modelAndView.addObject("imagenewsList",DBConn.getNews("imagenews"));
modelAndView.addObject("academicList",DBConn.getNews("academiccommunication"));
modelAndView.addObject("couriernewsList",DBConn.getNews("couriernews"));
modelAndView.addObject("dynamicofpartyList",DBConn.getNews("dynamicofparty"));
modelAndView.addObject("notifydynamicList",DBConn.getNews("notifydynamic"));
modelAndView.addObject("projectList",DBConn.getNews("projectlist"));
return modelAndView;
} //显示该类型的所有新闻
@RequestMapping("/newsPublish")
public ModelAndView getTypeNews(@RequestParam("type") String databaseName){
ModelAndView modelAndView = new ModelAndView("newsPublish");
List<News> list = DBConn.getAllNews(databaseName);
modelAndView.addObject("list",list);
modelAndView.addObject("name",databaseName);
return modelAndView;
} //设置重定向的视图和数据
public ModelAndView getModel(News news){
ModelAndView modelAndView = new ModelAndView("info");
modelAndView.addObject("oneNews",news);
return modelAndView;
} //新闻的修改
@RequestMapping("/upData")
public ModelAndView upData(@RequestParam("type") String databaseName, @RequestParam("id") int id){
ModelAndView modelAndView = new ModelAndView("addNews");
//数据库获取待修改的新闻信息
News news = DBConn.getNewsById(databaseName,id);
//将数据发送至新闻编辑页面进行填充
modelAndView.addObject("updata",news);
modelAndView.addObject("name",databaseName);
//设置修改操作的标识
Modify.modify = true;
//设置修改的新闻id
Modify.modifyId = id;
return modelAndView;
} //添加新闻
@RequestMapping("AddNews")
public ModelAndView addNews(@RequestParam("title") String title, @RequestParam("type") String type,
@RequestParam("content") String content){ News news = new News();
news.setTitle(title);
news.setContent(content);
news.setTime(new Date()); if ("图片新闻".equals(type))
type = "imagenews";
else if ("学术交流".equals(type))
type = "academiccommunication";
else if ("新闻速递".equals(type))
type = "couriernews";
else if ("党建动态".equals(type))
type = "dynamicofparty";
else if ("通知公告".equals(type))
type = "notifydynamic";
else if ("专题列表".equals(type))
type = "projectlist";
else
type = "imagenews"; if (!Modify.modify){
//向数据库写入数据
DBConn.insertNews(news,type);
}
else{
news.setId(Modify.modifyId);
DBConn.upDataNewsById(news,type);
//重置Modify为默认状态
Modify.modify = false;
Modify.modifyId = -1;
}
return getTypeNews(type);
} //添加新闻按钮事件
@RequestMapping("addNews")
public String add(){
return "addNews";
} //删除新闻
@RequestMapping("/delete")
public ModelAndView deleteNews(@RequestParam("type") String type, @RequestParam("id") int id){
DBConn.deleteNews(type,id);
return getTypeNews(type);
}
}

MyController

package myConnection;

import javaBean.Database;
import javaBean.DatabaseName;
import javaBean.Employee;
import javaBean.News;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.InputStream;
import java.util.*; public final class DBConn {
//连接数据库 public static SqlSession getSqlSession() {
String resource = "myXML/mybatis-config.xml";
InputStream inputStream = null;
SqlSession session = null;
try {
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return session;
} //校验用户信息
public static Boolean check(Employee emp){
SqlSession sqlSession = getSqlSession();
try {
//selectOne的第一个参数为Mapper.xml的mapper的namespace+id
//参数二为映射的需要传入的参数
Employee employee = sqlSession.selectOne(
"MyMapper.selectEmployee_name", emp.getName());
if (employee!=null && employee.getPassword().equals(emp.getPassword()))
return true;
else
return false;
} finally {
free(sqlSession);
}
} //通过新闻表名获取该数据库的最新新闻
public static List<News> getNews(String databaseName){
int num = 1;
SqlSession sqlSession = getSqlSession();
//存在一个问题,直接传入String类型的参数时,纯mybatis无法获取参数,所以封装成一个Javabean
DatabaseName name = new DatabaseName();
name.setDatabaseName(databaseName);
List<News> list = sqlSession.selectList("MyMapper.selectByDatabaseName",name);
//只在首页界面显示最新的8条新闻
Collections.reverse(list);
Iterator<News> iterator = list.iterator();
List<News> temp = new ArrayList<>();
while (iterator.hasNext() && num<9){
temp.add(iterator.next());
num++;
}
free(sqlSession);
return temp;
} //通过新闻表名获取该数据库的全部新闻
public static List<News> getAllNews(String databaseName){
SqlSession sqlSession = getSqlSession();
//存在一个问题,直接传入String类型的参数时,纯mybatis无法获取参数,所以封装成一个Javabean
DatabaseName name = new DatabaseName();
name.setDatabaseName(databaseName);
List<News> list = sqlSession.selectList("MyMapper.selectByDatabaseName",name);
free(sqlSession);
return list;
} //通过id获取某一类别的某一条新闻
public static News getNewsById(String databaseName, int id){
//设置数据库名和新闻id
Database database = new Database();
database.setDatabaseName(databaseName);
database.setId(id); SqlSession sqlSession = getSqlSession();
News news = sqlSession.selectOne("MyMapper.selectById",database);
free(sqlSession);
return news;
} //释放Sqlsession
public static void free(SqlSession sqlSession){
sqlSession.close();
} //向数据库添加新闻
public static void insertNews(News news, String type) {
SqlSession sqlSession = getSqlSession();
news.setDatabaseName(type);
System.out.println(news);
int result = sqlSession.insert("MyMapper.insertNews",news);
//提交事务
sqlSession.commit();
free(sqlSession);
}
//修改新闻信息
public static void upDataNewsById(News news, String type) {
// SqlSession sqlSession = getSqlSession();
// news.setDatabaseName(type);
// System.out.println(news);
// int res = sqlSession.update("MyMapper.updateNews",news);
// sqlSession.commit();
// free(sqlSession);
deleteNews(type,news.getId());
insertNews(news,type);
} //删除新闻
public static void deleteNews(String databaseName,int id) {
SqlSession sqlSession = getSqlSession();
Database database = new Database();
database.setDatabaseName(databaseName);
database.setId(id);
int result = sqlSession.delete("MyMapper.deleteNews",database);
sqlSession.commit();
free(sqlSession);
}
}

数据库操作

五、数据库设计

自身观点:检索的时候减少遍历的长度以及条件的判断,以及将新闻分类创建多个表。但是对于新闻的JavaBean类设计存在瑕疵,应将新闻的类别作为Bean的一个属性。

百度网盘链接:链接: https://pan.baidu.com/s/14uMjrISBK-6jOnU6zCHn_w 提取码: 573u

使用SSM重新开发计科院网站的更多相关文章

  1. ssm重新开发计科院新闻网站

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. 用HTML+CSS编写一个计科院网站首页的静态网页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 用HTML+CSS实现一个计科院网站首页静态页面

    链接:https://pan.baidu.com/s/1akwyc89q3nzKDQQulaFelQ 提取码:s6ys

  4. 北工大耿丹学院16级计科院3班C语言课程助教学期总结

    很荣幸得到邹老师,周老师,以及北工大耿丹学院各位老师的认可,担任计科院3班C语言课程助教,班主任为李光杰老师,很感谢李老师一学期的帮助,使得我更好的担任助教一职.我班学生31名,很愉快的与同学们度过一 ...

  5. php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)

    php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理) 一.总结 一句话总结: 比较记忆:注意比较各种攻击的区别,比如csrf和xss,以及xss和sql,这样才能记住 1.Sql注入是什 ...

  6. 百度开平台BAE搭建网站

    百度开平台BAE搭建网站 一.注册:在百度云注册账号,并且登陆 然后实名验证 二.开始搭建 三.部署项目:我们来把我们的项目提交上去 填写百度云的账号密码 四.删除:删除部署项目 以上就是百度开平台B ...

  7. “九韶杯”河科院程序设计协会第一届程序设计竞赛 D数列重组 next_permutation

    "九韶杯"河科院程序设计协会第一届程序设计竞赛 D数列重组  next_permutation 题目 原题链接: https://ac.nowcoder.com/acm/conte ...

  8. 重庆/北京/江苏KS/快乐时时/七星/福运来菠菜电商开奖修复APP网站SSC网站程序开发php

    网站制作是指使用标识语言(markup language),通过一系列设计.建模.和执行的过程将电子格式的信息通过互联网传输,最终以图形用户界面(GUI)的形式被用户所浏览.简单来说,网页设计的目的就 ...

  9. bootstrap开发微票儿网站首页

    1.html代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...

随机推荐

  1. 【easy】Number of Segments in a String 字符串中的分段数量

    以空格为分隔符,判断一个string可以被分成几部分. 注意几种情况:(1)全都是空格 (2)空字符串(3)结尾有空格 思路: 只要统计出单词的数量即可.那么我们的做法是遍历字符串,遇到空格直接跳过, ...

  2. C++多态、虚函数、纯虚函数、抽象类、虚基类

    一.C++多态 C++的多态包括静态多态和动态多态.静态多态包括函数重载和泛型编程,动态多态包括虚函数.静态多态是指在编译期间就可以确定,动态多态是指在程序运行时才能确定. 二.虚函数 1.虚函数为类 ...

  3. linux deepin 无线网卡不能用,打不开

    今天安装了NVIDIA的大黄蜂驱动,重启,开机,无线网打不开了, (后来又看到蓝牙功能没了,忙碌中知道了wifi和蓝牙是在一起的,一损俱损!) 折腾了一下午 首先,我上deepin官网找了一圈,没解决 ...

  4. centos/redhat/ubuntu不同之处

    前言:最近用久了ubuntu,发现这个和centos还是有很大差别的,以下是我的个人总结: centos/redhat/ubuntu不同之处: 1.关系理解:centos和redhat,你可以理解为是 ...

  5. 末学者笔记--Linux权限管理

    一.权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3 ...

  6. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  7. springmvc 控制器 读取properties文件

    配置文件app.properties如下: yt.api.url=http://localhost:9000 springmvc.xml 增加配置: <context:property-plac ...

  8. Docker 踩坑记(failed to build: Get https://registry-1.docker.io/v2/microsoft/dotnet/manifests/2.1-sdk: unauthorized: incorrect username or password)

    今天看了下.net core 示例项目eShopWebOnline. 无奈在使用docker的时候总是提示一下错误信息,大致信息是用户名密码错误.但是,明明桌面右下角Docker帐号处于登录状态. E ...

  9. Redis数据类型Set

    Redis的SET是无序的String集合,它里面的元素是不会重复的. SADD,SMEMBERS SADD命令会添加新元素到SET,可以看到一次性可以添加一个或多个元素.SMEMBERS可以获取se ...

  10. PHP实现url参数组合字符串与数组相互转换

    $data = array( 'name' => 'tom', 'sex' => 1, 'channel' => 'ty' ); 数组转url参数字符串 $queryStr = ht ...