`
piperzero
  • 浏览: 3541533 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

jsp页面显示新闻.公告之类的上一篇下一篇

 
阅读更多

http://hi.baidu.com/a393060727/blog/item/19dc08d5f2408acd51da4b3b.html

jsp页面显示新闻.公告之类的上一篇下一篇(转载)
2009-07-14 23:23

此方法有二种:
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 } &nbsp;&nbsp;编辑:${viewnews.zuozhe } &nbsp;&nbsp;发布时间:${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}

分享到:
评论

相关推荐

    javax.servlet.jsp.tagext源码

    在Java服务器页面(JSP)技术中,`javax.servlet.jsp.tagext`包是核心组件之一,它提供了用于创建自定义标签库(Tag Libraries)的接口和类。自定义标签是JSP的一种强大特性,允许开发者将复杂的逻辑封装到可重用的...

    jsp页面加载之遮罩层

    "jsp页面加载之遮罩层"这个主题关注的是在JSP页面加载过程中,如何使用遮罩层来提升用户体验,尤其是在等待页面完全加载时提供一种视觉反馈,让用户知道页面正在处理。 首先,遮罩层通常是一个半透明的div元素,...

    JSP自定义标签之日期显示

    本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过自定义标签来优雅地处理日期格式化和展示。 首先,我们要理解JSP自定义标签的基本概念。自定义标签是JSP的一种扩展,它不是Java内置的标签,而是由开发者...

    JSP之使用jsp:forward实现用户信息验证的页面跳转

    在Java服务器页面(JSP)开发中,页面跳转是一个常见的需求,特别是在处理用户交互和信息验证时。`jsp:forward`元素是JSP中的一种动作标签,用于将请求转发到另一个页面,而不是生成一个新的HTTP请求。这在处理用户...

    Jsp 页面注册与登录实现

    JSP 是一种基于Java的技术,用于创建动态网页。本文将从代码层面深入分析一个具体的注册与登录实现案例,并对其中的关键技术和步骤进行详细解读。 #### 二、技术栈与环境配置 - **开发语言**:Java - **Web服务器*...

    jsp与Servlet跳转

    - 最终会显示一个结果页面或者转发到其他页面,如`Result.jsp`或`Error.jsp`。 #### 五、图形并茂 假设我们有以下的页面和服务结构: - 页面: `Index.jsp`, `Input.jsp`, `Confirm.jsp`, `Result.jsp`, `Error....

    jsp文件管理器.rar

    本篇文章将深入探讨如何使用JSP来创建一个简单的文件管理器,涉及的主要知识点包括文件操作、目录遍历、时间戳处理等。 首先,我们要理解JSP的基础。JSP是一种基于Java的服务器端技术,它允许开发者在HTML代码中...

    JSP中使用数据库2 主页面.txt

    通过加载驱动、建立连接、执行SQL语句和处理结果集等步骤,实现了从数据库中读取数据并在页面上显示的功能。这对于理解JSP与数据库之间的交互机制非常重要,是进行Web应用开发不可或缺的基础技能之一。

    jsp教程之内建对象篇

    在Java Server Pages(JSP)技术中,内建对象是一组预定义的对象,它们为开发者提供了方便的功能,无需显式创建即可直接在页面上使用。这些内建对象是JSP生命周期的一部分,帮助简化Web开发过程,提高效率。本教程...

    JSP动作与数据加密

    JSP动作是JSP元素之一,它们并不像脚本元素那样在服务器上执行,而是由JSP引擎在转换成Servlet时处理。JSP动作主要分为以下几类: 1. `&lt;jsp:include&gt;`:用于在页面渲染时动态包含其他文件,可以是静态资源(如HTML...

    良葛格JspServlet学习笔记.pdf

    JSP中的一些Action元素用于执行特定的动作,例如包含文件或跳转到另一个页面。 - `&lt;jsp:plugin&gt;`:用于输出Applet标签。 - `&lt;jsp:include&gt;`:用于包含静态文件。 - `&lt;jsp:forward&gt;`:用于转发到另一个页面。 - `...

    WEB开发 之 JSP指令.docx

    JSP指令是JSP页面中的一种特殊语法,它们不直接影响HTML输出,而是对整个JSP页面或生成的Servlet类产生影响。本篇文章主要探讨的是JSP中的两种主要指令:`page` 和 `include`。 1. JSP `page` 指令: `&lt;%@ page&gt;` ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第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文件操作之读取篇

    在页面主体部分,通过循环读取每一行数据并在页面上显示出来。 #### 四、JavaBean详解 接下来是`DelimitedDataFile.java`文件的源码,该JavaBean实现了文件读取的功能: ```java import java.io.*; import java....

    renshi.rar_jsp 文件管理_jsp人事管理_renshi.bmp在哪儿_人事管理_人事管理jsp

    本篇文章将围绕“renshi.rar_jsp 文件管理_jsp人事管理_renshi.bmp在哪儿_人事管理_人事管理jsp”这一主题,深入探讨基于JSP的人事管理系统以及相关知识点。 首先,我们来看标题中的“renshi.rar”,这是一个压缩...

    strut2完成jsp页面提交日期类型信息转换及实现显示信息化(通过完成注册信息提交实现国家化、日期类型转化)

    ### Struts2完成JSP页面提交日期类型信息转换及国际化显示 #### 一、概述 在Web开发中,处理用户提交的数据尤其是日期类型的输入时,往往需要进行一系列的数据转换和格式化工作。Struts2框架提供了强大的数据转换...

    JSP日历控件

    弹出式日历控件在用户点击日期输入框时显示,而嵌入式日历控件则直接在页面上呈现一个完整的日历视图,用户可以直接通过视觉选择日期。 在Java Web开发中,常用的日历控件库有: 1. **jQuery UI Datepicker**: 这...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第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自定义标签的概念。自定义标签是JSP...

Global site tag (gtag.js) - Google Analytics