新闻作业3——实现主页显示主题栏、新闻内容以及附整个项目资源

相信很多小伙伴需要这个项目参考学习,本篇博客是此项目完结的一篇,整个资源附上!!!

关于本项目项目转跳链接

        1.  新闻作业的教程

        2. 新闻作业2——评论功能的实现 


目录

let's Start~

项目介绍

在主页显示主题列表

通过主题显示新闻列表

通过新闻列表显示新闻具体内容

功能演示


设计并实现了一个主页,旨在展示主题栏和新闻内容。通过使用Java编程语言和JSP技术,创建了一个功能强大且易于使用的新闻浏览界面

​​​​​​​let's Start~

项目介绍

        主页的主题栏是用户浏览不同新闻分类的入口。可从数据库中获取主题列表,并使用循环生成主题链接。用户可以点击这些链接,以便快速浏览感兴趣的主题下的新闻。

        除了主题栏,主页还展示了新闻内容。我们通过从数据库中获取新闻列表,并使用循环生成新闻内容的展示。每个新闻条目包括标题、作者、摘要和发布时间等信息,以便用户快速了解新闻的要点。

        此外还包括主页设计注重用户体验和可用性。通过简洁而直观的界面,用户可以轻松地浏览不同主题下的新闻,并快速获取所需信息。主页添加了一些交互功能,例如点击主题链接以及与新闻条目相关的操作,以提升用户的参与度和便利性。

        最后,新闻作业3的主页设计和实现为用户提供了一个优秀的新闻浏览平台。我们的目标是通过简单而强大的功能,为用户提供高效、便捷的新闻阅读体验。

接下来,讲述新闻作业3 主页显示主题栏、新闻内容 的实现

在主页显示主题列表

  1. 创建TopicsDao实例:通过TopicsDaoImpl类创建了一个TopicsDao接口的实例,用于操作主题相关的数据。

  2. 获取主题列表:通过调用getAllTopics()方法,从数据库中获取了主题列表,并将其存储在list变量中。

  3. 计数器初始化:创建了一个counter变量作为计数器,用于记录循环的次数。

  4. 循环遍历主题列表:使用for-each循环遍历主题列表中的每个主题对象。

  5. 生成主题链接:在每次循环中,通过<a>标签生成一个主题链接。链接的目标页面为util/do_xinwen.jsp,并传递了主题ID(tid)作为参数。链接的文本内容为主题的名称(tempTopic.getTname())。

  6. 添加空格:在每个主题链接后添加了多个空格字符(&nbsp;),用于在主题之间添加间距。

  7. 换行处理:通过判断计数器是否能被4整除,当计数器达到4时,在主题链接之后添加了一个换行符(<br/>),实现了每4个主题换行一次的效果。

  8. 结束循环:循环结束后,主题栏的生成完成


      需要在index.jsp修改静态代码,找到标签<ul class="class_date"><ul/>,修改填入下方代码

<ul class="class_date">
    <%-- 下方代码由笨猫所写 --%>
    <% 
    TopicsDao topicsDao = new TopicsDaoImpl();
    List<Topic> list = topicsDao.getAllTopics();
    int counter = 0; // 计数器
    for (Topic tempTopic : list) { 
        counter++; // 每次循环计数器加1
        %>
        <a href='util/do_xinwen.jsp?tid=<%=tempTopic.getTid()%>'><%= tempTopic.getTname() %></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <% 
        if (counter % 4 == 0) { // 当计数器达到4时,添加换行符
            %>
            <br />
            <% 
        }
    }
    %>
</ul>
  • util/do_xinwen.jsp 是一个相对路径,指向名为 do_xinwen.jsp 的JSP页面。它位于 util 目录下。
  • ? 是URL中的查询字符串分隔符,用于将URL地址与参数部分分隔开。
  • tid= 是参数名,表示传递的参数是 tid
  • <%=tempTopic.getTid()%> 是JSP表达式,用于在URL中动态地获取 tempTopic 对象的 tid 属性的值,并将其作为参数值传递给 tid 参数。

        通过这个URL地址,可以在访问 do_xinwen.jsp 页面时,将 tid 参数的值传递给该页面,以便在后续的处理中使用。在 do_xinwen.jsp 页面中,通过 request.getParameter("tid") 来获取传递过来的 tid 参数的值,以便在页面中进行相应的处理

通过主题显示新闻列表

  1. 设置页面编码:通过<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%> 设置页面的编码为UTF-8,确保能够正确处理中文字符。

  2. 获取参数值:通过request.getParameter("tid") 获取名为 tid 的参数值,该参数用于指定要展示的新闻主题。

  3. 获取新闻列表:通过NewsDao接口和NewsDaoImpl实现类,调用getAllnews() 方法获取所有新闻的列表,并将其存储在 ls 变量中。

  4. 循环遍历新闻列表:使用 for 循环遍历新闻列表中的每个新闻对象。

  5. 匹配主题:通过比较新闻对象的 getNtid() 方法返回的主题ID与参数 tid 的值,判断是否属于指定的主题。

  6. 生成新闻链接:在每次循环中,通过 <a> 标签生成一个新闻链接。链接的目标页面为 do_getnews.jsp,并传递了新闻ID(nid)作为参数。链接的文本内容为新闻的标题(ntitle)。

  7. 标记是否有新闻:如果存在匹配的新闻,则将 hasNews 标记为 true,表示有新闻。

  8. 显示提示信息:如果没有匹配的新闻,则显示一个提示信息,表示该主题下暂无新闻。

  9. 结束循环:循环结束后,新闻列表的生成完成。


根据参数值来展示指定主题下的新闻列表。如果有匹配的新闻,则以链接的形式展示新闻标题;如果没有匹配的新闻,则显示一个提示信息

 在util文件夹下创建do_xinwen.jsp,写入如下代码

<%-- 本页由笨猫所写 --%>
<%@page import="com.jjzd.news.dao.NewsDao"%>
<%@page import="com.jjzd.news.dao.impl.NewsDaoImpl,com.jjzd.news.entity.*"%>
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	String tid = request.getParameter("tid");
	NewsDao ne = new NewsDaoImpl();
	//获取所有新闻
	List<News> ls = ne.getAllnews();
%>
<ol>
	<% 
	boolean hasNews = false; // 判断是否有新闻

	for(int i=0; i<ls.size(); i++) {
		String gettid = ls.get(i).getNtid();
		if(tid.equals(gettid)){
			String nid = ls.get(i).getNid();
			String ntitle = ls.get(i).getNtitle();
			hasNews = true; // 标记为有新闻
	%>
		<li><a href='do_getnews.jsp?nid=<%=nid %>'><%= ntitle %></a></li>
	<% 
		}
	}

	if (!hasNews) { // 如果没有新闻,则显示提示信息
	%>
		<li>本主题还没有新闻</li>
	<% } %>
</ol>

同样地,点击新闻列表,需要再次转跳到另一个jsp实现显示图片

通过新闻列表显示新闻具体内容

  1. 导入相关类:通过<%@page import="com.jjzd.news.dao.NewsDao"%> 和 <%@page import="com.jjzd.news.dao.impl.NewsDaoImpl,com.jjzd.news.entity.*"%> 导入了相关的类,包括NewsDao接口、NewsDaoImpl实现类和News实体类。

  2. 设置页面编码和标题:通过<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%> 设置页面的编码为UTF-8,并设置页面的标题为"新闻显示界面"。

  3. 定义样式:在<style>标签中定义了一些CSS样式,用于设置新闻显示界面的外观和布局。

  4. 获取参数值:通过request.getParameter("nid") 获取名为 nid 的参数值,该参数用于指定要展示的新闻ID。

  5. 获取新闻列表:通过NewsDao接口和NewsDaoImpl实现类,调用getAllnews() 方法获取所有新闻的列表,并将其存储在 ls 变量中。

  6. 循环遍历新闻列表:使用 for 循环遍历新闻列表中的每个新闻对象。

  7. 匹配新闻ID:通过比较新闻对象的 getNid() 方法返回的新闻ID与参数 nid 的值,判断是否为指定的新闻。

  8. 生成新闻内容:在每次循环中,通过使用 <%= %> 输出表达式,将新闻的标题、作者、摘要、内容和发布时间等信息插入到HTML中。

  9. 标记是否有新闻:如果存在匹配的新闻,则将 hasNews 标记为 true,表示有新闻。

  10. 显示提示信息:如果没有匹配的新闻,则显示一个提示信息,表示该主题下暂无新闻。

  11. 结束循环:循环结束后,新闻显示界面的生成完成。


 在util文件夹下创建do_getnews.jsp,写入如下代码 

<%@page import="com.jjzd.news.dao.NewsDao"%>
<%@page import="com.jjzd.news.dao.impl.NewsDaoImpl,com.jjzd.news.entity.*"%>
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>新闻显示界面</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
        }
        .news-title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 10px;
        }
        .news-author {
            font-size: 16px;
            color: #666;
            margin-bottom: 10px;
        }
        .news-summary {
            font-size: 18px;
            margin-bottom: 10px;
        }
        .news-content {
            font-size: 16px;
            text-align: left;
            margin: 0 auto;
            max-width: 800px;
            padding: 20px;
            background-color: #f2f2f2;
            border-radius: 5px;
        }
        .news-time {
            font-size: 14px;
            color: #999;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <%
        request.setCharacterEncoding("UTF-8");
        String nid = request.getParameter("nid");
        NewsDao ne = new NewsDaoImpl();
        //获取所有新闻
        List<News> ls = ne.getAllnews();
        boolean hasNews = false; // 判断是否有新闻
        for(int i=0; i<ls.size(); i++) {
            String getnid = ls.get(i).getNid();
            if(nid.equals(getnid)){
        		System.out.println(ls.get(i).getNsummary());
                //获取新闻标题
                String ntitle = ls.get(i).getNtitle();
                //获取作者
                String author = ls.get(i).getNauthor();
                //获取摘要
                String summary = ls.get(i).getNsummary();
                //获取内容
                String content = ls.get(i).getNcontent();
                //获取时间
                String time = ls.get(i).getNcreatedate();
                hasNews = true; // 标记为有新闻
    %>
    <div class="news-content">
        <h1 class="news-title"><%= ntitle %></h1>
        <p class="news-author">作者: <%= author %></p>
        <p class="news-summary"><%= summary %></p>
        <p class="news-content"><%= content %></p>
        <p class="news-time">发布时间: <%= time %></p>
    </div>
    <% 
            }
        }

        if (!hasNews) { // 如果没有新闻,则显示提示信息
    %>
    <div class="news-content">
        <p>本主题还没有新闻</p>
    </div>
    <% } %>
</body>
</html>

根据参数值来展示指定新闻的详细内容。如果有匹配的新闻,则以标题、作者、摘要、内容和发布时间的形式展示新闻内容;如果没有匹配的新闻,则显示一个提示信息。

功能演示

数据库某个主题新闻列表

点击笨猫最厉害 

最后显示其内容 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Benmao⁢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值