用Application对象制作留言板
- 格式:doc
- 大小:52.50 KB
- 文档页数:2
本文旨在告诉新手如何自己动手制作一个留言板并整合进你的网站里,并巩固与学习ASP知识,高手请绕道。
此文包含留言板与分页内容本文不进行ASP语法讲解,因为网上这类的教程太多了,只需要按照步骤来,那么只要你会用table,就会做它,并且完全可自定义样式与模式,同时学习ASP知识,了解动态网站的原理,好了废话说的太多了,我们开始吧:首先,先看看我的留言板是怎么做的/liuyan/gyzz.asp#给我留言,这是我将我的留言板整合网站系统里的样子,从这里可以看出,你可以把这样的东西放在网站任何一个地方,不止留言板,其他的东西也可以以此类推。
看完了留言板之后,咱们开始制作!第一步,设计版面,你可以自己大脑里构思或者用PHOTOSHOP设计,这是我的设计图:第二步:用Dreamweaver或者Frontpage(我是用Frontpage的)打开ly.html然后在里面做出留言板的框架,至于做框架的步骤我就不说了,如果这个都不会那我实在不好说了,然后再定义一下CSS,如下图:第三步:做好了框架以后切换到代码编辑模式,在代码最顶端加入如下代码:<%@LANGUAGE="VBScript" codepage="936"%><!--#include file="conn.asp"--><%set rs=server.createobject("adodb.recordset")sql="select user,qq,shijian,neirong,huifu,yc,id from main order by id desc" rs.open sql,conn,1,1rs.pagesize=20 '是行数tatalrecord=rs.recordcounttatalpages=rs.pagecountrs.movefirstnowpage=request.querystring("page")if nowpage&"x"="x" thennowpage=1elsenowpage=cint(nowpage)end ifrs.absolutepage=nowpagen=1%>第四步:在代码编辑模式下找到“测试一下”字样,将其替换为<%=rs("user")%>,找到“哈哈哈”字样,将其替换为<%=rs("neirong")%>,找到“1111”字样,将其替换为<%=rs("qq")%>,找到“2009”字样,将其替换为<%=rs("shijian")%>,找到“第1条留言”字样里的“1”,将其替换为<%=rs("id")%>,找到“笑什么笑”字样,将其替换为<%=rs("yc")%><%=rs("huifu")%>。
Application对象及其常用方法基本操作应用示例Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。
示例01—01:体验开/关屏幕更新(ScreenUpdating属性)Sub 关闭屏幕更新()MsgBox ”顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新"Worksheets(1).SelectMsgBox "目前屏幕中显示工作表Sheet1"Application。
ScreenUpdating = TrueWorksheets(2).SelectMsgBox "显示Sheet2了吗?”Worksheets(3).SelectMsgBox ”显示Sheet3了吗?"Worksheets(2).SelectMsgBox ”下面与前面执行的程序代码相同,但关闭屏幕更新功能"Worksheets(1).SelectMsgBox ”目前屏幕中显示工作表Sheet1” & Chr(10) & ”关屏屏幕更新功能"Application.ScreenUpdating = FalseWorksheets(2).SelectMsgBox ”显示Sheet2了吗?”Worksheets(3).SelectMsgBox "显示Sheet3了吗?"Worksheets(2)。
SelectApplication.ScreenUpdating = TrueEnd Sub示例说明:ScreenUpdating属性用来控制屏幕更新.当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CPU的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。
天津滨海职业学院毕业设计(论文)题目:留言板设计天津滨海职业学院毕业设计(论文)简单的留言系统姓名:笑嘻嘻院系:信息工程系专业:软件技术班级:1班指导教师:笑嘻嘻职称:zzzz天津滨海职业学院二零一四年四月内容提要沟通与交流是交友的重要手段与环节,如何加强好友之间的沟通与交流,简便的留言必不可少,它不但有利于好友之间友谊的建设,也更能体现当今社会信息化的好处。
留言板的主要功能是实现发表留言、回复留言、删除留言的功能。
好友之间可以互相发表留言,而在自己的空间里可以对好友的留言进行回复和删除。
一般来说,留言板主要有文本留言板、XML留言板和数据库留言板。
文本留言板主要采用文本文件作为资料的存储载体,故不能有效的管理数据,随着信息量的增大,访问速度也将会急剧下降。
现在XML文档日益成为网络资料的标准格式,在没有数据库的情况下,采用XML文档存储数据是个不错的选择。
当数据量庞大时,采用关系数据库是最佳选择。
本系统就是采用关系数据库来存储留言信息。
本系统采用了设计动态数据库,用关系数据库的标准SQL语言来实现系统后台数据的相关处理,学生可以在互联网上给好友留言或者回复或删除好友留言,也可以查看好友的空间留言。
本系统将WEB与成熟的数据库技术结合起来,实现好友之间互相留言对话。
关键词:沟通交友留言目录第一章绪论 (1)1.1课题背景 (1)1.2 主要内容及研究意义 (2)1.3 论文的组织结构 (2)第二章系统需求分析 (4)2.1系统简述 (5)2.2 系统的设计目标 (5)2.3 系统的数据字典 (6)第三章系统总体设计 (9)3.1系统结构设计 (9)3.2 系统层次图 (9)3.3 系统各主要功能模块的设计与实现 (10)3.3.1框架页面实现 (10)第四章系统功能测试 (12)第五章系统的不足及改进思想 (14)第六章系统总结 (15)6.1总结 (15)6.2 展望 (16)参考文献 (18)致谢 (19)第一章绪论1.1课题背景在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。
留言板开发Java高级开发课程综合性、设计性实验报告一、实验设计1.所连接的MySQL数据库表结构2.Java代码中对应的连接MySQL表:3.UML图:二、调试过程及结果1.数据库已连接成功,但图形界面中的TextArea无法正确显示内容,通过设置在TextArea中追加显示可以解决问题。
2.数据库中插入数据时出现乱码,无法正确插入文本的编码字符,将字符集编码修正为utf-8后可正常使用。
3.单击我要留言按钮后,在单击查看/刷新留言按钮,再单击提交留言按钮,会出现多行重复历史留言全部录入等情况,通过修改按钮显示来解决。
4.调试正确结果a. 启动界面b.留言界面c.提交留言界面d.留言列表界面e.留言列表与数据库中数据详情界面f.清除历史留言界面三、实验小结通过这次实验报告的完成,使我更加明确的掌握了javafx基础组件中的Button按钮、TextArea文本域,布局HBox、VBox,lambda处理动作事件表达式的使用方法及其功能,在连接到MySQL数据库时,应当在启动对应的数据库连接服务之后再运行相应的连接程序,否则会发生程序无法连接到数据库的问题出现。
以及在使用Connection对象用来创建与指定数据源的连接,Microsoft SQL server、Oracle、MySQL之类的能够为其指明一个OLEDB提供程序或一个ODBC驱动器的数据源,如果Connection连接对象连接超出范围,并不会自动关闭。
垃圾回收程序会收集该对象实例,但不会关闭连接,所以需要设定一个用来监听窗口时候关闭的事件来检测窗口是否已经关闭,当窗口已经关闭时,同时需要关闭Connection所连接的对象防止出现错误。
在使用ResultSet类时需要注意所需要获取的数据库的表的结构范围,否则容易造成所访问的数据超出预期范围等情况,使用Statement类创建查询时需要注意要查询的字符串应当符合数据库中的查询字段,应尽量先在数据库中将语句测试完成,再使用java中的executeQuery、execute分别进行语句的查询,插入等操作。
JSP简易留⾔板写在前⾯在上篇博⽂中介绍JSP的9个内置对象的含义和常⽤⽅法,但都是⽐较理论的知识。
今天为⼤家带来⼀个⼩应⽤,⽤application制作的简易留⾔板。
包括三个功能模块:留⾔提交、留⾔展⽰、查看留⾔板。
⽤3个JSP页⾯展⽰信息(视图层),⼀个servlet处理⽤户的请求(控制层),因为⽐较简单没有⽤到javaBean作为模型层。
还有⼀个filter初始化应⽤。
表单提交本例中⽤submit.jsp页⾯提交留⾔。
⽤表单提交⽤户的请求参数,action参数处理⽤户请求程序的路径。
关于表单提交有两点说明:1.路径在JSP页⾯中,建议⽤绝对路径,形如:<%=request.getContextPath()%>/MsgPane,request.getContextPath()代表项⽬的根⽬录。
其原因是绝对路径简单不容易出错。
在写JSP程序是经常会犯路径的错误,就是没明⽩⼀些基本的概念。
为了统⼀前后端路径的使⽤,IDE在新建JSP的会加⼊<base>标签,这个时候相对路径是不起作⽤的,浏览器解析时会在其前⾯加上base的href属性值。
例如:2.⽅法post提交时,参数不会附加在URL中,安全性更⾼,表单提交建议使⽤post。
submit.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><form action="<%=request.getContextPath()%>/MsgPane" method="post">请输⼊你的姓名:<br><input type="text" name="name"><br>请输⼊你的标题:<br><input type="text" name="title"><br>留⾔内容:<br><textarea rows="15" cols="20" name="message"></textarea><br><br><input type="submit" value="提交信息"><br></form><form action="<%=request.getContextPath()%>/msgpane/messages.jsp"><input type="submit" value="查看留⾔板"></form><%-- </body>--%></html>处理⽤户请求我们⼀般⽤servlet处理⽤户请求,servlet多⽤于流程控制,也就是我们常说得MVC中C(控制层)。
一、安装与调试常听朋友感叹ASP程序难学不易懂,不过我起初学习这门技术的时候也有过这样的感悟。
从今天开始,我将以我学ASP的经验来做一个简单的ASP留言本,这个留言本用了Access数据库,所以务必请大家要跟我一起做的朋友都安装好Office软件,相信各位自己的电脑上都有了。
好了,开始。
创建ASP的运行环境(安装IIS)IIS(Internet Information Service)是构建ASP站点所必须的,所以,我们应该先确认自己的电脑已安装了IIS信息服务,如果没有安装好的话,请按以下步骤:1、打开“控制面板”2、双击“添加/删除程序”3、单击“添加/删除Windows组件”,打开添加/删除Windows组件对话框:3、从下拉的列表中选择“Internet 信息服务(IIS)”单击“下一步”:4、出现组件安装进度窗口,如弹出需要安装盘的话,放入Windows2000安装盘,按提示操作即可。
直至最后安装完毕。
二、设计数据库ASP程序本身并不能储存数据,众所周知,留言本有以下信息需要保存:留言者姓名、联系方式、留言内容等等。
因为ASP并不能储存数据,所以数据库在这种环境之下就产生了。
数据库的种类也很多,针对不同的程序也有适用于它的数据库,比如Access 和Ms SQL就比较适用ASP和程序,至于其它的数据库和程序,就不属于本文所讨论的问题了,有兴趣的朋友可以查看其它一些资料。
那么既然Access和MS SQL都适用ASP,那么具体又如何来选择呢?我们可以打一个比方:比如钉一枚小钉子,聪明的人一定不会用一个大的棒槌,而是选择小的铁锤,虽然用大的棒槌也一样的可以把钉子钉进去,可是没有人愿意这样做。
数据库也一样:Access比较适用小型的应用,而MS SQL则适用于大中型的数据库应用,所以要做一个留言本,理所当然是选择Access更好一些,但是如果你决心使用MS,没有人会极力阻止你。
好了,废话少说,切入正题,下面开始创建数据库。
jsp课程总结:课程jsp 课程总结范文课程总结怎么写课程总结心得体会篇一:JSP课程总结JSP课程总结1006010101 计算机1班董楠楠在学习这门课之前,JSP对于我来说是一个全新的领域,包括其基础的HTML静态网页的相关知识,数据库方面,服务器的作用都不了解。
一开始难免的失意和紧张,觉得这门课对我来说是一种挑战。
经过一个学期的课程学习以及近期的基于JSP的网盘课程设计,我对这门课终于有了初步的了解,虽然掌握得很肤浅,但内心很兴奋,很欣喜,新的语言入门很难,但我相信在日后的学习中,我会有一定的突破。
JSP的全称是Java Server Pages,它是一种动态网页技术。
我们需要配置的坏境有JDK,Tomcat,还要用到Myeclips这一基础的编程工具。
在学习JSP之前,由于没有网页编程的基础,便学习了HTML这种文本标记语言,自己试着去做简单的静态网站。
后来学做JSP动态网站时,就涉及到了多方面的知识,JSP内部对象及内部对象所涉及的方法,JSP与数据库连接,如何去引用数据库。
这门课更是巩固了JAVA这一基础编程语言,要求对JAVA掌握的要透彻,每门语言要学扎实,深入理解,都要花费很大的功夫,不是容易的事情。
通过以上知识的学习,对开发简单的动态网页有(转载于: 写论文网:jsp课程总结)了些许的眉目,又进一步加深了对JSP的了解。
比如我们此次的课设,设计一个网络硬盘,用户可以再上面上传、下载资料,存储基本信息。
JSP在工作时,首先启动服务器,并且保证应用在服务器上,客户通过浏览器发送请求,服务器接收到请求之后,查找有没有这个文件对应的JAVA文件的对象。
如果没有这个文件,则需要创建(先把JSP文件转换成JAVA文件,编译成.class文件,加载类并创建对象),然后调用对象的相应方法,方法完成对用户的响应,通常输出的是HTML代码,客户端接收到HTML代码,浏览器解析这个代码生成画面。
在网站设计中,处处离不开Servlet,它充当一个控制器,负责封装数据,处理业务,页面分发。
1.Left.jsp<li><a class="head">留言评论管理</a><ul><li><a href="../leave/leaves.action"target="rightFrame">查看/删除留言</a></li></ul></li>2.LeaveActionpackage com.um.action;import java.util.List;import org.apache.struts2.ServletActionContext;import org.apache.struts2.interceptor.validation.SkipValidation;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Order;import org.hibernate.criterion.Restrictions;import com.opensymphony.xwork2.ActionSupport;import com.um.pojo.Leave;import com.um.service.LeaveService;import com.um.util.Paginate;public class LeaveAction extends ActionSupport {private static final long serialVersionUID = 6654280697600536538L;Leave leave=null;List<Leave> leaveList=null;public Leave getLeave() {return leave;}public void setLeave(Leave leave) {this.leave = leave;}public List<Leave> getLeaveList() {return leaveList;}public void setLeaveList(List<Leave> leaveList) {this.leaveList = leaveList;}@SkipValidationpublic String list() throws Exception{LeaveService us=new LeaveService();try {DetachedCriteria criteria=DetachedCriteria.forClass(Leave.class);criteria.addOrder(Order.desc("regtime"));//实例化paginate类,同时传递符合查询条件的记录总数Paginate paginate=new Paginate(us.countByCriteria(criteria));//method 作用是告诉action,用户的操作时什么String method="";if(ServletActionContext.getRequest().getParameter("method")!=null)method=ServletActionContext.getRequest().getParameter("method");int currentPage=1;if ("last".equals(method))st();if("frist".equals(method))paginate.first();if("next".equals(method)){currentPage=Integer.parseInt(ServletActionContext.getRequest().getParameter("currentPage" ));paginate.setCurrentPage(currentPage);paginate.next();}if("previous".equals(method)){currentPage=Integer.parseInt(ServletActionContext.getRequest().getParameter("currentPage"paginate.setCurrentPage(currentPage);paginate.previous();}//将paginate对象放到请求中ServletActionContext.getRequest().setAttribute("paginate", paginate);// 根据离线criteria和paginate进行分页查询leaveList = us.findByCriteria(criteria,paginate);return SUCCESS;} catch (Exception e) {e.printStackTrace();return ERROR;}}public String leaves() throws Exception{LeaveService us=new LeaveService();try {DetachedCriteria criteria=DetachedCriteria.forClass(Leave.class);criteria.addOrder(Order.desc("regtime"));//实例化paginate类,同时传递符合查询条件的记录总数Paginate paginate=new Paginate(us.countByCriteria(criteria));//method 作用是告诉action,用户的操作时什么String method="";if(ServletActionContext.getRequest().getParameter("method")!=null)method=ServletActionContext.getRequest().getParameter("method");int currentPage=1;if ("last".equals(method))st();if("frist".equals(method))paginate.first();if("next".equals(method)){currentPage=Integer.parseInt(ServletActionContext.getRequest().getParameter("currentPage" ));paginate.setCurrentPage(currentPage);paginate.next();}if("previous".equals(method)){currentPage=Integer.parseInt(ServletActionContext.getRequest().getParameter("currentPage" ));paginate.setCurrentPage(currentPage);paginate.previous();}//将paginate对象放到请求中ServletActionContext.getRequest().setAttribute("paginate", paginate);// 根据离线criteria和paginate进行分页查询leaveList = us.findByCriteria(criteria,paginate);return SUCCESS;} catch (Exception e) {e.printStackTrace();return ERROR;}}public String show() throws Exception{LeaveService us=new LeaveService();leave=us.findById(leave.getId());return SUCCESS;}public String delete() throws Exception{LeaveService us=new LeaveService();try {us.delete(leave);return SUCCESS;} catch (Exception e) {e.printStackTrace();return ERROR;}}public String register() throws Exception{LeaveService us=new LeaveService();try {leave.setRegtime(new java.sql.Timestamp(new java.util.Date().getTime()));us.save(leave);return SUCCESS;} catch (Exception e) {e.printStackTrace();return ERROR;}}}3. ILeaveDAO package com.um.dao;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import com.um.pojo.Leave;import com.um.util.Paginate;public interface ILeaveDAO {/*** 方法说明:根据ID查询UserInfo * @param id 用户编号* @return 返回UserInfo对象实例* @throws Exception*/public Leave findById(int id) throws Exception;/*** 方法说明:删除一条UserInfo记录* @param id 用户编号* @throws Exception*/public void delete(Leave leave) throws Exception;/*** 方法说明:添加一条UserInfo记录* @param userInfo UserInfo对象实例* @throws Exception*/public void save(Leave leave) throws Exception;/*** 方法说明:使用离线criteria查询* @param criteria 离线查询条件* @param pageNo 页码* @return 返回查询结果列表* @throws Exception*/public List<Leave> findByCriteria(DetachedCriteria criteria,Paginate paginate) throws Exception;/*** 方法说明:使用离线criteria查询* @param criteria* @return 返回查询数量* @throws Exception*/public int countByCriteria(DetachedCriteria criteria) throws Exception;}4. LeaveDAOImplpackage com.um.dao.impl;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.criterion.DetachedCriteria;import com.um.dao.BaseHibernateDAO;import com.um.dao.ILeaveDAO;import com.um.pojo.Leave;import com.um.util.Paginate;public class LeaveDAOImpl extends BaseHibernateDAO implements ILeaveDAO{@SuppressWarnings("unchecked")public List<Leave> findByCriteria(DetachedCriteria criteria,Paginate paginate) throws Exception{try {//得到session离线criteriaCriteria c=criteria.getExecutableCriteria(getSession());//设置分页条件c.setMaxResults(paginate.getPageSize());c.setFirstResult(paginate.getStartRow());return criteria.getExecutableCriteria(getSession()).list();} catch (RuntimeException re) {throw re;}}public void save(Leave leave) throws Exception {try {getSession().save(leave);} catch (RuntimeException re) {throw re;}}public Leave findById(int id) throws Exception {try {Leave instance = (Leave) getSession().get("com.um.pojo.Leave", id);return instance;} catch (RuntimeException re) {throw re;}}public int countByCriteria(DetachedCriteria criteria) throws Exception{try {return criteria.getExecutableCriteria(getSession()).list().size();} catch (RuntimeException re) {throw re;}}public void delete(Leave leave) throws Exception {try {getSession().delete(leave);} catch (RuntimeException re) {throw re;}}}5. LeaveService package com.um.service;import java.util.List;import org.hibernate.Transaction;import org.hibernate.criterion.DetachedCriteria;import com.um.dao.impl.LeaveDAOImpl;import com.um.pojo.Leave;import com.um.util.Paginate;public class LeaveService {Leave leaveDAO=new Leave();LeaveDAOImpl leaveDAOImpl=new LeaveDAOImpl();public Leave findById(int id) throws Exception {try{return leaveDAOImpl.findById(id);}catch(Exception e){e.printStackTrace();throw e;}}public void save(Leave leave) throws Exception {try{Transaction tx=null;tx=leaveDAOImpl.getSession().beginTransaction();leaveDAOImpl.save(leave);mit();}catch(Exception e){e.printStackTrace();throw e;}}public void delete(Leave leave) throws Exception {try {leaveDAOImpl.getSession().clear();Transaction tx=null;tx=leaveDAOImpl.getSession().beginTransaction();leaveDAOImpl.delete(leave);mit();} catch (RuntimeException re) {throw re;}}public List<Leave> findByCriteria(DetachedCriteria criteria,Paginate paginate) throws Exception{try{return leaveDAOImpl.findByCriteria(criteria,paginate);}catch(Exception e){e.printStackTrace();throw e;}}public int countByCriteria(DetachedCriteria criteria) throws Exception{try{return leaveDAOImpl.countByCriteria(criteria);}catch(Exception e){e.printStackTrace();throw e;}}}6. struts.xml<!-- 用户留言 --><package name="leave"extends="struts-default"namespace="/leave"><action name="register"method="register"class="com.um.action.LeaveAction"><result name="input">/leave/leave.jsp</result><result type="redirect">list.action</result><result name="error"type="redirect">/leave/error.jsp</result></action><action name="list"method="list"class="com.um.action.LeaveAction"><result>/leave/leave.jsp</result><result name="error"type="redirect">/error.jsp</result> </action><action name="delete"method="delete"class="com.um.action.LeaveAction"><result type="redirect">/leave/leaves.action</result><result name="error"type="redirect">/error.jsp</result> </action><action name="leaves"method="leaves"class="com.um.action.LeaveAction"><result>/leave/leaveList.jsp</result><result name="error"type="redirect">/error.jsp</result> </action><action name="show"method="show"class="com.um.action.LeaveAction"><result>/leave/leaveShow.jsp</result></action></package>。
jsp⽤application对象制作留⾔板1 <%@ page contentType="text/html; charset=gb2312"%>2 <html>3 <body>4 <form action="show.jsp" method="post">5输⼊名字:<input type="text" name="name"><br> 留⾔标题:<input6 type="text" name="title"><br> 留⾔:<br>7 <textarea rows="10" cols="30" name="text" wrap="physical"></textarea>8 <br> <input type="submit" value="提交"><br>9 </form>10 <form action="chuli.jsp" method="get">11 <input type="submit" name="look" value="查看留⾔板"><br>12 </form>131415 </body>16 </html><%@ page contentType="text/html; charset=gb2312"%><%@page import="java.util.Vector"%><%@ page import="java.util. *"%><%request.setCharacterEncoding("gb2312");String name = request.getParameter("name");String title = request.getParameter("title");String text = request.getParameter("text");if (name == null || name.length() == 0)name = "";if (title == null || title.length() == 0)title = "";if (text == null || text.length() == 0)text = "";String s = name + "#" + title + "#" + text;add(s);%><%!Vector vector = new Vector();ServletContext application;//有些服务器不直接⽀持application对象,//必须⽤ServletContext 类类声明这个对象,//再使⽤getServletContext⽅法//对application对象初始化int i = 0;synchronized void add(String s) {application = getServletContext();i++;vector.add("NO." + i + "," + s);application.setAttribute("mess", vector);//如果添加的2个对象的关键字相同,则先前的关键字被清除,mess叫索引关键字}%><a href="chuli.jsp">返回留⾔界⾯</a><%@ page contentType="text/html; charset=gb2312"%><%@ page import="java.util.Vector"%><%!public String handString(String s) {try {byte b[] = s.getBytes("gb2312");s = new String(b);} catch (Exception exp) {}return s;}%><%Vector vector = (Vector) application.getAttribute("mess");//因为任何对象都可以添加到application中,取回对象时,//所以要强制转回原来的类型。
1、使用application对象的num属性来保存目前发表留言的总数,用application对象的三组属性autn、titn、artn(n=1、
2、3….)来保存所有用户发表的每一篇留言的作者、题目和留言内容。
2、liuyan1.jsp:
文件开头的一段JSP代码判断是否刚开始建立application对象,即判断application对象的num属性值是否为空(null)。
如果是,则设这个属性值为0,从而保证了application对象的num值在以后的页面中不为空。
3、liuyan2.jsp:
当作者添加完内容并单击“添加到留言板”按钮时,内容被提交到liuyan2.jsp。
liuyan2.jsp 首先通过request对象得到用户添加的内容,如果用户添加的内容不全,则给出信息“不添加作者、标题和内容,留言失败!”,此时不做任何处理,留言添加没有成功。
只有用户添加信息符合要求,程序将给application对象的num属性加1,同时把用户添加的留言作者、标题和内容赋给application对象的属性autn、titn、artn(n=1、2、3….n的值为num中保存的数值)中去。
4、liuyan3.jsp:
liuyan3.jsp程序首先使用getAttribute方法获取application对象的num属性的值,即获取到留言总数值,然后根据这个数值建立循环,从application对象的三组属性中提出每个留言的作者、标题和内容,生成表格打印这些留言。