基于javaweb的SSM+Maven电子书网络图书在线小说阅读管理系统(java+ssm+jsp+javascript+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

300023342402

310023342402

320023342402

330023342402

340023342402

350023342402

基于javaweb的SSM+Maven电子书网络图书在线小说阅读管理系统(java+ssm+jsp+javascript+mysql)

项目介绍

本项目包含管理员、用户两种角色;

管理员角色包含以下功能:

登录页面,管理员管理书籍,用户管理等功能。

用户角色包含以下功能:

首页,用户登录页面,电子书查看页面,下载电子书,查看分类,用户上传图书,查看个人中心,添加反馈,查看反馈等功能。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;  5.数据库:MySql 5.7版本; 6.是否Maven项目:是;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+CSS+JavaScript

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中config.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入http://localhost:8080/ssm_ebooknet 登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
}

@RequestMapping(value = "/getBookCover")
public void getBookCover(String coverPath, HttpServletResponse response, HttpSession session) {
String basePath = session.getServletContext().getRealPath("/") + "ebooks/" + coverPath;

InputStream in = null;
BufferedInputStream bis = null;
OutputStream out = null;
BufferedOutputStream bos = null;
File file = new File(basePath);
if (!file.exists() || file.isDirectory()) {
return;
}
try {
in = new FileInputStream(basePath);
bis = new BufferedInputStream(in);
byte[] data = new byte[1024];
int bytes = 0;
out = response.getOutputStream();
bos = new BufferedOutputStream(out);
while ((bytes = bis.read(data, 0, data.length)) != -1) {
bos.write(data, 0, bytes);
}
bos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bos != null) {
bos.close();
}
if (out != null) {
out.close();
}
if (bis != null) {
bis.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

@RequestMapping(value = "/book_download")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
	bookTypes = bookService.getTypes();
model.addAttribute("bookTypes",bookTypes);
List<BookType> bookLargeTypes;
bookLargeTypes = bookService.getLargerTypes();
model.addAttribute("bookLargeTypes",bookLargeTypes);
return "backstage/bookManage";
}

@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
DateFormat df = new SimpleDateFormat("YYYY-MM-DD hh:mm:ss");
CustomDateEditor editor = new CustomDateEditor(df, true);//true表示允许为空,false反之
binder.registerCustomEditor(Date.class, editor);
}

@RequestMapping(value = "/editBookType",method=RequestMethod.POST)
public String editBookType(Model model,HttpSession session,BookType bookType) {
try {
bookType.setSmall_type_name(new String(bookType.getSmall_type_name().getBytes("UTF-8"), "UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bookTypeDao.updateBookType(bookType);
List<doBookHelper> bookList;
bookList = backStageService.getUploadBooks();
model.addAttribute("bookList",bookList);
String name = (String)PropertyConfigurer.getProperty("book_path");
System.out.println("hello, " + name);
int sumOfBooks = bookService.queryNumberOfBooks();
model.addAttribute("sumOfBooks", sumOfBooks);
List<Integer> everyTypeBooks;
everyTypeBooks = bookService.queryNumberOfSomeTypeBooks();
model.addAttribute("sumOfTypeBooks",everyTypeBooks);
String maxUploadDate = bookService.getMaxUploadDate();
model.addAttribute("maxUploadDate", maxUploadDate);
List<RankingBook> rankingBooks;
rankingBooks = bookService.queryByUploadedDate();
model.addAttribute("rankingBooks",rankingBooks);
List<RankingBook> rankingBooks1;
rankingBooks1 = bookService.queryByDownloadTimes();
model.addAttribute("rankingBooks1",rankingBooks1);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        resultMap.put("isRegistered", count);
return resultMap;
}

@RequestMapping(value = "register",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> register(@RequestBody User user) {
Map<String, Object> resultMap = new HashMap<String, Object>();
user.setRole(0);
userService.addUser(user);
logger.info("you have registered!");
return resultMap;
}
}
package com.lianshuwang.controller;


public class TestInterceptor implements HandlerInterceptor{

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//这句话是解决乱码的
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//这句话是解决乱码的
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.lianshuwang.controller;



/**
*/
@Controller
public class RegisterController {

@Autowired
private UserService userService;

private static final Log logger = LogFactory.getLog(RegisterController.class);

@RequestMapping(value = "userCodeCheck")
@ResponseBody
public Map<String,Integer> checkUserCode(String userCode) {
Map<String, Integer> resultMap = new HashMap<String, Integer>();
int count = userService.checkUserCode(userCode);
resultMap.put("isRegistered", count);
return resultMap;
}

@RequestMapping(value = "register",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> register(@RequestBody User user) {
Map<String, Object> resultMap = new HashMap<String, Object>();
user.setRole(0);
userService.addUser(user);
logger.info("you have registered!");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
			throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//这句话是解决乱码的
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//这句话是解决乱码的
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//这句话是解决乱码的
}

}
package com.lianshuwang.controller;





@Controller
public class GonggaoController {
@Autowired
GonggaoService gonggaoService;

@RequestMapping(value = "/gonggaoDetail")
String gonggaoDetail(int id,Model model,HttpSession session) {
Gonggao gonggao = gonggaoService.getGonggao(id);
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd"); //格式化当前系统日期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 */
@Controller
public class UploadController {

@Autowired
private BookService bookService;
@Autowired
private UserService userService;

private static final Log logger = LogFactory.getLog(UploadController.class);

@RequestMapping(value = "getUploadPage")
public String getUploadPage(HttpSession session) {
UserHelper userHelper = (UserHelper) session.getAttribute("userHelper");
if (null == userHelper) {
return "redirect:index";
}
logger.info("you are visiting uploading page!");
return "upload";
}

@RequestMapping(value = "doUpload", method = RequestMethod.POST)
public String doUpload(@ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOException, ParseException {
logger.info("you are uploading a book! ");
logger.info("This book is " + bookHelper.getTitle() + "!");
String fileName = bookHelper.getBookFile().getOriginalFilename();
String bookCover = bookHelper.getBookCover().getOriginalFilename();
MultipartFile bookFile = bookHelper.getBookFile();
MultipartFile coverFile = bookHelper.getBookCover();
if (bookFile.isEmpty()) {
logger.info("Uploading failed! The book you are uploading is empty!");
return "upload_failed";
} else if (coverFile.isEmpty()) {
logger.info("Uploading failed! The book cover you are uploading is empty!");
return "upload_failed";
} else {
String typeId = "" + bookHelper.getLargeType() + bookHelper.getSmallType();
int type_id = Integer.parseInt(typeId);
String format = fileName.substring(fileName.lastIndexOf('.') + 1);
List<String> typeNames;
typeNames = bookService.getTypeNames(type_id);
String filePath_pre = (String) PropertyConfigurer.getProperty("book_path");
String file_dir_pre = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(0, Thread.currentThread().getContextClassLoader().getResource("").getPath().length() - 16) + filePath_pre;


项目链接:
https://javayms.github.io?id=441122512008200nb
https://javayms.pages.dev?id=441122512008200nb