package com.utils;
import cn.hutool.cron.CronUtil;
import cn.hutool.cron.task.Task;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.annotation.RequestMapping;
import javax.servlet.*;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import java.util.*;
@WebServlet("/")
public class DispatcherServlet extends HttpServlet {
public final static Map<String, RequestMap> map = new HashMap<>();
public final static List<String> staticList = new ArrayList<>();
@Override
public void init(ServletConfig config) throws ServletException {
ServletContext servletContext = config.getServletContext();
String realPath = servletContext.getRealPath("/");
// servlet的目录
File file = new File(realPath + "\\WEB-INF\\classes\\com\\controller");
// 获取servlet目录下的所有类
String[] list = file.list();
File staticFile = new File(realPath);
FileUtil.itemFile(staticFile, staticList, realPath);
assert list != null;
for (String string : list) {
// 截取类名称
String name = string.substring(0, string.lastIndexOf("."));
try {
// 通过反射获取Class对象
Class<?> c = Class.forName("com.controller." + name);
// 判断该类上是否有RequestMapping注解
String value = "";
if (c.isAnnotationPresent(RequestMapping.class)) {
// 获取注解,进行强制转换成RequestMapping对象
RequestMapping annotation = c.getAnnotation(RequestMapping.class);
// 获取RequestMapping对象的值
value += annotation.value();
}
// 获取所有的方法
// 没有就调用父类的service方法
Method[] methods = c.getDeclaredMethods();
// 循环遍历判断是否RequestMapping这个注解
for (Method method : methods) {
if (method.isAnnotationPresent(RequestMapping.class)) {
RequestMapping meRequestMapping = method.getAnnotation(RequestMapping.class);
String requestMethod = meRequestMapping.method();
String meValue = meRequestMapping.value();
// 创建继承HttpServlet的类
Object o = c.newInstance();
// 添加Servlet
map.put(value + meValue, new RequestMap(method, o, requestMethod));
}
}
} catch (ClassNotFoundException | IllegalArgumentException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
selectId(ApiDataUtils.INFORMATION);
selectId(ApiDataUtils.ROOT_ID);
selectId(ApiDataUtils.ROOT_DETAIL_ID);
CronUtil.schedule("*/1 * * * *", (Task) () -> {
System.out.println("每一分钟执行一次,图片删除");
try {
List<String> headPhoto = Db.use().query("select head_photo from information where head_photo is not null and head_photo != ''", String.class);
String path = getServletContext().getRealPath("/page/image/head");
File staticPath = new File(path);
if (staticPath.exists() && headPhoto != null){
String[] fileList = staticPath.list();
if (fileList != null){
for (String s : fileList) {
if (!headPhoto.contains("/cartoon/page/image/head/" + s)){
boolean delete = new File(staticPath, s).delete();
if (delete){
System.out.println("成功删除-" + s + "-文件");
}
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
});
CronUtil.setMatchSecond(true);
CronUtil.start();
super.init(config);
}
public void selectId(int choose) {
Entity entity = null;
try {
switch (choose) {
case ApiDataUtils.INFORMATION:
entity = Db.use().queryOne("select * from information order by id desc limit 1");
if (entity == null) {
ApiDataUtils.INFORMATION_ID = 1;
} else {
ApiDataUtils.INFORMATION_ID = entity.getInt("id") + 1;
}
break;
case ApiDataUtils.ROOT:
entity = Db.use().queryOne("select * from root order by id desc limit 1");
if (entity == null) {
ApiDataUtils.ROOT_ID = 1;
} else {
ApiDataUtils.ROOT_ID = entity.getInt("id") + 1;
}
break;
case ApiDataUtils.ROOT_DETAIL:
entity = Db.use().queryOne("select * from root_detail by id desc limit 1");
if (entity == null) {
ApiDataUtils.ROOT_DETAIL_ID = 1;
} else {
ApiDataUtils.ROOT_DETAIL_ID = entity.getInt("id") + 1;
}
break;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
Set<String> keySet = map.keySet();
String uri = req.getRequestURI().replace(req.getContextPath(), "");
if (keySet.contains(uri)) {
RequestMap requestMap = map.get(uri);
if (req.getMethod().toLowerCase().equals(requestMap.getRequestMethod())) {
try {
resp.setContentType("application/json;charset=utf-8");
requestMap.getMethod().invoke(requestMap.getObject(), req, resp);
} catch (IllegalAccessException | InvocationTargetException | IllegalArgumentException e) {
e.printStackTrace();
resp.setStatus(500);
resp.setContentType("text/html;charset=UTF-8");
ServletOutputStream outputStream = resp.getOutputStream();
outputStream.write("<!doctype html><html lang=\"zh\"><head><title>HTTP状态 500 - 内部服务器错误</title><style type=\"text/css\">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP状态 500 - 内部服务器错误</h1>".getBytes(StandardCharsets.UTF_8));
outputStream.write("<p><b>注意</b> 主要问题的全部在控制台里查看</p><hr class=\"line\" /><h3>Apache Tomcat/8.5.76</h3></body></html>".getBytes(StandardCharsets.UTF_8));
outputStream.close();
}
} else {
resp.setStatus(405);
resp.setContentType("text/html;charset=UTF-8");
OutputStream writer = resp.getOutputStream();
没有合适的资源?快使用搜索试试~ 我知道了~
基于javaweb漫画管理系统
共2275个文件
mtn:614个
json:328个
html:266个
需积分: 5 0 下载量 102 浏览量
2023-07-04
10:42:18
上传
评论
收藏 238.66MB ZIP 举报
温馨提示
使用javaweb实现的漫画管系统
资源推荐
资源详情
资源评论
收起资源包目录
基于javaweb漫画管理系统 (2275个子文件)
DispatcherServlet.class 12KB
DispatcherServlet.class 12KB
FileUtil.class 10KB
FileUtil.class 10KB
ComicServiceImpl.class 7KB
ComicServiceImpl.class 7KB
UserServiceImpl.class 6KB
UserServiceImpl.class 6KB
InformationDaoImpl.class 5KB
InformationDaoImpl.class 5KB
UserController.class 5KB
UserController.class 5KB
ComicController.class 5KB
ComicController.class 5KB
ComicDaoImpl.class 5KB
ComicDaoImpl.class 5KB
InitFilter.class 4KB
InitFilter.class 4KB
BorrowDaoImpl.class 4KB
BorrowDaoImpl.class 4KB
Information.class 3KB
Information.class 3KB
BorrowController.class 3KB
BorrowController.class 3KB
BorrowServiceImpl.class 3KB
BorrowServiceImpl.class 3KB
AuthorityFilter.class 2KB
AuthorityFilter.class 2KB
ApiDataUtils.class 2KB
ApiDataUtils.class 2KB
CrossFilter.class 2KB
CrossFilter.class 2KB
AdvanceDaoImpl.class 2KB
AdvanceDaoImpl.class 2KB
ComicExcel.class 2KB
ComicExcel.class 2KB
RequestMap.class 2KB
RequestMap.class 2KB
CodeImageController.class 2KB
CodeImageController.class 2KB
Comic.class 2KB
Comic.class 2KB
InitFilter$2.class 1KB
InitFilter$2.class 1KB
InitFilter$1.class 1KB
InitFilter$1.class 1KB
Root.class 1KB
Root.class 1KB
LinkInfoRoot.class 1KB
LinkInfoRoot.class 1KB
ComicExcelListener.class 1KB
ComicExcelListener.class 1KB
RootDetail.class 1KB
RootDetail.class 1KB
AuthorityDaoImpl.class 1000B
AuthorityDaoImpl.class 1000B
UserService.class 954B
UserService.class 954B
InformationDao.class 915B
InformationDao.class 915B
ComicSort.class 874B
ComicSort.class 874B
ComicService.class 865B
ComicService.class 865B
AdvancedController.class 848B
AdvancedController.class 848B
ComicDao.class 787B
ComicDao.class 787B
JDBCListener.class 786B
JDBCListener.class 786B
AdvanceServiceImpl.class 621B
AdvanceServiceImpl.class 621B
BorrowDao.class 613B
BorrowDao.class 613B
RequestMapping.class 531B
RequestMapping.class 531B
BorrowService.class 301B
BorrowService.class 301B
AdvancedDao.class 226B
AdvancedDao.class 226B
AuthorityDao.class 218B
AuthorityDao.class 218B
AdvanceService.class 191B
AdvanceService.class 191B
layui.css 59KB
layui.css 59KB
admin.css 25KB
admin.css 25KB
layim.css 15KB
layim.css 15KB
layer.css 14KB
layer.css 14KB
template.css 10KB
template.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layim.css 9KB
layim.css 9KB
laydate.css 7KB
laydate.css 7KB
共 2275 条
- 1
- 2
- 3
- 4
- 5
- 6
- 23
资源评论
丈二~~
- 粉丝: 38
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现电磁优化计算功能,进行线型规划优化电磁设计.rar
- 基于matlab实现带精英策略的非支配排序遗传算法matlab 源码.rar
- 基于matlab实现差分进化算法,最新的用于替代遗传算法,是以后的主要发展方法.rar
- VSCode配置c/c++环境教程.md
- 基于matlab实现标准合作型协同进化遗传算法matlab源程序
- 七下人教.zip
- 基于matlab实现本份代码能对图像进行gabor滤波处理,结合指纹方向图以及指纹沟壑频率特性,对指纹图像进行增强.rar
- 基于matlab实现RBM神经网络实现了手写数字体识别的GUI程序.rar
- 基于matlab实现蝙蝠算法优化相关向量机建模对数据进行建模和预测.rar
- 基于matlab实现编写的禁忌搜索算法,解决了TSP问题,对初学者有重要的参考价值.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功