7.31zr实习日记

实习日记

学习内容

今天继续编写新闻系统,今天主要是实现的归档、评论功能、搜索,以及拦截器的学习。
归档主要就是将新闻按照时间排序号然后及逆行展示,从而可以根据新闻的时间来选择新闻。
实现归档的主要代码如下:
controller层:

@RequestMapping("archives")
    public String archives(Model model){
        HashMap<String, List<News>> map=newsService.archiveNews();
        Long count=newsService.countNews();
        model.addAttribute("newsCount",count);
        model.addAttribute("archiveMap",map);
    return "archives";
    }

service层:

@Override
      public Long countNews() {
            return newsDao.count();
      }

      @Override
      public HashMap<String, List<News>> archiveNews() {
           LinkedHashMap<String,List<News>> map=new LinkedHashMap<>();
           List<String> years=newsDao.findGroupYear();
           for(String y:years){
                 List<News>news=newsDao.findByYear(y);
                 map.put(y,news);
           }
           return map;
      }

实现评论的主要代码:
service层:

@Override
    public void save(Comment comment) {
        if(comment.getParentComment().getId()==-1){
            comment.setParentComment(null);
        }
        commentDao.save(comment);
    }

    @Override
    public List<Comment> findCommentByNewsId(Long newsId) {
        Sort sort=Sort.by("createTime");
        List<Comment> comments=commentDao.findByNewsIdAndParentCommentNull(newsId,sort);
        return comments;
    }

controller层:

@Controller
public class CommentController {
    @Autowired
    private CommentService commentService;

    @PostMapping("/comments")
    public String save(Comment comment, HttpSession session){
        User user=(User)session.getAttribute("user");
        if(user==null){
            comment.setAdminComment(false);
        }else{
            comment.setAdminComment(true);
        }
        commentService.save(comment);
        Long newsId=comment.getId();
        return "redirect:/comments/"+newsId;
    }
    @RequestMapping("/comments/{newsId}")
    public String comments(@PathVariable Long newsId, Model model){
        List<Comment> comments=commentService.findCommentByNewsId(newsId);
        model.addAttribute("comments",comments);
        return "news :: commentList";
    }
}

搜索功能的实现:controller层代码如下,在service层的findNewsQuery()方法中,调用dao层的findByquery()从而实现新闻的搜索。

 @RequestMapping("/search")
    public String search(@PageableDefault(size=3,sort={"updateTime"},direction = Sort.Direction.DESC)
                         Pageable pageable,
                         String query,
                         Model model){
        Page<News> page=newsService.findNewsByQuery(query,pageable);
        model.addAttribute("page",page);
        model.addAttribute("query",query);
        return "search";
    }

拦截器和ssm项目中的过滤器的功能类似,都是防止用户没有登陆而直接输入网址进入系统的情况发生。
但是过滤器是依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,
而拦截器是依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程的一种运用,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
WebConfig.java文件:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/admin/**")
                .excludePathPatterns("/admin")
                .excludePathPatterns("/admin/login");
    }

LoginInterceptor.java

public class LoginInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handle)throws Exception{
        if(request.getSession().getAttribute("user")==null){
           response.sendRedirect("/admin");
           return false;
        }
        return true;
    }

总结

上午还是继续新闻系统的编写,现在新闻系统基本上已经实现了,接下来还需要进行一些优化。上午上课的时候有一些没跟上节奏,主要是电脑启动项目太慢了。下午的时候看了录屏回顾了上午所讲的内容,并完善了自己的代码。下午主要还是进行自己小组项目的编写,今天基本上把自己负责的前台页面完成了,存在的一些小问题也解决了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值