相信很多小伙伴需要这个项目参考学习,本篇博客是此项目完结的一篇,整个资源附上!!!
关于本项目项目转跳链接
目录
设计并实现了一个主页,旨在展示主题栏和新闻内容。通过使用Java编程语言和JSP技术,创建了一个功能强大且易于使用的新闻浏览界面
let's Start~
项目介绍
主页的主题栏是用户浏览不同新闻分类的入口。可从数据库中获取主题列表,并使用循环生成主题链接。用户可以点击这些链接,以便快速浏览感兴趣的主题下的新闻。
除了主题栏,主页还展示了新闻内容。我们通过从数据库中获取新闻列表,并使用循环生成新闻内容的展示。每个新闻条目包括标题、作者、摘要和发布时间等信息,以便用户快速了解新闻的要点。
此外还包括主页设计注重用户体验和可用性。通过简洁而直观的界面,用户可以轻松地浏览不同主题下的新闻,并快速获取所需信息。主页添加了一些交互功能,例如点击主题链接以及与新闻条目相关的操作,以提升用户的参与度和便利性。
最后,新闻作业3的主页设计和实现为用户提供了一个优秀的新闻浏览平台。我们的目标是通过简单而强大的功能,为用户提供高效、便捷的新闻阅读体验。
接下来,讲述新闻作业3 主页显示主题栏、新闻内容 的实现
在主页显示主题列表
-
创建
TopicsDao
实例:通过TopicsDaoImpl
类创建了一个TopicsDao
接口的实例,用于操作主题相关的数据。 -
获取主题列表:通过调用
getAllTopics()
方法,从数据库中获取了主题列表,并将其存储在list
变量中。 -
计数器初始化:创建了一个
counter
变量作为计数器,用于记录循环的次数。 -
循环遍历主题列表:使用
for-each
循环遍历主题列表中的每个主题对象。 -
生成主题链接:在每次循环中,通过
<a>
标签生成一个主题链接。链接的目标页面为util/do_xinwen.jsp
,并传递了主题ID(tid
)作为参数。链接的文本内容为主题的名称(tempTopic.getTname()
)。 -
添加空格:在每个主题链接后添加了多个空格字符(
),用于在主题之间添加间距。 -
换行处理:通过判断计数器是否能被4整除,当计数器达到4时,在主题链接之后添加了一个换行符(
<br/>
),实现了每4个主题换行一次的效果。 -
结束循环:循环结束后,主题栏的生成完成
需要在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>
<%
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
参数的值,以便在页面中进行相应的处理
通过主题显示新闻列表
-
设置页面编码:通过
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
设置页面的编码为UTF-8,确保能够正确处理中文字符。 -
获取参数值:通过
request.getParameter("tid")
获取名为tid
的参数值,该参数用于指定要展示的新闻主题。 -
获取新闻列表:通过
NewsDao
接口和NewsDaoImpl
实现类,调用getAllnews()
方法获取所有新闻的列表,并将其存储在ls
变量中。 -
循环遍历新闻列表:使用
for
循环遍历新闻列表中的每个新闻对象。 -
匹配主题:通过比较新闻对象的
getNtid()
方法返回的主题ID与参数tid
的值,判断是否属于指定的主题。 -
生成新闻链接:在每次循环中,通过
<a>
标签生成一个新闻链接。链接的目标页面为do_getnews.jsp
,并传递了新闻ID(nid
)作为参数。链接的文本内容为新闻的标题(ntitle
)。 -
标记是否有新闻:如果存在匹配的新闻,则将
hasNews
标记为true
,表示有新闻。 -
显示提示信息:如果没有匹配的新闻,则显示一个提示信息,表示该主题下暂无新闻。
-
结束循环:循环结束后,新闻列表的生成完成。
根据参数值来展示指定主题下的新闻列表。如果有匹配的新闻,则以链接的形式展示新闻标题;如果没有匹配的新闻,则显示一个提示信息
在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实现显示图片
通过新闻列表显示新闻具体内容
-
导入相关类:通过
<%@page import="com.jjzd.news.dao.NewsDao"%>
和<%@page import="com.jjzd.news.dao.impl.NewsDaoImpl,com.jjzd.news.entity.*"%>
导入了相关的类,包括NewsDao
接口、NewsDaoImpl
实现类和News
实体类。 -
设置页面编码和标题:通过
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
设置页面的编码为UTF-8,并设置页面的标题为"新闻显示界面"。 -
定义样式:在
<style>
标签中定义了一些CSS样式,用于设置新闻显示界面的外观和布局。 -
获取参数值:通过
request.getParameter("nid")
获取名为nid
的参数值,该参数用于指定要展示的新闻ID。 -
获取新闻列表:通过
NewsDao
接口和NewsDaoImpl
实现类,调用getAllnews()
方法获取所有新闻的列表,并将其存储在ls
变量中。 -
循环遍历新闻列表:使用
for
循环遍历新闻列表中的每个新闻对象。 -
匹配新闻ID:通过比较新闻对象的
getNid()
方法返回的新闻ID与参数nid
的值,判断是否为指定的新闻。 -
生成新闻内容:在每次循环中,通过使用
<%= %>
输出表达式,将新闻的标题、作者、摘要、内容和发布时间等信息插入到HTML中。 -
标记是否有新闻:如果存在匹配的新闻,则将
hasNews
标记为true
,表示有新闻。 -
显示提示信息:如果没有匹配的新闻,则显示一个提示信息,表示该主题下暂无新闻。
-
结束循环:循环结束后,新闻显示界面的生成完成。
在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>
根据参数值来展示指定新闻的详细内容。如果有匹配的新闻,则以标题、作者、摘要、内容和发布时间的形式展示新闻内容;如果没有匹配的新闻,则显示一个提示信息。
功能演示
数据库某个主题新闻列表
点击笨猫最厉害
最后显示其内容