ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Spring Boot校园新闻网站开发实战:从需求到部署全流程解析

2026/8/31 14:31:02 拓冰建站 浏览量
Spring Boot校园新闻网站开发实战:从需求到部署全流程解析 简介这是一套基于SpringBoot开发的校园新闻网站完整项目资源面向Java Web初学者与课程设计学生解决高校新闻信息管理数字化、流程化需求。资源包含可直接运行的源码、配套毕业论文及答辩PPT覆盖管理员与用户双角色功能管理员端支持新闻分类、内容发布、留言板与论坛管理用户端提供新闻浏览、留言反馈、论坛互动等核心场景体现B/S架构与面向对象设计思想。压缩包共767个文件含98个Java业务逻辑类、153个JS前端交互脚本、40个Vue组件、44个CSS样式文件、79个GIF动效资源及1个SQL建表脚本整体27.4MB结构清晰便于模块化学习与二次开发。目前已有49人下载学习资源中保留了.bak备份文件与.bat一键部署脚本有助于理解开发迭代过程与环境快速搭建是掌握SpringBoot全栈开发流程的典型教学案例。 接到一个springboot校园新闻网站的完整项目时我的第一反应是这活儿不复杂但也绝对不能小看。原因很简单新闻网站这个选题听起来无非是发新闻、看新闻、管新闻可真要把功能、表、页面、部署、论文、答辩这些全部串起来形成一个能交付的完整项目里面需要做的决策和规避的坑比想象中多得多。这篇就把我做这类项目时的完整思路、技术选型依据、编码实现细节以及围绕论文和答辩材料的组织经验一次性讲清楚。1. 校园新闻网站的需求梳理与功能边界划分1.1 校园场景下的核心诉求任何一个项目动工前第一件事不是建工程而是把需求想明白。校园新闻网站表面看是个能看新闻的网页但放到真实校园场景里它至少得回答下面几个问题谁来看学生、老师、校外访客不同身份看到的权限和内容有没有区别。谁来发是只有一个超级管理员统一发还是各院系有各自的新闻管理员。发完之后要不要审核很多校园系统对内容安全有要求发布和审核最好是两个动作。新闻怎么组织按栏目分还是按部门分要不要置顶、推荐、热点排序。历史新闻怎么处理要不要全文检索按时间归档还只是简单的时间倒序列表。把这些想清楚后会发现校园新闻网站本质上是一个内容管理系统CMS核心链路是新闻录入 - 分类归档 - 展示浏览 - 后台管理。围绕这条链路一套基础且完整的功能清单大致如下前台模块新闻列表展示、栏目分类浏览、关键词搜索、新闻详情、热门点击排行、置顶与推荐位。后台模块管理员登录、新闻发布、新闻编辑、新闻删除、栏目管理、推荐位配置、数据统计。用户模块普通用户浏览无需登录后台管理需要管理员账号精细一些可以加角色区分超级管理员、栏目编辑。我在实际操作中倾向于一开始就做一个标准三端结构前端展示端、后台管理端、API服务端。如果项目是给毕业设计或课程答辩用的这样的划分在论文里也好写系统分前端展示、后台管理、服务接口三层这句话放在系统设计那一章很有说服力。1.2 功能模块的优先级排序明确了场景下一步是给功能排优先级。很多新手容易犯的错误是上来就想做一堆炫酷功能比如全文搜索、点赞评论、用户注册积分。不是说这些不能做而是做这些之前核心功能必须稳定。我推荐的第一优先级功能只有三个新闻的增删改查含分页和栏目筛选。栏目分类管理栏目变更时新闻归属要一致。管理员登录与权限拦截这是后台安全的底线。从这三个功能延展出去第一版跑通之后再加搜索、置顶、点击量统计、数据可视化这些增强功能。这个顺序的好处是无论后续有多少时间你都有一个能演示、能跑通、能写进论文的完整版本兜底。以我经手的一个项目为例开始的时候学生花了两周时间折腾用户注册和评论系统结果新闻列表页还没做利索。后来我把注册评论全部砍掉先把新闻发布的完整闭环做出来紧接着补了搜索和点击统计实际只用了三天系统的完整度反而大大提升。原因很好理解核心闭环打通了整个系统的骨架才立得住外围功能都是长在骨架上的肉骨架不行肉再多也是散的。提示做这个项目时建议先列出功能清单然后给每个功能标上P0必须有、P1应该有、P2加分项。P0必须在第一版完成P1看时间安排P2宁可不做也不能影响P0的稳定性。2. 技术选型与工程搭建为什么这样组合2.1 技术栈的选择逻辑Spring Boot校园新闻网站的技术栈这几年已经形成了非常固定的标准组合我从实际易用性出发推荐这样一套层次选型理由开发框架Spring Boot 2.7.x稳定资料多兼容性好适合教学和毕设持久层MyBatis-Plus单表CRUD不用写SQL复杂查询也容易控制数据库MySQL 5.7/8.0主流关系型数据库部署简单配套工具多模板引擎ThymeleafSpring Boot官方支持好前后端不分离时最顺手前端框架Bootstrap jQuery上手门槛低页面做出来规整答辩展示不吃力构建工具MavenJava项目事实标准IDE内置无需额外学习成本JDK版本JDK 8 或 JDK 11兼容性最好Lombok等常用库支持稳定这里要解释一下为什么我刻意绕开了热门的前后端分离方案。不是说VueSpring Boot不好而是校园新闻网站这种项目页面形态偏内容展示如果用前后端分离需要额外处理跨域、Token鉴权、前端路由、打包部署等一系列问题对于以展示信息为核心的网站来说是平白增加复杂度。Thymeleaf直接在服务端渲染页面一套工程跑到底做新闻列表、详情页这类场景非常自然而且对于答辩时讲解技术架构也简单直接——服务端渲染SEO友好首屏加载快这句话老师挑不出毛病。如果你将来想升级技术栈Spring Boot作为后端骨架完全可以保留只把前端换成Vue留好RESTful接口后端架构不会浪费。所以先用Thymeleaf不等于低端而是最合适当前项目形态的选择。2.2 工程目录结构与初始化细节项目建议命名为类似campus-news这样见名知意的名字。Maven坐标用com.campus作为groupIdartifactId为campus-news包名按分层结构组织。我自己的习惯是com.campus.news ├── controller # 控制层接收请求返回页面或JSON ├── service # 业务逻辑层接口实现 ├── mapper # MyBatis-Plus持久层接口 ├── entity # 数据库实体 ├── dto # 前端交互/接口传输对象 ├── config # 配置类如拦截器、跨域配置 ├── common # 通用返回结果、异常处理、常量 └── CampusNewsApplication.java工程初始化时有几个细节值得注意第一pom.xml里的父依赖建议用spring-boot-starter-parent固定版本比如2.7.18不要用SNAPSHOT或RELEASE这种不固定版本否则今天能跑明天可能就拉不到依赖了。第二MyBatis-Plus和Spring Boot的版本兼容非常关键。如果用MyBatis-Plus 3.5.x配Spring Boot 2.7.x基本不会有问题但如果你把Spring Boot升到3.x且JDK升到17就需要注意MyBatis-Plus的版本要换对应的适配版本否则启动会直接报ClassNotFoundException。这类问题在答辩现场特别容易暴露稳妥做法是直接用我在上面表格里列出的组合。第三配置文件的命名建议区分开发和生产环境。Spring Boot支持application-dev.yml和application-prod.yml在主配置里用spring.profiles.activedev切换。这样本地联调用一个数据库部署演示用一个数据库不用改代码只改配置。第四写配置时记得关闭Thymeleaf的缓存。Spring Boot在开发阶段如果你的模板修改了但页面没变化先看是不是缓存没关。在application-dev.yml里加上spring: thymeleaf: cache: false这个配置是新手最常见的改了没反应类问题的根源提前设置好省得浪费时间。3. 数据库设计表结构决定业务边界3.1 核心表设计与字段说明校园新闻网站的数据库设计我见过的最常见错误是表太少。典型反面教材是只有一张管理员表加一张新闻表栏目用一个字符串字段存结果改栏目名时要遍历新闻表全量更新。正确做法是从一开始就按规范化思路拆表我通常保留五张核心表表名作用核心字段user管理员/用户表id, username, password, real_name, role, status, create_timecategory新闻栏目表id, name, sort, status, create_timenews新闻表id, category_id, title, summary, content, cover_image, source, author, is_top, is_recommend, view_count, status, publish_time, create_time, update_timebanner首页轮播图表可选id, image_url, link_url, title, sort, statuscomment评论表可选id, news_id, user_id, content, create_time重点聊一下news表的结构。category_id必须设计为外键概念的逻辑关联字段不要存成栏目名字符串——这样如果栏目改名业务上只需要更新category表新闻数据无需变动。is_top和is_recommend用tinyint类型存0或1分别表示是否置顶和是否推荐。view_count存点击量用来做热门排行。status字段是新闻的状态控制位建议这样约定0-草稿1-已发布2-已下线。发布动作就是从草稿改成已发布下架就是从已发布改成已下线。这个字段在论文里可以单独讲一段——通过状态字段实现新闻生命周期管理是评审老师喜欢看到的设计细节。3.2 表关系与查询路径的规划表关系本身不复杂但查询路径要想清楚。一个新闻属于一个栏目一个栏目下有多个新闻这是一对多关系。用户和评论是一对多关系新闻和评论也是一对多关系。这些关系落实到MyBatis-Plus中不需要复杂的多表关联SQL大部分场景直接用表的id做逻辑关联 单表查询就行。举个例子新闻列表页需要展示新闻属于哪个栏目。最直接的做法是联表查询news和category但更实用的做法是在查询新闻时把category_id查出再根据id列表批量查栏目名然后组装到视图对象里。这样既避免了复杂联表性能也不差。如果你的项目数据量不大用MyBatis-Plus的lambdaQuery()做单表条件查询加上Page分页几乎所有的列表场景都能覆盖。另一个必须规划的是首页数据怎么组装。校园新闻网站的首页典型布局是顶部轮播图、然后是各栏目新闻列表、再往下是热门点击榜。如果前端是服务端渲染建议写一个IndexService一次性把首页需要的所有数据封装到一个IndexVO里返回给Controller避免页面里到处散落查询逻辑。数据量大的时候可以缓存但校园新闻这种量级做好索引就完全够用。4. 后端核心功能实现编码要点与常见坑4.1 新闻模块的完整闭环新闻模块是整个系统的核心它的实现质量直接决定项目成败。我按后台发布 —— 前台展示 —— 后台管理这条线路来说。后台发布新闻接口设计为POST /admin/news/save接收表单提交的数据包含标题、所属栏目、摘要、正文内容、封面图、是否置顶、是否推荐等字段。这里有一个容易被忽略的点富文本内容里的图片上传。校园新闻的正文一般要用富文本编辑器而编辑器上传的图片需要独立的接口处理。建议设计一个POST /admin/upload/image接口接收MultipartFile保存到本地磁盘或OSS返回图片的访问URL然后嵌入富文本内容中。如果用本地存储记得要做静态资源映射否则图片路径访问不到。发布成功后新闻默认状态是草稿还是已发布看需求。我习惯的是编辑保存草稿点击发布才把状态置为1这样语义清晰在日志和论文里都好解释。前台的展示路径设计为首页GET /展示轮播图、推荐新闻、各栏目最新新闻、点击热门。栏目页GET /category/{id}按栏目分页展示新闻列表。详情页GET /news/{id}展示新闻正文同时把view_count加一。搜索页GET /search?keywordxx按标题和摘要模糊查询。这里有个细节详情页的浏览量自增怎么做才合理最朴素的方式是每次访问详情执行一次UPDATE news SET view_count view_count 1 WHERE id ?在校园网站这个量级下完全够用不需要引入Redis。但要注意的是如果用MyBatis-Plus不要先去查一次再更新直接使用SQL表达式自增就是一条update语句安全又高效。4.2 分类管理与搜索的简洁实现栏目管理其实就是一张category表的增删改查特别简单。但有一个关键点删除类别时如果类别下有新闻要不要限制我的建议是删除前先统计该栏目下的新闻数量如果数量大于0提示该栏目下存在新闻无法删除请先转移或删除新闻。可以增加一个转移新闻的操作把某栏目下新闻的category_id批量改成另一个栏目这样更友好。虽然只是一个小逻辑但写进论文系统详细设计中是一个很好的亮点。搜索模块不用上Elasticsearch那对校园新闻网站纯属杀鸡用牛刀。MyBatis-Plus的like条件就能满足需求LambdaQueryWrapperNews wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.hasText(keyword), News::getTitle, keyword) .or(StringUtils.hasText(keyword), w - w.like(News::getSummary, keyword)) .eq(News::getStatus, 1) .orderByDesc(News::getPublishTime);这段代码的逻辑是关键词不为空时按标题或摘要模糊匹配并且只查状态为已发布的新闻最后按发布时间倒序。一句话就能讲清楚的实现在答辩时也比上来就我用ES做了分词检索更真实可信。4.3 登录认证与权限拦截的落地方式后台管理必须登录这个没有商量余地。校园新闻网站的后台是给管理员用的所以权限控制不需要做得过分复杂但该有的绝对不能缺。我推荐的方案是Session 拦截器。登录成功后将管理员信息存入Session写一个LoginInterceptor拦截所有/admin/**请求判断Session里有没有管理员信息没有就重定向到登录页。Spring Boot中通过实现HandlerInterceptor接口并注册到WebMvcConfigurer中即可完成代码量很小二十分钟能搞定。不要因为简单就只用前端跳转控制权限后端接口必须做权限拦截这才是真正的安全防线。这一点在论文里可以放在系统安全设计小节是加分项。密码存储用BCrypt加密。Spring Security框架里自带BCryptPasswordEncoder如果你不想引入整套Spring Security也可以单独用sring-security-crypto依赖只引入密码加密的部分就行。项目中哪怕只有管理员一个账号密码也一定要加密存储不要把明文密码直接放数据库里这是底线问题。4.4 统一返回结果与全局异常处理写后台接口时我建议定义一个统一的返回结构ResultT包括状态码、提示信息和数据。这样前后端交互时页面通过Ajax请求后台接口判断code字段就知道成功还是失败不用每个接口各自定义返回。统一异常处理使用Spring Boot的RestControllerAdvice把业务异常和运行时异常统一捕获。特别注意文件上传大小限制的异常——Spring Boot默认上传限制是1MB如果要上传图片记得在配置里调大同时用全局异常处理捕获MaxUploadSizeExceededException返回文件大小超出限制的提示否则前端会收到一堆看不懂的报错信息。5. 前端页面组织与接口联调思路5.1 页面框架与公共片段用Thymeleaf做服务端渲染前端页面的组织要充分利用模板片段。我的习惯是把公共部分抽取出来比如header.html、footer.html然后在每个页面里用th:replace引入。这样改导航栏只需要改一处所有页面同步生效。校园新闻网站前台页面建议至少准备这几个页面index.html首页展示轮播图、栏目新闻、热门榜。category.html栏目新闻列表页带分页。news_detail.html新闻详情页展示正文和浏览量。search.html搜索结果页。admin/login.html后台登录页。admin/news_list.html新闻管理列表页。admin/news_edit.html新闻编辑页。页面布局用Bootstrap的栅格系统可以很轻松地做出规整的效果。导航栏放各栏目名称数据从后端动态获取。注意一个细节首页导航栏的栏目列表和全站公用的栏目列表最好在Controller里统一处理放到Model中传给模板。比如用ControllerAdvice加一个全局Model增强把栏目列表注入所有页面这样每个Controller就不用重复查询栏目数据。5.2 富文本编辑器与图片上传的联动后台编辑页面必然要用富文本编辑器推荐使用简洁一点的wangEditor比UEditor少很多过时依赖和维护问题。集成方式很简单在前端页面引入编辑器JS初始化编辑器实例在表单提交前把编辑器中的HTML内容赋值给隐藏的content字段。图片上传方面wangEditor自带上传配置把上传URL指向后台的/admin/upload/image接口就可以了。这里的坑主要在两个地方一是上传接口的返回格式wangEditor要求返回特定JSON格式不同版本格式不一致在联调时要确认清楚二是图片URL的存储问题保存到数据库的content里的图片地址一定是绝对URL比如/upload/2024/xx.jpg而不是相对路径。这样在详情页展示时才能正确加载。如果域名或端口变了需要做静态资源映射加上直接配置不加前缀使用相对路径访问。另一个常见问题是富文本里插入的图片在列表页要不要显示缩略图我的做法是独立维护一个cover_image字段发布新闻时单独上传一张封面图列表页统一显示封面的缩略图正文里的图片只出现在详情页。这个设计从视觉上会干净很多而且实现也简单。5.3 接口设计与联调的一些心得前后端联调时最省心的方式是先定好接口文档。虽然不要求做到OpenAPI那么正式但至少要在纸上或文档里明确每个接口的路径、请求方式、请求参数和返回结构。这套接口清单基本上就是这个项目的接口蓝图功能请求方法路径说明首页GET/返回首页数据栏目列表GET/category/list返回所有栏目栏目新闻分页GET/category/{id}页码参数page新闻详情GET/news/{id}返回详情浏览量1新闻搜索GET/search关键词参数keyword管理员登录POST/admin/login表单登录管理员退出GET/admin/logout清Session新闻保存POST/admin/news/save新增/编辑新闻新闻删除POST/admin/news/delete传id支持批量图片上传POST/admin/upload/image返回图片URL联调过程中最耗时间的往往不是接口逻辑而是参数名对不上。所以接口参数命名最好前后端统一用驼峰命名比如newsTitle、categoryId、publishTime避免在请求体里出现news_title这种后端命名而前端用newsTitle的混乱情况。6. 打包部署与环境配置避坑6.1 从源码到可运行jar包的构建细节项目开发完成后的打包部署是很多同学容易卡住的一步。Spring Boot打包本身就是个jar包用Maven执行mvn clean package -Dmaven.test.skiptrue即可。跳过测试很重要避免因为测试用例失败导致打包中断。如果用的是IDEA右侧Maven面板双击package也能达到同样的效果。打包时有一个高频报错打出来的jar包无法运行提示没有主清单属性。这个问题的根源是pom.xml里没有配置Spring Boot的Maven插件。解决方案是在build节点中加入build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build这个插件的作用就是帮你生成可执行的jar包清单缺少它打出来的只是普通jar不能直接java -jar运行。6.2 本地运行与服务器部署的差异本地开发时使用application-dev.yml数据库连接配置指向本机MySQLURL类似jdbc:mysql://localhost:3306/campus_news。服务器部署时我建议单独启用prod环境复制一份application-prod.yml把数据库地址、用户名密码换成服务器上的实际配置然后启动时指定环境java -jar campus-news.jar --spring.profiles.activeprod使用--spring.profiles.active参数覆盖配置比修改jar包内部的配置文件要干净得多也符合实际部署习惯。数据库初始化建议使用SQL脚本建库建表然后手动写入一个初始管理员账号。这一步在答辩前一定要准备好不要等演示现场再敲建表SQL。SQL脚本命名成init.sql放在项目根目录的docs或sql目录下方便最后归档。6.3 典型启动问题排查清单我把这类项目在部署启动时最容易踩的坑整理成一张表方便遇到问题时对照排查现象可能原因解决方案启动报Port 8080 was already in use端口被占用换端口或杀掉占用进程启动报Failed to configure a DataSource数据库连接配置错误检查url、username、password访问页面报Whitelabel Error Page路由或模板路径错误检查Controller和templates目录结构图片加载不出来静态资源映射未配置配置addResourceHandlers映射上传目录登录后刷新就掉线Session失效检查拦截器排除路径和Session超时配置富文本图片上传403上传接口被拦截在拦截器排除上传接口前端资源加载不出来时有一个很隐蔽的原因Thymeleaf的th:href和th:src生成链接需要WebMvcConfigurer中正确配置静态资源路径。一般Spring Boot默认把classpath:/static/作为静态资源根目录所以把CSS、JS、图片放在resources/static下即可。如果用了自定义资源映射务必把路径写对。7. 论文写作与答辩PPT的素材组织7.1 论文结构怎么搭才不空源码写完之后论文和PPT是另一道坎。这里我敢说一句得罪人的话很多项目代码做得不错但论文写得像流水账答辩PPT像个目录文档最终评分反而不如代码稍微弱一点但文档漂亮的项目。不是鼓励大家重文档轻代码而是说文档和演示确实值得花足够的时间。校园新闻网站论文的章节安排我建议这样组织第一章 绪论写研究背景和意义、国内外研究现状、主要工作内容。第二章 相关技术介绍写Spring Boot、MyBatis-Plus、MySQL、Thymeleaf、Bootstrap。第三章 系统分析写可行性分析、需求分析、功能需求和非功能需求。第四章 系统设计写总体架构、功能模块设计、数据库设计、类设计。第五章 系统实现写每个核心功能的实现思路和核心代码。第六章 系统测试写测试环境、功能测试用例、测试结果。写论文最忌空话套话。背景部分不要写随着互联网技术的发展要写具体问题——校园信息发布渠道分散师生获取通知需要访问多个平台信息时效性差。技术介绍部分不用大段抄官方文档重点写该项目中如何用这些技术解决了什么问题。7.2 数据库设计论文该怎么写数据库设计是论文评审老师重点看的部分。不要只贴建表SQL要配合ER图和数据字典一起写。每个表做成一个表格字段名、类型、是否主键、是否为空、字段说明一目了然。表之间的联系用ER图表示。论文里一定要有一句关于设计规范的话比如数据库设计遵循三范式尽量减少数据冗余对新闻表和栏目表建立索引以提高查询效率。再具体一些可以写对news表的category_id做索引对publish_time做倒序索引支撑列表页的分页查询。7.3 答辩PPT和演示的节奏把握答辩PPT我建议控制在15-20页结构大概是这样封面项目名称、姓名、学号、指导老师。目录页。研究背景与意义1-2页。核心技术与工具1页列技术栈。系统需求分析2页。系统架构设计2页架构图功能模块图。数据库设计2页表清单核心表结构。系统实现与演示4-5页放核心页面截图和核心代码。系统测试1页关键用例和结果。总结与展望1页。答辩演示时建议按照前台首页 - 栏目筛选 - 新闻详情 - 后台登录 - 发布新闻 - 回到前台验证 - 搜索验证这个顺序操作。这个流程最直观能让评委在几分钟内看到系统从前台到后端的完整能力。提前准备一条演示数据比如一篇带有图片的新闻发布后能在前台立即看到效果现场演示就会非常顺畅。PPT里放代码时只放核心方法和关键逻辑不要大段贴代码评委看的是思路不是代码量。比如放一条MyBatis-Plus查询的LambdaQueryWrapper代码就足够体现技术能力。8. 项目交付的完整性编码之外同样重要的东西8.1 README和运行文档的撰写交付一个完整项目不能只有源码。一个合格的README文档至少要包含这些部分项目简介一两句话说明项目是什么。技术栈列出主要技术及版本。环境要求JDK版本、MySQL版本、Maven版本。运行步骤从导入IDE到启动项目的每一步操作。初始账号管理员账号密码。部署说明如何打包jar并部署到服务器。不要小看这份文档。答辩前如果换了机器或者评委想自己跑一下一份清晰的运行文档能省下大量时间。我见过不少项目源码写得不错但因为README里没写初始化SQL怎么执行换台机器就跑不起来了。8.2 常见交付物清单一个标准的springboot校园新闻网站项目交付包通常包含交付物说明源码工程完整可运行的IDEA/Maven项目SQL脚本建库建表脚本初始化数据README环境要求运行步骤论文文档Word版含图表和代码答辩PPT15-20页左右图文并茂演示视频录制3-5分钟的功能演示备用把整个项目做完之后把这些文件整理好压缩成zip归档。注意压缩包里的目录结构要干净不要散落一堆无用的.idea、target目录也别在根目录堆一堆旧版本文件。一个整洁的交付包本身就是专业度的体现。我自己的习惯是项目交付前做一次从零到一的验证用一台干净的电脑从解压zip开始按照README重新建库、导入、启动、演示全流程走一遍。这个验证过程能发现80%的隐藏问题——往往是路径配置、端口占用或者SQL脚本漏了某条语句。走完这遍再交付才算是真的能跑的完整项目。最后说一句个人的体会校园新闻网站从技术难度上说确实算不上一座高山但它是少数让你能在一个项目里把后端框架、数据库设计、前端页面、工程部署、文档写作全部过一遍的完整工程。把这类项目完整跑下来之后再去做更复杂的企业级系统很多套路都会觉得顺理成章。如果你正好卡在某个环节跑不通回头看看上面这些章节里提到的坑和细节大概率能帮你节省不少时间。本文还有配套的精品资源点击获取