此方法有二种:
1 在JSP前台页面判断并输出,(适合初学,易理解)
2 在SERVLET里判断并输出(符合MVC架构)
我们先说第一种方法:
先说dao层,主要是取比当前ID小的只一条,取比当前ID大的只一条,注意排序!下面是在查询时的最基本语句,这是最基本的:
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
public News max(Long id)throws Exception{
/**
* 取下一条
*/
News maxnews=null;
try {
conn=Dbinit.getConn();
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
pstmt=conn.prepareStatement("select * from news where id>? order by id asc limit 0,1 ;");
pstmt.setLong(1, id);
rs=pstmt.executeQuery();
if(rs!=null && rs.next()){
maxnews=new News();
maxnews.setId(rs.getLong("id"));
maxnews.setTitle(rs.getString("title"));
maxnews.setZuozhe(rs.getString("zuozhe"));
maxnews.setLaiyuan(rs.getString("laiyuan"));
maxnews.setContent(rs.getString("content"));
maxnews.setFabutime(rs.getString("fabutime"));
}
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
Dbinit.close(rs, pstmt, conn);
}
return maxnews;
}
public News min(Long id)throws Exception{
/**
* 取上一条
*/
News minnews=null;
try {
conn=Dbinit.getConn();
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
pstmt=conn.prepareStatement("select * from news where id<? order by id desc limit 0,1 ;");
pstmt.setLong(1, id);
rs=pstmt.executeQuery();
if(rs!=null && rs.next()){
minnews=new News();
minnews.setId(rs.getLong("id"));
minnews.setTitle(rs.getString("title"));
minnews.setZuozhe(rs.getString("zuozhe"));
minnews.setLaiyuan(rs.getString("laiyuan"));
minnews.setContent(rs.getString("content"));
minnews.setFabutime(rs.getString("fabutime"));
}
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
Dbinit.close(rs, pstmt, conn);
}
return minnews;
}
二 再说servlet层
在我们显示详细新闻的页面show.jsp所用的servlet方法show()中调用上面两个DAO方法
public void maxMin(HttpServletRequest request,HttpServletResponse response)throws Exception{
/**
* 专用来供前台show.jsp调用的方法(先经show()调用)
*/
NewsDao newsdao = new NewsDao();
News maxNews=null;
News minNews =null;
//StringBuffer out=new StringBuffer();
//Long maxId=0L;
//Long minId=0L;
Long currentId=Long.parseLong(request.getParameter("id"));
maxNews=newsdao.max(currentId);
minNews=newsdao.min(currentId);
request.setAttribute("currentid",currentId);
request.setAttribute("maxnews", maxNews);
request.setAttribute("minnews", minNews);
//return out.toString();
}
public void show(HttpServletRequest request,HttpServletResponse response)throws Exception{
/**
* 后台查看新闻详细信息
*/
NewsDao newsdao = new NewsDao();
Long id= Long.parseLong(request.getParameter("id"));
News news = null;
if (id!= 0) {
try {
news = newsdao.show(id);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.maxMin(request, response);//调用
request.setAttribute("viewnews", news);
request.getRequestDispatcher("showNews.jsp").forward(request,response);
}
}
第三:前台show.jsp页面
<%@ page language="java" import="java.util.*,bean.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>${viewnews.title }</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="css/styles.css">
</head>
<body>
<fieldset>
<legend>新闻详细信息</legend>
<div id="news">
<div id="title">${viewnews.title }</div>
<div id="come">新闻来源:${viewnews.laiyuan } 编辑:${viewnews.zuozhe } 发布时间:${viewnews.fabutime}</div>
<div id="content">${viewnews.content }</div>
</div>
<div style="text-align:center;">[<a href="#" onClick="window.close();"><font color="#FF0000">关闭本页面</font></a>] </div>
<!-- 上一篇 下一篇 -->
<%
News maxNews=null;
News minNews=null;
Long maxId=0L;
Long minId=0L;
Long currentid=(Long)request.getAttribute("currentid");
maxNews=(News)request.getAttribute("maxnews");
minNews=(News)request.getAttribute("minnews");
if(maxNews!=null && minNews!=null){
maxId=maxNews.getId();
minId=minNews.getId();
if(currentid<=minId){
%>
<div id="prenext">
<span>上一篇: 没有上一篇</span>
<span>下一篇: <a href="admin/news.do?method=show&id=${maxnews.id}">${maxnews.title }</a></span>
</div>
<%
}
if(minId<currentid && currentid<maxId){
%>
<div id="prenext">
<span>上一篇: <a href="admin/news.do?method=show&id=${minnews.id}">${minnews.title }</a></span>
<span>下一篇: <a href="admin/news.do?method=show&id=${maxnews.id}">${maxnews.title }</a></span>
</div>
<%
}
if(currentid>=maxId){
%>
<div id="prenext">
<span>上一篇: <a href="admin/news.do?method=show&id=${minnews.id}">${minnews.title }</a></span>
<span>下一篇: 没有下一篇</span></div>
<%
}
}
if(maxNews==null && minNews!=null){
%>
<div id="prenext">
<span>上一篇: <a href="admin/news.do?method=show&id=${minnews.id}">${minnews.title }</a></span>
<span>下一篇: <font color="red">没有下一篇</font></span></div>
<%
}
if(maxNews!=null && minNews==null){
%>
<div id="prenext">
<span>上一篇: <font color="red">没有上一篇</font></span>
<span>下一篇: <a href="admin/news.do?method=show&id=${maxnews.id}">${maxnews.title }</a></span>
<%
}
%>
</fieldset>
</body>
</html>
=============================================================
==============================================================
下面开始说第二种方法:2 在SERVLET里判断并输出(符合MVC架构)
先说dao层,和上面的方法中一模一样:
主要是取比当前ID小的只一条,取比当前ID大的只一条,注意排序!下面是在查询时的最基本语句,这是最基本的:
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
public News max(Long id)throws Exception{
/**
* 取下一条
*/
News maxnews=null;
try {
conn=Dbinit.getConn();
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
pstmt=conn.prepareStatement("select * from news where id>? order by id asc limit 0,1 ;");
pstmt.setLong(1, id);
rs=pstmt.executeQuery();
if(rs!=null && rs.next()){
maxnews=new News();
maxnews.setId(rs.getLong("id"));
maxnews.setTitle(rs.getString("title"));
maxnews.setZuozhe(rs.getString("zuozhe"));
maxnews.setLaiyuan(rs.getString("laiyuan"));
maxnews.setContent(rs.getString("content"));
maxnews.setFabutime(rs.getString("fabutime"));
}
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
Dbinit.close(rs, pstmt, conn);
}
return maxnews;
}
public News min(Long id)throws Exception{
/**
* 取上一条
*/
News minnews=null;
try {
conn=Dbinit.getConn();
//String max="select max(id) from news where id< "+id+" order by id desc limit 0,1;";
//String min="select min(id) from news where id> "+id+" order by id asc limit 0,1;";
pstmt=conn.prepareStatement("select * from news where id<? order by id desc limit 0,1 ;");
pstmt.setLong(1, id);
rs=pstmt.executeQuery();
if(rs!=null && rs.next()){
minnews=new News();
minnews.setId(rs.getLong("id"));
minnews.setTitle(rs.getString("title"));
minnews.setZuozhe(rs.getString("zuozhe"));
minnews.setLaiyuan(rs.getString("laiyuan"));
minnews.setContent(rs.getString("content"));
minnews.setFabutime(rs.getString("fabutime"));
}
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
Dbinit.close(rs, pstmt, conn);
}
return minnews;
}
再说servlet层
public String updown(HttpServletRequest request,HttpServletResponse response)throws Exception{
NewsDao newsdao = new NewsDao();
News maxNews=null;
News minNews=null;
StringBuffer out=new StringBuffer();
Long maxId=0L;
Long minId=0L;
Long currentId=Long.parseLong(request.getParameter("id"));
maxNews=newsdao.max(currentId);
minNews=newsdao.min(currentId);
if (maxNews != null && minNews != null) {
maxId = maxNews.getId();
minId = minNews.getId();
String maxstr = "admin/news.do?method=show&id=" + maxId;
String minstr = "admin/news.do?method=show&id=" + minId;
out.append("<div id='prenext'>");
if (minId < currentId && currentId < maxId) {
out.append("<span>上一篇:<a href=" + minstr + ">"+ minNews.getTitle() + "</a></span>");
out.append("<span>下一篇:<a href=" + maxstr + ">"+ maxNews.getTitle() + "</a></span>");
}
}
if(maxNews != null && minNews == null){
maxId = maxNews.getId();
String maxstr = "admin/news.do?method=show&id=" + maxId;
out.append("<span>上一篇:没有上一篇</span>");
out.append("<span>下一篇:<a href="+maxstr+">"+ maxNews.getTitle() + "</a></span>");
}
if(maxNews == null && minNews != null){
minId = minNews.getId();
System.out.println(minId+"@@@@@@@@@@@@@@@");
String minstr = "admin/news.do?method=show&id=" + minId;
out.append("<span>上一篇:<a href=" + minstr + ">"+ minNews.getTitle() + "</a></span>");
out.append("<span>下一篇:没有下一篇</span>");
}
out.append("</div>");
return out.toString();
}
public void show(HttpServletRequest request,HttpServletResponse response)throws Exception{
/**
* 后台查看新闻详细信息
*/
NewsDao newsdao = new NewsDao();
Long id= Long.parseLong(request.getParameter("id"));
News news = null;
if (id!= 0) {
try {
news = newsdao.show(id);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String updown=this.updown(request, response);
request.setAttribute("updown", updown);
request.setAttribute("viewnews", news);
request.getRequestDispatcher("showNews.jsp").forward(request,response);
}
}
最后,在前台调用就方便多了
一句话:${updown}
相关推荐
在Java服务器页面(JSP)技术中,`javax.servlet.jsp.tagext`包是核心组件之一,它提供了用于创建自定义标签库(Tag Libraries)的接口和类。自定义标签是JSP的一种强大特性,允许开发者将复杂的逻辑封装到可重用的...
"jsp页面加载之遮罩层"这个主题关注的是在JSP页面加载过程中,如何使用遮罩层来提升用户体验,尤其是在等待页面完全加载时提供一种视觉反馈,让用户知道页面正在处理。 首先,遮罩层通常是一个半透明的div元素,...
本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过自定义标签来优雅地处理日期格式化和展示。 首先,我们要理解JSP自定义标签的基本概念。自定义标签是JSP的一种扩展,它不是Java内置的标签,而是由开发者...
在Java服务器页面(JSP)开发中,页面跳转是一个常见的需求,特别是在处理用户交互和信息验证时。`jsp:forward`元素是JSP中的一种动作标签,用于将请求转发到另一个页面,而不是生成一个新的HTTP请求。这在处理用户...
JSP 是一种基于Java的技术,用于创建动态网页。本文将从代码层面深入分析一个具体的注册与登录实现案例,并对其中的关键技术和步骤进行详细解读。 #### 二、技术栈与环境配置 - **开发语言**:Java - **Web服务器*...
- 最终会显示一个结果页面或者转发到其他页面,如`Result.jsp`或`Error.jsp`。 #### 五、图形并茂 假设我们有以下的页面和服务结构: - 页面: `Index.jsp`, `Input.jsp`, `Confirm.jsp`, `Result.jsp`, `Error....
本篇文章将深入探讨如何使用JSP来创建一个简单的文件管理器,涉及的主要知识点包括文件操作、目录遍历、时间戳处理等。 首先,我们要理解JSP的基础。JSP是一种基于Java的服务器端技术,它允许开发者在HTML代码中...
通过加载驱动、建立连接、执行SQL语句和处理结果集等步骤,实现了从数据库中读取数据并在页面上显示的功能。这对于理解JSP与数据库之间的交互机制非常重要,是进行Web应用开发不可或缺的基础技能之一。
在Java Server Pages(JSP)技术中,内建对象是一组预定义的对象,它们为开发者提供了方便的功能,无需显式创建即可直接在页面上使用。这些内建对象是JSP生命周期的一部分,帮助简化Web开发过程,提高效率。本教程...
JSP动作是JSP元素之一,它们并不像脚本元素那样在服务器上执行,而是由JSP引擎在转换成Servlet时处理。JSP动作主要分为以下几类: 1. `<jsp:include>`:用于在页面渲染时动态包含其他文件,可以是静态资源(如HTML...
JSP中的一些Action元素用于执行特定的动作,例如包含文件或跳转到另一个页面。 - `<jsp:plugin>`:用于输出Applet标签。 - `<jsp:include>`:用于包含静态文件。 - `<jsp:forward>`:用于转发到另一个页面。 - `...
JSP指令是JSP页面中的一种特殊语法,它们不直接影响HTML输出,而是对整个JSP页面或生成的Servlet类产生影响。本篇文章主要探讨的是JSP中的两种主要指令:`page` 和 `include`。 1. JSP `page` 指令: `<%@ page>` ...
第1部分 xml篇. 第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有...
在页面主体部分,通过循环读取每一行数据并在页面上显示出来。 #### 四、JavaBean详解 接下来是`DelimitedDataFile.java`文件的源码,该JavaBean实现了文件读取的功能: ```java import java.io.*; import java....
本篇文章将围绕“renshi.rar_jsp 文件管理_jsp人事管理_renshi.bmp在哪儿_人事管理_人事管理jsp”这一主题,深入探讨基于JSP的人事管理系统以及相关知识点。 首先,我们来看标题中的“renshi.rar”,这是一个压缩...
### Struts2完成JSP页面提交日期类型信息转换及国际化显示 #### 一、概述 在Web开发中,处理用户提交的数据尤其是日期类型的输入时,往往需要进行一系列的数据转换和格式化工作。Struts2框架提供了强大的数据转换...
弹出式日历控件在用户点击日期输入框时显示,而嵌入式日历控件则直接在页面上呈现一个完整的日历视图,用户可以直接通过视觉选择日期。 在Java Web开发中,常用的日历控件库有: 1. **jQuery UI Datepicker**: 这...
第1部分 xml篇. 第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有...
本篇文章将深入探讨如何在JSP中实现自定义标签,特别是创建一个自动完成框的功能。这个功能常见于许多网站的搜索栏,能根据用户输入的内容提供实时的建议。 首先,我们要理解JSP自定义标签的概念。自定义标签是JSP...