栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

手把手教你设计一个CSDN系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手把手教你设计一个CSDN系统

在CSDN发一个CSDN系统是什么体验?

大家都知道CSDN 有一个下载的模块,就是用户上传资源然后管理员会进行审核,上传资源的用户可以赚钱还可以赚积分。

那么个人可不可以开发这样的系统呢?

完全可以!

小孟前面就就可开发了一个,而且处理很详细的教程。具体的介绍如下所示:

一,技术简介

该项目非常详细的讲解了springboot,可以用于面试、毕设、学习等。
最新版的springboot2.0框架;

前端框架采用流行的Layui;

redis高性能缓存框架,存放热门数据,常用数据;

thymeleaf模版引擎;

shiro安全框架;

javamail集成,找回密码用到;

数据库连接池使用的是阿里巴巴的Druid;

全文检索lucene;

QQ第三方登录。

二,系统演示









系统不管是界面还是功能都非常的nice,如果想看详细的教程或者演示,也有对系统的本系统的学习

https://www.bilibili.com/video/BV1jJ41197BJ?p=110&vd_source=e64f225fc5daf048d2687502cb23bb3b

三,核心代码展示
@RestController
@RequestMapping(value = "/article")
public class ArticleController {

    @Autowired
    private ArcTypeService arcTypeService;

    @Autowired
    private ArticleService articleService;

    @Autowired
    private ArticleIndex articleIndex;

    
    @RequestMapping("/{type}/{currentPage}")
    public ModelAndView type(@PathVariable(value = "type",required = false) String type, @PathVariable(value = "currentPage",required = false)Integer currentPage){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        //类型的html代码
        List arcTypleList = arcTypeService.listAll(Sort.Direction.ASC,"sort");
        mav.addObject("arcTypeStr", HTMLUtil.getArcTypeStr(type,arcTypleList));
        //资源列表
        Map map = articleService.list(type,currentPage, Consts.PAGE_SIZE);
        mav.addObject("articleList",map.get("data"));
        //分页html代码
        mav.addObject("pageStr",HTMLUtil.getPagation("/article/"+type,Integer.parseInt(String.valueOf(map.get("count"))),currentPage,"该分类还没有数据..."));
        return mav;
    }

    
    @RequestMapping("/search")
    public ModelAndView search(String keywords,@RequestParam(value = "page",required = false) Integer page) throws ParseException, InvalidTokenOffsetsException, org.apache.lucene.queryparser.classic.ParseException, IOException {
        if(page==null){
            page = 1;
        }
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        //类型的html代码
        List arcTypleList = arcTypeService.listAll(Sort.Direction.ASC,"sort");
        mav.addObject("arcTypeStr", HTMLUtil.getArcTypeStr("all",arcTypleList));
        //资源列表
        List
articleList = articleIndex.search(keywords); Integer toIndex = articleList.size()>=page*Consts.PAGE_SIZE?page*Consts.PAGE_SIZE:articleList.size(); mav.addObject("articleList",articleList.subList((page-1)*Consts.PAGE_SIZE,toIndex)); mav.addObject("keywords",keywords); //分页html代码 int totalPage = articleList.size()%Consts.PAGE_SIZE==0?articleList.size()/Consts.PAGE_SIZE:articleList.size()/Consts.PAGE_SIZE+1; String targetUrl = "/article/search?keywords="+keywords; String msg = "没有关键字是 "" +keywords + "" 的相关资源,请联系站长!"; mav.addObject("pageStr",HTMLUtil.getPagation2(targetUrl,totalPage,page,msg)); return mav; } @RequestMapping("/detail/{articleId}") public ModelAndView detail(@PathVariable(value = "articleId",required = false) String articleId) throws IOException, org.apache.lucene.queryparser.classic.ParseException { ModelAndView mav = new ModelAndView(); String replace = articleId.replace(".html",""); articleService.updateClick(Integer.parseInt(replace)); Article article = articleService.getById(Integer.parseInt(replace)); if(article.getState()!=2){ return null; } mav.addObject("article",article); //类型的html代码 List arcTypleList = arcTypeService.listAll(Sort.Direction.ASC,"sort"); mav.addObject("arcTypeStr", HTMLUtil.getArcTypeStr(article.getArcType().getArcTypeId().toString(),arcTypleList)); //通过lucene分词查找相似资源 List
articleList = articleIndex.searchNoHighLighter(article.getName().replace("视频","").replace("教程","") .replace("下载","").replace("PDF","")); if(articleList!=null&&articleList.size()>0){ mav.addObject("similarityArticleList",articleList); } mav.setViewName("detail"); return mav; } @ResponseBody @RequestMapping("/isFree") public boolean isFree(Integer articleId){ Article article = articleService.getById(articleId); return article.isFree(); } }

@Controller
@RequestMapping(value = "/comment")
public class CommentController {

    @Autowired
    private CommentService commentService;

    
    @ResponseBody
    @PostMapping("/add")
    public Map add(Comment comment, HttpSession session){
        Map map = new HashMap<>();
        comment.setContent(StringUtil.esc(comment.getContent()));
        comment.setCommentDate(new Date());
        comment.setState(0);
        comment.setUser((User)session.getAttribute(Consts.CURRENT_USER));
        commentService.save(comment);
        map.put("success",true);
        return map;
    }

    
    @ResponseBody
    @RequestMapping(value = "/list")
    public Map list(Comment s_comment, @RequestParam(value = "page",required = false)Integer page){
        s_comment.setState(1);
        Page commentPage = commentService.list(s_comment,page,5, Sort.Direction.DESC,"commentDate");
        Map map = new HashMap<>();
        map.put("data", HTMLUtil.getCommentPageStr(commentPage.getContent()));          //评论的HTML代码
        map.put("total",commentPage.getTotalPages());                                   //总页数
        return map;
    }
}

@Controller
public class IndexController {

    @Autowired
    private ArcTypeService arcTypeService;

    @Autowired
    private ArticleService articleService;

    @Autowired
    private UserService userService;

    @Autowired
    private MessageService messageService;

    @Value("${imgFilePath}")
    private String imgFilePath;         //图片上传路径

    
    @RequestMapping("/")
    public ModelAndView index(){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        //类型的html代码
        List arcTypleList = arcTypeService.listAll(Sort.Direction.ASC,"sort");
        mav.addObject("arcTypeStr", HTMLUtil.getArcTypeStr("all",arcTypleList));
        //资源列表
        Map map = articleService.list("all",1, Consts.PAGE_SIZE);
        mav.addObject("articleList",map.get("data"));
        //分页html代码
        mav.addObject("pageStr",HTMLUtil.getPagation("/article/all",Integer.parseInt(String.valueOf(map.get("count"))),1,"该分类还没有数据..."));
        return mav;
    }

    
    @RequestMapping("/connect")
    public String qqCallback(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws QQConnectException {
        response.setContentType("text/html;charset=utf-8");
        AccessToken accessTokenObj = new Oauth().getAccessTokenByRequest(request);
        String accessToken = null;
        String openId = null;
        String state = request.getParameter("state");
        String session_state = (String) session.getAttribute("qq_connect_state");
        if(StringUtil.isEmpty(session_state)||!session_state.equals(state)){
            System.out.println("非法请求");
            return "redirect:/";
        }
        accessToken = accessTokenObj.getAccessToken();
        if(StringUtil.isEmpty(accessToken)){
            System.out.println("没有获取到响应参数");
            return "redirect:/";
        }
        session.setAttribute("accessToken",accessToken);
        OpenID openIDObj = new OpenID(accessToken);
        openId = openIDObj.getUserOpenID();
        UserInfo qzoneUserInfo = new UserInfo(accessToken,openId);
        UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
        if(userInfoBean==null||userInfoBean.getRet()!=0||StringUtil.isNotEmpty(userInfoBean.getMsg())){
            System.out.println("没有对应的qq信息");
            return "redirect:/";
        }
        //获取用户成功
        User currentUser = (User)session.getAttribute(Consts.CURRENT_USER);
        if(currentUser!=null&&StringUtil.isNotEmpty(currentUser.getUserName())&&StringUtil.isNotEmpty(currentUser.getEmail())&&StringUtil.isEmpty(currentUser.getOpenId())){
            currentUser.setOpenId(openId);
            userService.save(currentUser);
            session.setAttribute(Consts.CURRENT_USER,currentUser);
            return "redirect:/";
        }

        User user = userService.findByOpenId(openId);
        if(user==null){             //该用户是第一次登录,先注册
            user = new User();
            user.setOpenId(openId);
            user.setNickname(userInfoBean.getNickname());
            String imgName = DateUtil.getCurrentDateStr()+".jpg";
            downloadPicture(userInfoBean.getAvatar().getAvatarURL100(),imgFilePath+imgName);
            user.setHeadPortrait(imgName);
            user.setSex(userInfoBean.getGender());
            user.setPassword(CryptographyUtil.md5("123456",CryptographyUtil.SALT));
            user.setRegistrationDate(new Date());
            user.setLatelyLoginTime(new Date());
            //userService.save(user);
            session.setAttribute(Consts.CURRENT_USER,user);
        }else{                  //已经注册过,更新用户信息,直接将信息存入session 然后跳转
            if(!user.isOff()){     //非封号状态
                user.setNickname(userInfoBean.getNickname());
                user.setSex(userInfoBean.getGender());
                user.setLatelyLoginTime(new Date());
                userService.save(user);
                Subject subject = SecurityUtils.getSubject();
                UsernamePasswordToken token = new UsernamePasswordToken(user.getUserName(),user.getPassword());
                subject.login(token);               //登录验证
                Integer messageCount = messageService.getCountByUserId(user.getUserId());
                user.setMessageCount(messageCount);
                Article s_article = new Article();
                s_article.setUseful(false);
                s_article.setUser(user);
                session.setAttribute(Consts.UN_USEFUL_ARTICLE_COUNT,articleService.getCount(s_article,null,null,null));
                session.setAttribute(Consts.CURRENT_USER,user);
            }
        }
        return "redirect:/";
    }

    
    private void downloadPicture(String urlString,String path){
        URL url = null;
        DataInputStream dataInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            url = new URL(urlString);
            dataInputStream = new DataInputStream(url.openStream());
            fileOutputStream = new FileOutputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = dataInputStream.read(buffer))>0){
                output.write(buffer,0,length);
            }
            fileOutputStream.write(output.toByteArray());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                dataInputStream.close();
                fileOutputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

我是小孟,欢迎关注我!可以一起交流。点赞评论是对我最大支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号