赞
踩
用到的表:DiscussPost
方法:用到AJAX,网页能将增量更新呈现在页面上,而不需要刷新整个页面
异步通信技术,虽然X代表XML,但目前JSON使用的比XML更加普遍
思路
开发流程
1.我们从最简单的工具类开始,在里面写上了我们需要的一些工具方法;
在util.CommunityUtil类中添加新的工具方法,用于转换json字符串:返回状态码,在贴子发布后,显示发布成功。
- //得到JSON格式的字符串
- //输入为:编号、提示、业务数据
- public static String getJSONString(int code, String msg, Map<String, Object> map){
- JSONObject json = new JSONObject();
- json.put("code",code);
- json.put("msg",msg);
- if (map!=null){
- for (String key: map.keySet()) {
- json.put(key, map.get(key));
- }
- }
- return json.toJSONString();
- }
-
- //得到JSON格式的字符串(重载1:无业务数据)
- public static String getJSONString(int code, String msg){
- return getJSONString(code, msg, null);
- }
-
- //得到JSON格式的字符串(重载2:无提示、业务数据)
- public static String getJSONString(int code){
- return getJSONString(code, null, null);
- }
-
2. 在数据层dao中的DiscussPostMapper接口新添加方法,并在对应的discusspost-mapper添加对应的SQL语句
- //添加帖子
- int insertDiscussPost(DiscussPost discussPost);
-
- //SQL语句
- <insert id="insertDiscussPost" parameterType="DiscussPost">
- insert into discuss_post(<include refid="insertFields"></include>)
- values (#{userId},#{title},#{content},#{type},#{status},#{createTime},#{commentCount},#{score})
- </insert>
-
3. 业务的核心逻辑都在Service层,在service类中编写了一些需要的业务逻辑,业务层需要定义一个对帖子进行保存的方法,最后调用dao里的方法,实现对数据层的更新。
在service.DiscussPostService类下新建方法:addDiscussPost()。
- @Autowired
- private SensitiveFilter sensitiveFilter;
-
- public int addDiscussPost(DiscussPost post){
- if(post==null){
- throw new IllegalArgumentException("参数不能为空!");
- }
- //转义HTML标记:防止人家发布的内容中包含html的标签,导致破坏页面
- //只用对主题、评论进行转义、过滤操作
- post.setTitle(HtmlUtils.htmlEscape(post.getTitle()));
- post.setContent(HtmlUtils.htmlEscape(post.getContent()));
- //过滤敏感词
- post.setTitle(sensitiveFilter.filter(post.getTitle()));
- post.setContent(sensitiveFilter.filter(post.getContent()));
- return discussPostMapper.insertDiscussPost(post);
- }
-
4. Service之后,最后就是视图层的编写,分为两个部分:控制器 + 页面。
在controller目录下新建:DiscussPostController,实现增加帖子的功能,以后所有与发帖相关的请求都在这里处理。
- package com.nowcoder.mycommunity.controller;
-
- //处理所有与发帖相关的请求
- @Controller
- @RequestMapping("/discuss")
- public class DiscussPostController {
- @Autowired
- private DiscussPostService discussPostService;
- @Autowired //获取当前用户
- private HostHolder hostHolder;
-
- @RequestMapping(path = "/add", method = RequestMethod.POST)
- @ResponseBody
- public String addDiscussPost(String title, String content) {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。