摘要: Blog是Web blog的缩写,中文就是“网络日志”,在中国我们称它为博客。它被解释为一个特定的软件系统, 被用来在网络上出版、发表和张贴个人的文章并且通常是由简短且经常更新的帖子所构成,这些张贴的文章都按照年份和日期倒序排列。Blog的内容和目的有很大的不同,从对其他网站的超级链接和评论,有关公司、个人构想到日记、照片、诗歌、散文,甚至科幻小说的发表或张贴都有。而此系统也主导这一思想,主要为了完善地实现注册用户发表文章,访客可以匿名发表评论等相关功能来设计,并且完成前台运作和管理。
博客就是以网络作为载体,简易迅速便捷地发布自己的心得,即时有效轻松的与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。博客系统可以充分展示每个用户的内心世界、工作感受、技术资料等方面的资讯。博客是个独立站点任何人都可以方便的来使用,就像每个人拥有自己的笔记本开始书写一样简单。
系统功能保留了传统博客系统的功能,同时又加上了人性化的界面设计,比如日历、音乐的引用。完善的数据更新能力、实用的管理以及个性化的设计使本系统能适应博客的发展。
系统页面采用Html语言和Css样式以及JavaScript脚本来设计,系统的相关功能由Java语句来实现,使用Tomcat为服务器,和Oracle 数据库作为后台,采用Jsp+Servlet+JavaBean模式来完成系统的相关功能。主要分为游客角色和用户角色。游客可以注册、查看日志、照片、博主的资料和匿名发表评论。用户则完成写日志、修改日志、上传照片、管理照片、更改个人信息、添加收藏、退出系统等功能。
关键字: 博客 系统 Jsp
A BLOG SYSTEM BASED ON JSP
Abstract s :Blog is the abbreviation of Web blog, whose Chinese meaning is “the network diary”. In China, we call it Blog, which is explained as specific software used to publish individual articles in the network and usually consists of a brief and frequently updated posts, these articles posted in reverse chronological order, and date. Blog content and purpose are quite different from other websites, the hypertext links and comments about the company, personal diary, photographs, and ideas to poetry, prose, even science fiction published or posted. For this purpose, our system is designed to perfect some correlative functions, such as publish articles for the registration users, publish anonymous comments for the visitors, and complete the foreground operations and managements.
Blog is simple to network as the carrier, rapid conveniently released their experiences, instant effectively communicate easily with others, then set colorful personalized display in an integrated platform. Blog system can fully display each user's inner world, work experience and technical data, etc. Blogging is a independent site anyone can easily to use, like everyone has his notebook to write.
It not only retains the traditional Blog system, but also adds com personal windows design, such as the quote of calendar, and music. Based on the flawless ability of data renewal, useful backstage management and personal design, this system can adapt to the development of Blog.
System using Html page language and Css styles and JavaScript scripts, system design by the relevant function, use Java statements for the server, and Tomcat Oracle database, using a backend Jsp+Servlet+JavaBean mode to complete system of related functions.It mainly divided into tourist roles and user role. Visitors can view the log, photographs, and the material and anonymous blogger comment. Users will finish writing blog, modify log, uploading photos and pictures, the change of personal information management system, add collection, exit etc. functions.
Key words : Blog System Jsp
目录
引言
1 博客及相关技术概述
1.1 个人博客的概念
1.2 个人博客的发展现状
1.3 Web 技术的发展
1.4 Web 开发技术
2 需求分析
2.1 系统目标
2.2 系统功能要求
2.3 系统的性能要求
2.4 系统的性能要求
3 概要设计
3.1 系统体系结构
3.2 主要功能设计
3.3 数据库设计
3.4 信息安全设计
4 详细设计
4.1 首页及主要页面设计
4.2 功能模块设计
4.3 系统实现
5 遇到的难点和解决方法
6 结束语
参考文献
致 谢
引言
博客通常被称为“网络日志”简称为“网志”。博客是继EMAILE、BBS、IM之后出现的第四种全新的网络交流方式。博客系统不仅仅是一种单向的发布系统,它有着极其出色的交流功能。在以往的几种网络交流方式中,BBS过于公共化。而EMAILE和即时通信工具IM则有很明显的私人性质,博客系统的出现则将公共性和私人性很好的结合起来。博客是一个正处于快速发展和快速演变中的互联网新应用,它就是一个网页,通常由简短且经常更新的帖子构成,这些帖子一般是按照年份和日期倒序排列的。它并不等同于“网络日志”。作为网络日志是带有很明显的私人性质的,博客则是私人性和公共性的有效结合,它绝不仅仅是纯粹个人思想的表达和日常琐事的记录,它提供的内容可以用来进行交流和为他人提供帮助,是可以包容整个互联网的,具有极高的共享精神和价值。Blog的内容和目的有很大的不同,从对其他网站的超级链接和评论,有关公司、个人、构想的新闻到日记、照片、诗歌、散文,甚至科幻小说的发表或张贴都有。许多Blogs是个人心中所想之事情的发表,其他Blogs则是一群人基于某个特定主题或共同利益领域的集体创作。
简言之,博客就是以网络作为载体,简易迅速便捷地发布自己的心得,即时有效轻松的与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。博客系统可以充分展示每个用户的内心世界、工作感受、技术资料等方面的资讯。博客是个独立站点任何人都可以方便的来使用,就像每个人拥有自己的笔记本开始书写一样简单。
博客的出现代替了以前的个人网站,任何人不需要懂得网页设计的制作技术,就可以在互联网上表达自己的观点,展示自己的风采,记录自己的生活琐事或是工作经验,让自己得到更多人的关注。
随着Blogging快速扩张,它的目的与最初的浏览网页心得已相去甚远。目前网络上数以千计的Bloggers发表和张贴Blog的目的有很大的差异。不过,由于沟通方式比电子邮件、讨论群组更简单和容易,Blog已成为家庭、公司、部门和团队之间越来越盛行的沟通工具,因为它也逐渐被应用在企业内部网络(Intranet)中。
1 博客及相关技术概述
1.1 个人博客的概念
BLOG是WEB LOG的缩写,简单来说就是网络日记,它是1997年12月由美国的Jorn Barger最早提出的,这些年全球博客获得了突飞猛进的发展。根据博客搜索引擎Technorati统计,目前全球平均每5.8秒钟诞生一个博客。它是一个新型的个人互联网出版工具,博客使用者可以很方便地用文字、链接、影音、图片建立起个性化的网络世界。
博客秉承了个人网站的自由精神,但是综合了激发创造的新模式,使其更具开放和建设性。它作为一种新表达的方式,它的传播不仅情绪,包括大量的智慧、意见和思想。某种意义上说,它也是一种新的文化现象,博客的出现和繁荣,真正凸现网络的知识价值,标志着互联网发展开始步入更高的阶段。
1.2 个人博客的发展现状
根据中国互联 网络信息中心(CNNIC)2009年1月发布的数据显示,2008年博客用户规模持续快速发展,截至2008年12月底,在中国2.98亿网民中,拥有博客的网民比例达到54.3%,用户规模为1.62 亿人。在用户规模增长的同时,中国博客的活跃度有所提高,半年内更新过博客的比重较2007年底提高了11.7%。博客数量的增长带来了用户聚集的规模效应。博客的影响力进一步加强。它不仅是网民参与互联网互动的重要体现,也是网络媒体信息渠道之一;不仅是一种网络技术手段和单纯的制作网页的行为,更是一种网络的文化现象。
现今,博客已经通过各种方式融入了我们的生活,成为了我们表现自己的主要方式。它们大部分是由简短而且经常更新的帖子构成,所有文章都是按照年份和日期排列。看上去平淡无奇,毫无可炫耀之处,但它让每个人零成本、零维护地创建自己的网络媒体,每个都可以随时把自己的思想火花和灵感更新到博客站点上。
1.3 Web技术的发展
1991年,欧洲粒子物理研究所(CERN)的软件工程师Tim Berners-Lee发布了他的万维网(World Wide Web)。从此以后,通过互联网看到的将不仅仅是文字,互联网有了图片,后来又有了音频、动画甚至视频。
WWW的成功在于它制定了一套标准的,易于掌握的超文本标记语言HTML、信息资源的统一定位格式URL和超文本传输协议HTTP,用超链接和超媒体把Internet上各种相关数据有机地链接起来,使互联网上的资源实现了共享。你只需要点击鼠标就可以浏览来自世界各地的丰富的、直观的信息,一个不懂电脑的人也可以很快成为Internet 行家。
开始的web页面都是静态文本,页面呆板,互动性不强,但是随着技术的发展,很快各种各样的动态网页技术涌现出来,这其中包括CGI、 ASP、PHP、Java、脚本语言如:JavaScript、VBScript等等。JavaScript 和 VBScript可以嵌入在HTML中实现一些客户端的动态功能;CGI大大扩展了Web服务的功能,可以实现web服务器与数据库及文件系统、应用程序的通信,动态生成超文本,于是网页活了起来。但CGI的运用需要具有一定的编程能力及算法技巧,而且与HTML要分开编写,维护和编写都比较困难,效率和安全性也不好。ASP,PHP克服了这些缺点,获得了广泛的应用。Java的出现给Web带来了新的活力。它具有完全的平台无关性,一次编写处处运行,用Java可以编写web页中执行的小程序Applet。它简单、面向对象、安全、健壮、分布式等优点特别适合开发web应用。在美国,JSP+ Servlet+ EJB已经成为电子商务网站的开发标准。
1.4 Web开发技术
JSP即(Java Server Pages),它具有平台无关特性,他们都用来帮助Web内容的开发者们使用相对少的代码创建动态的网页。一个JSP页面包含掺杂着Java代码的HTML代码。
下面主要介绍下JSP的特点:
1.将内容的生成和显示进行分离使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。
2.JSP技术源于Java语言。Java语言是体系结构中立的。这使JSP技术可以在实现这个JSP平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
3.JSP系统是可移植的。这种可移植性来源于体系结构中立性。
4.强调可重用的组件。绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeans TM组件)来执行应用程序所要求的更为复杂的处理。
5.采用标识简化页面开发 Web页面开发人员不会都是熟悉脚本语言的编程人员。JSP技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。
6.使用JSP标识或者小脚本来生成页面上的动态内容。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。
7.由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性;
8.作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。
当客户端请求一个JSP网页时,JSP Engine会检查所请求的JSP网页是否已经处于被载入执行的状态,如果没有,它会先读取JSP程序文件,将它换成Servlet程序代码编译载入,然后才执行请求的服务。也是就说,只有当客户端第一次请求JSP网页时,才需要被转换、编译和载入,做到了一次执行,处处执行。JSP的Servlet Class是JSP Engine自动帮我们编译产生的,不像Servlet需要手动编译,另外,在JSP程序中建立新的对象和Java Bean非常方便容易。
1.4.1 JSP的基础 — Servlet技术
Java Servlet是JSP技术的基础,JSP本身就是预先被编译成Servlet,然后再运行的,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成,Servlet这个名称大概源于Applet,现在国内的翻译方式很多,本文为了避免误会,本文直接采用Servlet这个名称而不做任何翻译,读者如果愿意,可以称之为“小服务程序”。Servlet其实和传统的CGI程序和ISAPI、NSAPI等Web程序开发工具的作用是相同的,在使用Java Servlet以后,用户不必再使用效率低下的CGI方式,也不必使用只能在某个固定Web服务器平台运行的API方式来动态生成Web页面。许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器也可以通过附加的应用服务器和模块来支持Servlet。得益于Java的跨平台的特性,Servlet也是平台无关的,实际上,只要符合Java Servlet规范,Servlet是完全平台无关且是Web服务器无关的。由于Java Servlet内部是以线程方式提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此Java Servlet效率非常高。但Java Servlet也不是没有缺点,和传统的CGI、ISAPI、NSAPI方式相同,Java Servlet是利用输出HTML语句来实现动态网页的,如果用Java Servlet来开发整个网站,动态部分和静态页面的整合过程简直就是一场噩梦。这就是为什么SUN还要推出Java Server Pages的原因。
1.4.2 JavaBean原理和机制
JSP的一大特点就是与JavaBeans的结合,而JSP与JavaBeans结合的一个突出的优点是页面显示和业务逻辑的分离。这可以使团队协作的更好,开发出更高质量的站点。
JavaBean是一种可以重用的Java组件,它类似于COM,在JSP程序中常用来封装事物逻辑、数据库操作等,可以很好的实现业务逻辑和前台程序的分离,使得系统具有更好的健壮性和灵活性。
事件处理是JavaBeans体系结构的核心之一。通过事件处理机智,可以让一些组件作为事件源,发出可被描述环境或其他组件接受的事件。这样,不同的组件就可在构造工具内组合在一起,组件之间通过事件的传递进行通信,构成一个应用。从概念上讲,事件是一种在“源对象”和“监听对象”之间、某种状态发生变化的传递机智。事件有许多不同的用途,如:鼠标事件、窗口边界改变事件、键盘事件等。在Java和JavaBeans中则是定义了一个一般的、可扩充的事件机制,它能够:
1.对事件类型和传递模型的定义和扩充提供一个公共框架,并适合于广泛的应用。
2.与Java语言和环境有较高的集成度。
事件能描述环境捕获和被激发。能使其他构造工具采取某种技术在设计时直接控制事件,遗迹控制事件源和事件监听者之间的联系。事件本身不依赖于复杂的开发工具。
特别的,事件机制还应当:
1.能够发现制定的对象类可以生成的事件。
2.能够发现制定的对象类可以观察监听到的事件。
3.提供一个常规的注册机制,允许动态操纵事件源与事件监听者之间的关系。
4.不需要其他的虚拟机和语言即可实现。
5.事件源与监听者之间可进行高效的事件传递。
6.能完成JavaBean事件模型与相关的其他组件体系结构事件模型的中立映射。
JSP和ASP.NET同样是网站开发中常用的开发工具。但是,ASP是微软的产品,其应用只能是在Windows平台上,移植性差,而且以源代码的形式存放在服务器端,安全性差。每次由服务器解释运行,运行效率不高。Jsp页面文件执行时被编译成字节代码,由客户端流览的Java虚拟机解释执行,不再是源代码,因此执行效率和安全性高。将数据库连接的重要信息存放在JavaBean文件后,可以编译成虚拟机才能解释的字节代码,确保了数据库的安全。
在ASP技术里,通过Web页面要实现一些特定的功能比较困难,比如基于网页的报表,打印实现起来就比较麻烦。ASP提供的解决方案是自己开发组件,通过在服务器端注册组件,成为独立的可以重复利用的模块供读者调用。因此要求读者需要掌握比较复杂的变成语言的开发技术。在JSP开发技术里,可以通过开发JavaBean文件实现同样的功能,JavaBean不需要注册,只要放置在相应的目录下就可以运行。可以实现ASP的COM组件同样的功能。此外JSP推出主要就是考虑到平台的无关性。JSP代码可以在APACHE、IIS等服务器上执行,支持大部分操作系统。JSP继承JAVA技术的优点:一次运行,处处运行。
鉴于此,本系统决定使用JSP做为开发工具。下面简单介绍一下相关的其他工具。
1.4.3 开发平台: Eclipse +D reamweaver
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——Eclipse Platform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。
Dreamweaver MX 是一款专业的 HTML 编辑器,用于对 Web 站点、Web 页和Web 应用程序进行设计、编码和开发。无论您喜欢直接编写 HTML 代码的驾驭感还是偏爱在可视化编辑环境中工作,Dreamweaver 都会为您提供帮助良多的工具,丰富您的 Web 创作体验。
利用 Dreamweaver 中的可视化编辑功能,您可以快速地创建页面而无需编写任何代码。不过,如果您更喜欢用手工直接编码,Dreamweaver 还包括许多与编码相关的工具和功能。并且,借助 Dreamweaver,您还可以使用服务器语言(例如 ASP、ASP.NET、ColdFusion 标记语言 (CFML)、JSP 和 PHP)生成支持动态数据库的Web 应用程序。
1.4.4 数据库:Oracle
Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。Oracle 具有以下特点:
1.ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
2.提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。
3.支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
4.提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性。
2 需求分析
2.1 系统目标
博客网站系统的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的个人博客网站,为网络用户提供进行在线交流的网络平台。
通过个人博客网站可以结交更多的朋友,表达更多的想法,它随时可以发布文章。
具体的要求如下:
1.博主可以简单的添加和删除文章。
2.独立于具体的数据库平台。对于与数据库交互的部分充分考虑兼容性。
3.容易在原先基础上进行二次开发。
4.中间基础平台的无型性。尽量采用开放的标准技术,达到跨平台运行的效果。
为了达到以上的开发目的,个人博客网站应遵循一定的设计和开发与原则。
1.模块接口定义清晰。
2.基础类库和接口设计合理,尽量建立叮扩展的接口和抽象类。
3.数据库操作使用标准SQL语句,如果一定要使用有差别的SQL语句,则尽量集中在一起,以减少将来维护和移植的难度。
4.采用开放的标准和工具等。
2.2 系统功能要求
博客系统通常提供三类服务:
1.信息服务:文章显示,热点文章推荐,博主风采。
2.查询服务:可以根据文章内容,文章标题,留言标题等进行模糊查询。
3.留言服务:游客或者用户可以对系统进行留言或发表看法意见。
在此基础上我将个人博客网站划分为两个子系统:游客,用户。
下面分析各个子系统的功能需求。
2.2.1 游客
在在具体的功能实现上,可以分为以下几个部分:
1.查看资料信息:
游客不须登录系统就可以实现查看日志,照片以及博客主的资料信息。
2.用户注册:
游客将个人的信息存储到博客网站的数据库中,以成为本博客的正式用户。
3.文章查询:
用户可以检索或浏览博客中的文章。
4.留言:
游客可以匿名发表言论,同时给感兴趣的文章评价。
2.2.2 用户
通过计算机网络将前台与后台的数据库相连,系统用户将从前台得到的信息进行处理,实现文章管理,信息管理,个人相册管理,评论,收藏等子系统。
1.文章管理:
注册用户员对网站中自己的文章进行删除,更新等操作。
2.信息管理:
发布,更改个人信息。
3.个人相册管理:
对博客相册中的图片进行上传,更新,删除操作。
4.评论:
对于他人给自己的不恰当评论予以删除
5.收藏好的日志:
可以对比较好的日志文章进行收藏。
2.3 系统的性能要求
博客网站的特性要求博客网站系统需要具备以下几个主要特性:
1.多样性:博客网站在设计时必须遵循的一个重要原则,就是以用户为系统设计的中心。网络的发展大大降低了信息咨询的成本,用户面临更多的选择,所以,博客网站除了降低成本以外,还必须在外观,功能的多样性上下工夫,才能够得到用户的认可。具体来说,应用系统应能实现用户特定的需求,操作界面友好、方便,功能设置符合用户的习惯和要求。
2.安全性:系统应充分考虑信息、设备、运行和管理的安全性,建立完善的多层次的安全保障体系,保证用户的个人信息等资料的数据安全。
3.可扩展:博客网站的用户从事着各种行业,他们的需求各不相同,系统在设计时应充分考虑到用户需求不断变化的需要,降低系统在扩展新的业务功能时的复杂度。
2.4 系统的性能要求
1.数据录入和处理的准确性和实时性:
数据的输入是否准确是数据处理的前提,错误的输入会导致系统输出的不正确和
不可用,从而使系统的工作失去意义。数据的输入来源是用户的手工输入。手工输入要通过系统界面上的安排系统具有容错性,并且对用户操作进行实时的跟踪和错误提示。
在系统中,数据的输入往往是大量的,因此系统要有一定的处理能力,以保证迅速的处理数据。
2.数据的一致性与完整性:
由于网站的数据是共享的,所以如何保证这些数据的一致性,是网站必须解决的问题。要解决这一问题,要有一定的人员维护数据的一致性,在数据录入处控制数据的去向,并且要求对数据库的数据完整性进行严格的约束。
对于输入的数据,要为其定义完整性规则,如果不能符合完整性约束,网站应该拒绝该数据。
3.数据的共享与独立性:
整个博客网站的数据是共享的。然而,从网站开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样,也能提供系统的强壮性。
3 概要设计
博客网站系统的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的博客网站,以达到个人推荐、展现自我的一个平台,为交流提供综合的网络环境,同时也为个人的宣传,发展,提供了一个平台。
3.1 系统体系结构
基于B/S结构的个人博客网站系统,应由终端(用户主机/浏览器)、WEB服务器、数据服务器构成。个人博客网站的核心是中间的接入服务器和应用服务器部分。个人博客网站的总体结构图如图3.1所示:
图3.1 博客网站总体结构
3.2 主要功能设计
3.2.1 主要功能模块
1.博客注册登录管理模块。
2.博客文章检索查询模块。
3.博客页面显示模块。
4.博客评论管理模块。
5.照片上传显示模块。
系统实现的物理结构如图所示:
图3.2 系统各模块关系图
3.2.2 系统流程图
图3.3 游客流程图
图3.4用户流程图
3.2.3 系统模块介绍
1.博客注册登录管理
本模块实现新用户注册,登录功能。其中,注册新用户时会对用户输入的注册信息进行有效的验证,包括基本数据格式的有效性,以及逻辑有效性,例如:用户名被占用时给出提示。注册成功登录时会对博客输入的信息进行提示,如用户名、密码错误。
2.博客文章查询显示管理
本模块用于帮助网络用户快速定位到自己关注的博客页面及对应的文章信息中。在本模块中提供了最新文章推荐,还提供了按标题等关键字快速查询所需文章信息。
3.发表文章管理
该模块实现了博主发表新文章的功能。博主发表文章时,只有是博主才能发表文章,对此进行了严格的身份验证。
4.发表及显示评论管理
该模块实现了与文章相关的评论管理。游客可以对文章进行发表评论。
5.照片上传管理
游客可以查看照片,只有登录用户才能上传和修改照片。
3.3 数据库设计
一个设计良好的数据库,可以使系统的实现变得非常的简单。同时,也可以使系统的执行速度变得很快。反之,一个设计混乱的数据库,不仅增加了吸引的管理实现过程,同时在系统的执行过程中,使得检索变得很慢,降低效率。所以数据库的设计是一个系统设计很重要的步骤。
根据系统功能设计要求和模块划分,本站的数据库主要有用户信息、文章信息、管理员信息、照片信息、文章类型信息、评论信息、投票信息、朋友圈视图。
数据库的设计通常是以一个已经存在的数据库管理系统为基础的,常用的数据库管理系统有Access、SQL Server、Oracle、My SQL等。根据用户需求和系统分析,本系统采用Oracle数据库管理系统。
1.用户信息表
图3.5用户表
2.日志表
图3.6日志表
3.照片表
图3.7照片表
4.评论表
图3.8评论表
5.收藏表
图3.9收藏表
3.4 信息安全设计
网络的开放性导致网络技术的全面开放,任何团体和个人都可以获得网络资源,因而网络所面临的破坏和攻击将会是多方面的,可以是对软件环境实施攻出,也可以是对硬件环境实施攻击。网络的国际性还意味着网络的攻击将不仅仅来自本地网络用户,它可能来自Internet上的任何一台机器。即,发起攻击的节点可以位于世界上任何地方。因此可以说,网络安全所面临的将是一个国际性全球化的挑战。网络的自由性意味着网络最初对用户的使用并没有提供任何的技术约束,用户可以自由地访问网络,自由地使用和发布各种类型的信息。用户只对自己的行为负责,而没有受到任何的法律限制。如何保护个人的机密信息不受木马和病毒的入侵,己成为信息安全化健康发展所要考虑的重要事情之一。
博客用户个人信息的安全问题是至关重要的,制定切实可行的安全策略和实施有力的防范手段是非常必要的。
4 详细设计
详细设计是整个系统设计中,最重要的一个步骤。下面对系统得主要模块进行详细的介绍。
4.1 首页及主要页面设计
主要页面如下图所示:
图4.1主要页面清单
4.2 功能模块设计
图4.2功能划分列表
4.3 系统实现
本系统主要包括用户登录、用户注册、文章显示、文章收藏、发表评论、相册、统计信息、系统管理(包括文章管理,照片管理,用户信息管理)八大模块。以下是各功能模块的具体实现过程。整个系统的框架如图4.3所示。
图4.3系统框架
4.3.1 博客首页详细功能及部分代码
1.显示访客身份,没有登录就显示tourist身份。
2.显示文章的列表和内容。
3.通过JavaScript实现点击评论和收起评论实现评论板块的显示和收起。
4.到达照片、收藏、博友、博主资料、用户登录和注册账号的主链接。
5.显示电子日历。
6.显示日志、评论、注册和访问的统计信息。
7.显示音乐播放器并且自动播放音乐。
8.日志搜索。
9.友情链接显示。
博客系统的游客首页如下图4.4所示:
图4.4游客首页
1.除了游客具有的功能外,还显示用户管理功能,登录就显示登录后的用户名。
2.显示管理功能菜单即写日志、上传照片、修改资料、退出系统。
3.显示日志管理图标。
4.显示收藏图标。
博客系统的用户首页如下图4.5所示:
图4.5用户首页
首页主要代码如下:
<%@page language="java" contentType="text/html;charset=utf-8"%>
<%
Object username = session.getAttribute("username");
%>
我的博客
function showindex(){
document.forms[0].action="/myblog/index"
document.forms[0].submit();
}
function pl(va){
document.getElementById(va).style.display="";
}
function sq(vc){
document.getElementById(vc).style.display="none";
}
function tijiao(logid){
document.forms[0].action="/myblog/AddReviewServlet?logid="+logid;
document.forms[0].submit();
}
function manage(logid){
document.forms[0].action="/myblog/logAdmin?logid="+logid;
document.forms[0].submit();
}
function favorite(logid){
document.forms[0].action="/myblog/favorite?logid="+logid;
document.forms[0].submit();
}
<%
if (username == null) {
%>
<%
} else {
%>
<%
}
%>
日志总共:
<%
Object lognumber = session.getAttribute("lognumber");
if (lognumber != null) {
out.print(lognumber.toString());
}
%>
篇
评论总共:
<%
Object reviewnumber = session.getAttribute("reviewnumber");
if (reviewnumber != null) {
out.print(reviewnumber.toString());
}
%>
条
总共注册:
<%
Object usernumber = session.getAttribute("usernumber");
if (usernumber != null) {
out.print(usernumber.toString());
}
%>
人
访问总计:
<%
Object clicknumber = session.getAttribute("clicknumber");
if (clicknumber != null) {
out.print(clicknumber.toString());
}
%>
次
创建时间:2010/5/12
cellspacing="0" bgcolor="#87cefa">
<%
if (!username.equals("tourist")) {
%>
<%
} else {
%>
<%
}
%>
<%
Object loglist = session.getAttribute("loglist");
if (loglist != null) {
ArrayList list = (ArrayList) loglist;
Iterator ite = list.iterator();
while (ite.hasNext()) {
Logs log = (Logs) ite.next();
%>
<%
}
}
%>
写日志
上传照片
修改资料
退出系统
日 志 首 页
创建时间:
<%=log.getCreatedate() %>
<%
if (!username.equals("tourist")) {
%>
οnclick="manage('<%=log.getLogid()%>')">
img src="/myblog/images/favorite.gif" alt="点击收藏此文章"
οnclick="favorite('<%=log.getLogid()%>')">
<%
}
%>
日志标题:
<%=log.getLogtitle()%>
日志内容:<%=log.getLogcontent()%>
')">
我要评论
')">
收起评论
4.3.2 上传照片页面功能及部分代码
实现添加照片标题,上传照片,添加照片说明这三部分功能。
图4.6上传照片
主要代码:
<%
Object addphotomsg=request.getAttribute("addphotomsg");
if(addphotomsg!=null){
out.print(addphotomsg.toString());
}
%>
上传照片
照片标题:
上传文件:
照片文字说明:
(内容字数限制在500字以内)
4.4.3 实现与数据库连接的关键代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.sql.DataSource;
public class ConnectionPool {
private static Connection conn = null ;
private static DataSource ds = null ;
public static Connection getConnection() {
try {
Class. forName ("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:twt";
String username = "scott";
String password = "tiger";
conn = DriverManager. getConnection (url, username, password);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn ;
}
}
5 遇到的难点和解决方法
1.需要跨页面传值的时候用request.getSession().setAttribute()。
2.页面跳转不成功,用request.getRequestDispatcher(“”).forward(request,reponse)。
3.防止Sql注入:使用PrepareStatement(1,”x”)。
4.图片刷新不出来,样式引不到:将相对路径改为绝对路径 。
5.用decode函数将数据库中的0、1转换成男、女显示 。
6.多个不同按钮需要转向不同的servlet:可用document.forms[i].action=“需要跳转的页面”。
7.并非所有变量都已关联,预编译sql时rs=pstmt.excuteQuery(sql);sql是多余的,删掉即可。
8.传值发生错误:应将得到的值与构造函数的参数列表相一致 。
9.Jsp页面不能显示服务器传过来的值:
默认为隐藏,删掉即可。
通过不断的学习和向同学、老师请教使我发现了很多不足和错误,正是由于这些问题才使我认真分析,不断改正,从中学到了很多实用的技术,也使我对web开发技术有了更深层次的理解。
6 结束语
博客被中国的“博客”先行者们称为是继E—mail、BBS和IM之后的第四种网络交流方式,是网络时代的自媒体------作为一种全新的互联网信息发布工具和人际沟通工具,博客的优势在于它不拘泥于“一对一”或“一对多”的信息展示,而是开辟出了一个由此及彼(由人际圈的相交而来的广域交流)的“多对多”的舆论时代。与其他信息平台相比,博客传播更具个性化和立体化,且交互性更强。本文针对如何设计一个结构灵活的个人博客系统进行了研究,并做了以下几个方面的工作:
1.分析了现有的一些博客网站。我参考了QQ空间,新浪博客等网站。在参考这些网站建设的基础上,我给出了自己的问题定义。
2.对J2EE技术进行了综述。本文选择J2EE平台来开发Web服务和应用服务,所以深入地了解J2EE的各项核心技术及其应用是十分重要的。
由于时间关系,本系统在实施中有诸多考虑不足的地方。但作为一个极富发展潜力的项目,博客系统是值得继续全面完善的。在下一阶段,将针对以下几个方面进一步开展研究、升级和实践工作:
1.丰富在本次开发中已经完成的功能,争取制作成一个功能完全的博客系统;
2.在技术上进一步更新,希望能将现在最流行的Ajax技术应用于博客注册,图片局部刷新等功能中。
3.在系统各个层次上加强安全性能。
参考文献
[1] 埃史尔,陈昊鹏.Java编程思想(第四版)[M].北京:机械工业出版社.2007
[2] 李钟尉,马文强,陈丹丹等.Java从入门到精通[M].北京:清华大学出版社.2008
[3] 孙卫琴.Java面向对象编程[M].北京:电子工业出版社.2006
[4] 阎宏.Java与模式[M].北京:电子工业出版社.2002
[5] 孙卫琴.Java网络编程精解[M].北京:电子工业出版社.2007
[6] 张孝祥.Java就业培训教程[M].北京:清华大学出版社.2007
[7] 孙卫琴.Tomcat与Java Web开发技术详解(第2版)[M].北京:电子工业出版社.2009
[8] 孙鑫.Servlet Jsp深入详解:基于Tomcat的web开发[M].北京:电子工业出版社.2008
[9] 刘晓华,张健,周慧贞.JSP应用开发详解(第3版) [M].北京:电子工业出版社.2007
[10] 郝安林,王伟平,张明亮.JSP从入门到精通[M].北京:电子工业出版社.2008
[11] 张新曼.精通JSP-Web开发技术与典型应用[M].北京:人民邮电出版社.2007
[12] 耿祥义.JSP实用教程(第2版)[M].北京:清华大学出版社.2007
[13] 张银鹤.JSP完全学习手册[M].北京:清华大学出版社.2008
[14] 唐友国,湛洪波 .JSP网站开发详解[M].北京:电子工业出版社.2008
[15] 张军.JSP网络应用开发例学与实践[M].北京:清华大学出版社.2006
[16] 王国辉,王毅,李钟蔚.JSP程序开发范例宝典[M].北京:人民邮电出版社.2007
[17] 戎伟,苏威.揭秘J2EE项目开发的70个问题[M].北京:人民邮电出版社.2008
[18] 陈刚.java开发利器Eclipse从入门到精通[M].北京:清华大学出版社.2007
[19] 温昱.软件架构设计[M].北京:电子工业出版社.2007
[20] 隽青龙,王华容.JSP+Oracle动态网站开发[M].北京:清华大学出版社.2008
附录
首页显示Servlet层代码:
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import myblog.commons.ClickNumber;
import myblog.dao.InformationCountDao;
import myblog.dao.ShowLogDao;
import myblog.entity.Logs;
public class IndexServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) {
Object username = request.getSession().getAttribute("username");
/**
* 如果未登录,则为游客身份
*/
if(username==null){
username="tourist";
request.getSession().setAttribute("username", username);
}
/**
* 显示日志
*/
ArrayList list = new ArrayList();
ShowLogDao show = new ShowLogDao();
list = show.showLog();
request.getSession().setAttribute("loglist", list);
/**
* 显示统计信息
*/
InformationCountDao infor=new InformationCountDao();
//日志数目
int num1=infor.logCount();
request.getSession().setAttribute("lognumber", num1);
//评论数目
int num2=infor.reviewCount();
request.getSession().setAttribute("reviewnumber", num2);
//注册人数统计
int num3=infor.usersCount();
request.getSession().setAttribute("usernumber", num3);
//点击量统计
int num4=ClickNumber.add();
request.getSession().setAttribute("clicknumber", num4);
try {
request.getRequestDispatcher("index.jsp")
.forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Web.xml配置文件代码:
setEncodingFilter
myblog.filters.SetEncodingFilter
encoding
UTF-8
setEncodingFilter
/*
reg
myblog.servlet.RegServlet
login
myblog.servlet.LoginSevlet
log
myblog.servlet.LogServlet
index
myblog.servlet.IndexServlet
addReview
myblog.servlet.AddReviewServlet
logAdmin
myblog.servlet.LogAdminServlet
userinfor
myblog.servlet.UserInforServlet
updatelog
myblog.servlet.UpdateLogServlet
delLog
myblog.servlet.DelLogServlet
showuserinfor
myblog.servlet.ShowUserInforServlet
saveUserInfor
myblog.servlet.SaveModifyUserInforServlet
addphoto
myblog.servlet.AddPhotoServlet
showphoto
myblog.servlet.ShowPhotoServlet
favorite
myblog.servlet.AddFavoriteLogServlet
showfavorite
myblog.servlet.ShowFavoriteLogServlet
users
myblog.servlet.BlogUsersServlet
users
/users
showfavorite
/showfavorite
favorite
/favorite
showphoto
/showphoto
addphoto
/addphoto
saveUserInfor
/saveUserInfor
showuserinfor
/showuserinfor
updatelog
/updatelog
delLog
/delLog
userinfor
/userinfor
logAdmin
/logAdmin
addReview
/AddReviewServlet
index
/index
log
/log
login
/login
reg
/reg
致 谢
通过这次毕业设计,我对自己大学几年的学习有了一个总结和检验,我积累的知识有了用武之地,而且我的动手能力也大大提高了。在这段时间里,所有的工作都得靠自己努力尝试才能有所进展,而且对于整个开发过程,需要合理的进度安排和很好的逻辑协调能力,这种解决问题的能力锻炼和思考问题的模式都使我受益匪浅,所有这些都构成了我不能忘怀这一段时间之旅的原因。
这里,我衷心感谢老师的悉心指导,还有同学的帮助,感谢他们对我的支持。
我的设计还有许多漏洞和不足之处,我的论文也有需要完善之处,恳请各位老师批评指正。
你可能感兴趣的:(数据库)
在Fedora上安装MySQL
ZaxfSass
mysql adb 数据库
MySQL是一种流行的开源关系型数据库管理系统,被广泛用于各种应用程序和网站。在Fedora操作系统上安装MySQL非常简单,本文将向您展示安装MySQL的步骤和相关源代码。步骤1:更新系统在安装MySQL之前,首先需要更新您的Fedora系统以确保您拥有最新的软件包和安全补丁。打开终端并执行以下命令:sudodnfupdate步骤2:安装MySQL服务器现在,我们可以使用DNF包管理器在Fedo
携程开源的分布式apollo技术,整合springboot集成实现动态刷新配置
2401_84584854
程序员 java 面试 学习
最后这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~你的支持,我的动力;祝各位前程似锦,offer不断!!!本文已被CODING开源项目:【
数据库语句
lrydnh
数据库 android
环境变量path下的目录是系统目录。#include#include#pragmacomment(lib,"libmysql.lib")//链接libmysql.dll动态库的中间桥//MYSQL*conn;//数据库句柄。后面还有网络句柄(用来网络收发数据)boolconnect(){conn=mysql_init(NULL);if(conn==NULL){printf("Error%u:%s\
Django-ORM-select_related
巴啦啦小魔仙变身
Python Django django 数据库 sqlite python
Django-ORM-select_related作用使用场景示例无select_related的查询有select_related的查询如何理解"只发起一次查询,包含所有相关作者信息"1.select_related的工作原理2.具体示例解析3.为什么只发起一次查询数据库中的books量巨大,使用`select_related`导致服务崩掉,如何解决程序层面优化1.优化select_relate
使用Couchbase中的向量搜索进行智能查询
eahba
python
技术背景介绍Couchbase是一种强大的分布式NoSQL数据库,广泛应用于云、移动、AI和边缘计算应用中。其向量搜索功能,作为全文搜索服务的一部分,支持在应用中进行高效的语义查询。这为开发者在实现AI驱动的应用时提供了极大的便利。核心原理解析Couchbase的向量搜索利用向量嵌入技术对文本进行处理,可以实现基于语义相似度的查询。这与传统的关键词匹配有根本的不同,更适合AI应用场景中模糊或语义相
如何利用PubMed作为信息检索器 — 结合LangChain实现高效文献查询
bhawfgrcbtwny
langchain python
如何利用PubMed作为信息检索器—结合LangChain实现高效文献查询引言PubMed是由美国国家生物技术信息中心(NCBI)和国家医学图书馆(NLM)维护的一个涵盖超过3500万篇生物医学文献的数据库。对于研究人员和开发者而言,如何高效地从如此庞大的数据库中提取有用的信息是一项挑战。在本文中,我们将探讨如何使用LangChain库中的PubMedRetriever类,从PubMed查询并返回
使用Vespa进行高级检索与向量数据库管理
scaFHIO
数据库 python
技术背景介绍在现代信息检索领域,为了提供精准且高效的搜索体验,往往需要结合使用向量搜索(ANN)、词法搜索以及结构化数据搜索。Vespa作为一个功能完备的搜索引擎与向量数据库,为我们提供了一站式的解决方案。本文将详细介绍如何使用Vespa进行高级检索,并通过代码示例展示其实际应用。核心原理解析Vespa具备以下核心功能:向量搜索(ANN):基于向量空间的近似最近邻搜索,提高了高维数据检索的效率。词
物联网实时数据存储方案选择
动亦定
MySQL 物联网 数据库 物联网 时序数据库 数据库
存储物联网设备发出的实时数据时,需考虑数据量、速度、类型和访问需求。以下是几种常见的存储方案:1.时序数据库适用场景:适合处理时间序列数据,如传感器数据。优点:高效存储和查询时间序列数据,支持高写入和查询吞吐量。常见选择:InfluxDB、TimescaleDB、Prometheus。2.NoSQL数据库适用场景:适合非结构化或半结构化数据,如JSON、XML。优点:灵活的数据模型,易于扩展,适合
Java直通车系列28【Spring Boot】(数据访问Spring Data JPA)
浪九天
Java直通车 java spring spring boot 开发语言 后端
目录SpringDataJPA概述核心概念1.仓库接口(Repository)2.实体类(Entity)3.方法命名查询4.@Query注解场景示例步骤1:添加依赖步骤2:配置数据库连接步骤3:创建实体类步骤4:创建仓库接口步骤5:创建服务类步骤6:创建控制器类测试示例SpringDataJPA概述SpringDataJPA是Spring提供的一个用于简化JPA(JavaPersistenceAP
Java直通车系列27【Spring Boot】(配置文件使用)
浪九天
Java直通车 java spring boot spring 后端 开发语言
目录配置文件的作用与格式配置文件的类型配置文件的加载顺序场景示例SpringBoot中配置文件的使用非常灵活和重要,主要有.properties和.yml(.yaml)两种格式:配置文件的作用与格式作用:用于配置SpringBoot应用程序的各种属性,如数据库连接信息、服务器端口、日志级别、自定义属性等,实现对应用行为的定制化。.properties格式:以键值对形式存储配置信息,每行一个键值对,
绕过information_schema库的一些方式
夏炎正好眠
penetration 安全
information_schema库的意义:该数据库mysql其实是个信息数据库,保存着mysql服务器所维护的所有其他数据库信息,所以里面包含了数据库名,表名,字段名等,因此,information_schema的重要性就在这三点上了,而如果information_schema库被过滤掉了,就只能通过其他方式来处理了。绕过方式:1、使用盲注猜测信息:可以使用布尔盲注、时间盲注,对数据库信息进行
【用友U8BOM全阶展开SQL】存储过程批量展开BOM结构,由子阶向上算母件的成本。
陈家旺
学习笔记 数据库 sql sqlserver
在百度查询U8BOM结构批量导出时,发现都要收费,于是自己写了个存储过程,顺便分享给需要的朋友。USE[UFDATA_110]--使用你的账套数据库GO/******Object:StoredProcedure[dbo].[BOMJS]ScriptDate:2022-11-0223:28:13******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREAT
mySQL和Hive的区别
iijik55
面试 学习路线 阿里巴巴 hive mysql 大数据 tomcat 面试
SQL和HQL的区别整体1、存储位置:Hive在Hadoop上;Mysql将数据存储在设备或本地系统中;2、数据更新:Hive不支持数据的改写和添加,是在加载的时候就已经确定好了;数据库可以CRUD;3、索引:Hive无索引,每次扫描所有数据,底层是MR,并行计算,适用于大数据量;MySQL有索引,适合在线查询数据;4、执行:Hive底层是MapReduce;MySQL底层是执行引擎;5、可扩展性
基于PHP进程控制与Redis队列的异步任务实践——解决Excel导入接口超时问题
问题背景与解决方案问题场景在实现Excel数据导入功能时,遇到一个典型的生产者-消费者场景:主流程:Excel文件解析→数据校验→数据库事务写入附加流程:将成功数据推送给第三方系统当第三方接口响应缓慢时(实测平均耗时8-12秒),导致整体接口响应时间超出前端等待阈值,造成以下问题:前端显示系统错误(HTTP500)实际业务数据已完整入库用户体验与数据一致性存在割裂解决方案演进同步方案:直接顺序执行
深入解析MySQL页结构:16KB页设计与目录机制实现
后端数据库mysql
一、MySQL存储引擎的基石:页结构探秘1.1页结构的本质与意义MySQLInnoDB存储引擎采用页(Page)作为基础存储单位,每个页固定为16KB(16384字节)。这种设计并非偶然,而是经过多年实践验证的黄金平衡点:足够存储多个行记录,又能有效控制B+树层级深度。页结构的设计直接影响着数据库的存储效率、查询性能和事务特性。1.2页结构的物理布局一个完整的InnoDB页包含以下核心组成部分:c
在Python中运行sql语句
静默追光
sql oracle 数据库
导入pymysql或者是MySQL.connector模快importpymysql#最常用importmysql.connector连接数据库#连接数据库使用pymysql模块db=pymysql.connect(host="192.168.1.110",#数据库主机名user="root",#数据库用户名password="root",#数据库密码database="test",#数据库名称c
PostgreSQL异常:An IO error occurred while sending to the backend
m0_74824002
面试 学习路线 阿里巴巴 postgresql 数据库
在使用PostgreSQL数据库批量写入数据的时候,遇到了一个问题,异常内容如下:Cause:org.postgresql.util.PSQLException:AnI/Oerroroccurredwhilesendingtothebackend.报错内容报错提示1Causedby:org.postgresql.util.PSQLException:AnI/Oerroroccurredwhiles
Redis学习
LDM>W<
苍穹外卖 redis 学习 数据库 java 后端
Redisredis是基于key-valve的方式将热门数据存储在内存,访问性能高的数据库redis服务端启动:redis-serve.exeredis.windows.confredis服务端关闭:ctrl+credis客户端连接本地:redis.cli.exeredis客户端连接其他地方:redis.cli.exe-hhost-p6379-a****(密码)//-h即host-p即port这里
微服务下如何保证事务的一致性?
Java技术攻略
微服务 java 数据库
背景随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护性差、架构扩展性差、部署不灵活、健壮性差等等。而微服务架构是将单个服务拆分成一系列小服务,且这些小服务都拥有独立的进程,彼此独立,很好地解决了传统单体应用的上述问题,但是在微服务架构下如何保证事务的一致性呢?1、事务的介绍1.1事务1.1.1事务的产生数据库中的数据是共享资源,因此数据库系统通常要支
查数据库和表空间大小
隔壁老登
sql代码 数据库
查数据库和表空间大小一。postgresql数据库1.查看schema对应的表空间select*frompg_tables;2.查表空间使用情况SELECTschemaname,sum(pg_total_relation_size(schemaname||'.'||tablename))AStotal_sizeFROMpg_tableswhereschemaname='PROD'groupbysc
MySQL有哪些高可用方案?
java1234_小锋
mysql java 开发语言
大家好,我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助;MySQL有哪些高可用方案?1000道互联网大厂Java工程师精选面试题-Java资源分享网MySQL高可用(HighAvailability,HA)方案主要是通过一系列技术和架构来确保MySQL数据库在出现故障时仍然可以继续提供服务。以下是一些常见的MySQL高可用方案:1.主从复制(Master-Slave
一张表多少记录,会成为大表?如何计算
18你磊哥
mysql 数据库 mysql
首先,“大表”的定义并不是绝对的。不同的数据库系统、不同的硬件配置、不同的查询模式,对“大”的定义可能都不一样。比如,对于MySQL来说,百万级别的记录可能已经算大表,而对于一些分布式数据库,可能处理十亿级别的数据才算挑战。接下来,用户可能想知道如何判断自己的表是否过大,以及如何计算这个阈值。这时候,我需要考虑几个方面:数据量、性能指标、存储引擎的特性、索引情况、查询复杂度等。数据量方面,表的记录
JavaEE 项目常见错误解决方案
一弦一柱
JavaEE 常见错误 中文乱码 JSP 404
JavaEE项目常见错误解决方案数据库连接JavaBean获取不到数据库字段值或出现意料之外的值业务中出现null或""404NOTFOUNDGET请求中文乱码form表单提交中文乱码最近的实训中,练了一个比较基础的项目,JSP+Servlet+JavaBean,完成两张表的CRUD操作,前端使用Bootstrap和JQuery,交互使用AJAX,IDE选用Eclipse,在时间比较仓促的情况下完
定期备份数据库:基于 Shell 脚本的自动化方案
mysql服务器脚本
数据库备份这件事,说实话,我一直没怎么上心。平时服务器跑得好好的,谁会想着备份呢?直到某天真出问题了,才意识到自己平时有多“懒”。我相信很多人跟我一样,觉得这东西看起来麻烦,等到数据库挂了、数据丢失了,才感叹自己怎么就没提前准备好呢?有一次数据库问题搞得我手忙脚乱,最后还好有个朋友给了我个备份文件,才算是有惊无险。经历了这次以后,我决定不能再拖了,必须把备份这事儿自动化起来。所以,我写了一个简单的
在线监控+日志分析方案
徐福记c
运维 运维
1.在线监控系统设计技术选型:Prometheus+Grafana+各ExporterPrometheus:负责定时拉取各服务指标数据并存储。Grafana:可视化仪表盘,支持多数据源(Prometheus、Loki等)。Exporter:SpringBoot应用:通过Micrometer暴露/actuator/prometheus端点。MySQL:部署mysqld_exporter采集数据库性能
技术分享 | MySQL8.0 内部临时表占用磁盘空间问题排查
数据库mysql
本文为墨天轮数据库管理服务团队第43期技术分享,内容原创,如需转载请联系小墨(VX:modb666)并注明来源。概念描述到了mysql8.0版本,SQL运行过程中产生的内部临时表已经有了变化,存放位置由innodb\_temp\_tablespaces\_dir参数控制,默认放在$DATADIR/#innodb\_temp/目录下,由多个.ibt文件构成。并且当数据库连接断开时,.ibt文件的大小
golang中使用mysql事务
彩色代码
Golang编程语言 MySQL数据库 mysql golang 数据库
在Go语言中,可以使用第三方库来处理MySQL事务。在示例中,我们将使用database/sql包与github.com/go-sql-driver/mysql驱动程序来连接和执行MySQL数据库操作。首先,确保你已经安装了相应的依赖库。你可以使用以下命令来安装它们:goget-udatabase/sqlgoget-ugithub.com/go-sql-driver/mysql接下来,我们将演示一
微信小程序云开发的sql语法 where `$and` 运算符怎么用?踩坑总结!
代码简单说
2025开发必备 微信小程序 sql 小程序 where 微信小程序and
微信小程序云开发$and组合查询时间戳转换**最近在小程序云开发里用$and组合查询,结果直接翻车,明明条件写对了,却总是查不出数据,要么就是报错,真是要被折腾疯了,官方文档也没给完整示例,最终折腾了半天,终于找到正确用法,现在分享出来,避免大家踩坑1.$and查询失败的真正原因在云开发数据库查询时,如果你的$and组合条件查不出数据,大概率是因为数据类型不匹配,特别是在时间筛选时,很多人会写成这
Golang实现一个事务型内存数据库
qingwave
Code 数据库 golang redis
内存数据库经我们经常用到,例如Redis,那么如何从零实现一个内存数据库呢,本文旨在介绍如何使用Golang编写一个KV内存数据库MossDB。特性MossDB是一个纯Golang编写、可嵌入的、键值型内存数据库,包含以下特性可持久化,类似RedisAOF(AppendonlyLog)支持事务支持近实时的TTL(TimetoLive),可以实现毫秒级的过期删除前缀搜索Watch接口,可以监听某个键
flink-cdc实时增量同步mysql数据到elasticsearch
大数据技术派
# Flink elasticsearch flink mysql
什么是CDC?CDC是(ChangeDataCapture变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入INSERT、更新UPDATE、删除DELETE等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。1.环境准备mysqlelasticsearchflinkonyarn说明:如果没有安装hadoop,那么可以不用yarn,直
Java实现的简单双向Map,支持重复Value
superlxw1234
java 双向map
关键字:Java双向Map、DualHashBidiMap
有个需求,需要根据即时修改Map结构中的Value值,比如,将Map中所有value=V1的记录改成value=V2,key保持不变。
数据量比较大,遍历Map性能太差,这就需要根据Value先找到Key,然后去修改。
即:既要根据Key找Value,又要根据Value
PL/SQL触发器基础及例子
百合不是茶
oracle数据库 触发器 PL/SQL编程
触发器的简介;
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,
一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行,
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发
[时空与探索]穿越时空的一些问题
comsci
问题
我们还没有进行过任何数学形式上的证明,仅仅是一个猜想.....
这个猜想就是; 任何有质量的物体(哪怕只有一微克)都不可能穿越时空,该物体强行穿越时空的时候,物体的质量会与时空粒子产生反应,物体会变成暗物质,也就是说,任何物体穿越时空会变成暗物质..(暗物质就我的理
easy ui datagrid上移下移一行
商人shang
js 上移下移 easyui datagrid
/**
* 向上移动一行
*
* @param dg
* @param row
*/
function moveupRow(dg, row) {
var datagrid = $(dg);
var index = datagrid.datagrid("getRowIndex", row);
if (isFirstRow(dg, row)) {
Java反射
oloz
反射
本人菜鸟,今天恰好有时间,写写博客,总结复习一下java反射方面的知识,欢迎大家探讨交流学习指教
首先看看java中的Class
package demo;
public class ClassTest {
/*先了解java中的Class*/
public static void main(String[] args) {
//任何一个类都
springMVC 使用JSR-303 Validation验证
杨白白
spring mvc
JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。
登录需要验证类
public class Login {
@NotEmpty
log4j
香水浓
log4j
log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, HTML, DATABASE
#log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, ROLLINGFILE, HTML
#console
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4
使用ajax和history.pushState无刷新改变页面URL
agevs
jquery 框架 Ajax html5 chrome
表现
如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。
是什么有这么强大的功能呢?
HTML5里引用了新的API,history.pushState和history.replaceState,就是通过
centos中文乱码
AILIKES
centos OS ssh
一、CentOS系统访问 g.cn ,发现中文乱码。
于是用以前的方式:yum -y install fonts-chinese
CentOS系统安装后,还是不能显示中文字体。我使用 gedit 编辑源码,其中文注释也为乱码。
后来,终于找到以下方法可以解决,需要两个中文支持的包:
fonts-chinese-3.02-12.
触发器
baalwolf
触发器
触发器(trigger):监视某种情况,并触发某种操作。
触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
语法:
create trigger triggerName
after/before
JS正则表达式的i m g
bijian1013
JavaScript 正则表达式
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。 i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。 m:表示
HTML5模式和Hashbang模式
bijian1013
JavaScript AngularJS Hashbang模式 HTML5模式
我们可以用$locationProvider来配置$location服务(可以采用注入的方式,就像AngularJS中其他所有东西一样)。这里provider的两个参数很有意思,介绍如下。
html5Mode
一个布尔值,标识$location服务是否运行在HTML5模式下。
ha
[Maven学习笔记六]Maven生命周期
bit1129
maven
从mvn test的输出开始说起
当我们在user-core中执行mvn test时,执行的输出如下:
/software/devsoftware/jdk1.7.0_55/bin/java -Dmaven.home=/software/devsoftware/apache-maven-3.2.1 -Dclassworlds.conf=/software/devs
【Hadoop七】基于Yarn的Hadoop Map Reduce容错
bit1129
hadoop
运行于Yarn的Map Reduce作业,可能发生失败的点包括
Task Failure
Application Master Failure
Node Manager Failure
Resource Manager Failure
1. Task Failure
任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被A
记一次数据推送的异常解决端口解决
ronin47
记一次数据推送的异常解决
需求:从db获取数据然后推送到B
程序开发完成,上jboss,刚开始报了很多错,逐一解决,可最后显示连接不到数据库。机房的同事说可以ping 通。
自已画了个图,逐一排除,把linux 防火墙 和 setenforce 设置最低。
service iptables stop
巧用视错觉-UI更有趣
brotherlamp
UI ui视频 ui教程 ui自学 ui资料
我们每个人在生活中都曾感受过视错觉(optical illusion)的魅力。
视错觉现象是双眼跟我们开的一个玩笑,而我们往往还心甘情愿地接受我们看到的假象。其实不止如此,视觉错现象的背后还有一个重要的科学原理——格式塔原理。
格式塔原理解释了人们如何以视觉方式感觉物体,以及图像的结构,视角,大小等要素是如何影响我们的视觉的。
在下面这篇文章中,我们首先会简单介绍一下格式塔原理中的基本概念,
线段树-poj1177-N个矩形求边长(离散化+扫描线)
bylijinnan
数据结构 算法 线段树
package com.ljn.base;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177
HTTP协议详解
chicony
http协议
引言
Scala设计模式
chenchao051
设计模式 scala
Scala设计模式
我的话: 在国外网站上看到一篇文章,里面详细描述了很多设计模式,并且用Java及Scala两种语言描述,清晰的让我们看到各种常规的设计模式,在Scala中是如何在语言特性层面直接支持的。基于文章很nice,我利用今天的空闲时间将其翻译,希望大家能一起学习,讨论。翻译
安装mysql
daizj
mysql 安装
安装mysql
(1)删除linux上已经安装的mysql相关库信息。rpm -e xxxxxxx --nodeps (强制删除)
执行命令rpm -qa |grep mysql 检查是否删除干净
(2)执行命令 rpm -i MySQL-server-5.5.31-2.el
HTTP状态码大全
dcj3sjt126com
http状态码
完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request
asihttprequest上传图片
dcj3sjt126com
ASIHTTPRequest
NSURL *url =@"yourURL";
ASIFormDataRequest*currentRequest =[ASIFormDataRequest requestWithURL:url];
[currentRequest setPostFormat:ASIMultipartFormDataPostFormat];[currentRequest se
C语言中,关键字static的作用
e200702084
C++ c C#
在C语言中,关键字static有三个明显的作用:
1)在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。
一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访
win7/8使用curl
geeksun
win7
1. WIN7/8下要使用curl,需要下载curl-7.20.0-win64-ssl-sspi.zip和Win64OpenSSL_Light-1_0_2d.exe。 下载地址:
http://curl.haxx.se/download.html 请选择不带SSL的版本,否则还需要安装SSL的支持包 2. 可以给Windows增加c
Creating a Shared Repository; Users Sharing The Repository
hongtoushizi
git
转载自:
http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/ Commands discussed in this section:
git init –bare
git clone
git remote
git pull
git p
Java实现字符串反转的8种或9种方法
Josh_Persistence
异或反转 递归反转 二分交换反转 java字符串反转 栈反转
注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客:
http://josh-persistence.iteye.com/blog/2205768
/**
*
*/
package com.wsheng.aggregator.algorithm.string;
import java.util.Stack;
/**
代码实现任意容量倒水问题
home198979
PHP 算法 倒水
形象化设计模式实战 HELLO!架构 redis命令源码解析
倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C
Druid datasource
zhb8015
druid
推荐大家使用数据库连接池 DruidDataSource. http://code.alibabatech.com/wiki/display/Druid/DruidDataSource DruidDataSource经过阿里巴巴数百个应用一年多生产环境运行验证,稳定可靠。 它最重要的特点是:监控、扩展和性能。 下载和Maven配置看这里: http
两种启动监听器ApplicationListener和ServletContextListener
spjich
java spring 框架
引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器
ServletContextListener
特点: 依赖于sevlet容器,需要配置web.xml
使用方法:
public class StartListener implements
JavaScript Rounding Methods of the Math object
何不笑
JavaScript Math
The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(), Math.floor(), and Math.round() — handle rounding in differen