摘要: 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
致 谢
通过这次毕业设计,我对自己大学几年的学习有了一个总结和检验,我积累的知识有了用武之地,而且我的动手能力也大大提高了。在这段时间里,所有的工作都得靠自己努力尝试才能有所进展,而且对于整个开发过程,需要合理的进度安排和很好的逻辑协调能力,这种解决问题的能力锻炼和思考问题的模式都使我受益匪浅,所有这些都构成了我不能忘怀这一段时间之旅的原因。
这里,我衷心感谢老师的悉心指导,还有同学的帮助,感谢他们对我的支持。
我的设计还有许多漏洞和不足之处,我的论文也有需要完善之处,恳请各位老师批评指正。
你可能感兴趣的:(数据库)
Google earth studio 简介
陟彼高冈yu
旅游
GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G
关于提高复杂业务逻辑代码可读性的思考
编程经验分享
开发经验 java 数据库 开发语言
目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一
SQL Server_查询某一数据库中的所有表的内容
qq_42772833
SQL Server 数据库 sqlserver
1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM
深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具
nseejrukjhad
数据库 python
深入理解MultiQueryRetriever:提升向量数据库检索效果的强大工具引言在人工智能和自然语言处理领域,高效准确的信息检索一直是一个关键挑战。传统的基于距离的向量数据库检索方法虽然广泛应用,但仍存在一些局限性。本文将介绍一种创新的解决方案:MultiQueryRetriever,它通过自动生成多个查询视角来增强检索效果,提高结果的相关性和多样性。MultiQueryRetriever的工
MongoDB Oplog 窗口
喝醉酒的小白
MongoDB 运维
在MongoDB中,oplog(操作日志)是一个特殊的日志系统,用于记录对数据库的所有写操作。oplog允许副本集成员(通常是从节点)应用主节点上已经执行的操作,从而保持数据的一致性。它是MongoDB副本集实现数据复制的基础。MongoDBOplog窗口oplog窗口是指在MongoDB副本集中,从节点可以用来同步数据的时间范围。这个窗口通常由以下因素决定:Oplog大小:oplog的大小是有限
python os 环境变量
CV矿工
python 开发语言 numpy
环境变量:环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。os.environ是一个环境变量的字典。环境变量的相关操作importos"""设置/修改环境变量:os.environ[‘环境变量名称’]=‘环境变量值’#其中key和value均为string类
【PG】常见数据库、表属性设置
江无羡
数据库
PG的常见属性配置方法数据库复制、备份相关表的复制标识单表操作批量表操作链接数据库复制、备份相关表的复制标识单表操作通过ALTER语句单独更改一张表的复制标识。ALTERTABLE[tablename]REPLICAIDENTITYFULL;批量表操作通过代码块的方式,对某个schema中的所有表一起更新其复制标识。SELECTtablename,CASErelreplidentWHEN'd'TH
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
insert into select 主键自增_mybatis拦截器实现主键自动生成
weixin_39521651
insert into select 主键自增 mybatis delete返回值 mybatis insert返回主键 mybatis insert返回对象 mybatis plus insert返回主键 mybatis plus 插入生成id
前言前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。他的回答是他们项目目前的id都是采用雪花算法来生成,因此为了项目稳定性,不会切换id的生成方式。朋友问我有没有什么实现思路,他们公司的orm框架是mybatis,我就建议他说,不然让你老大把mybatis切换成mybatis-plus。mybat
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
秋刀prince
mysql mysql 数据库
提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据
Java爬虫框架(一)--架构设计
狼图腾-狼之传说
java 框架 java 任务 html解析器 存储 电子商务
一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast
MongoDB知识概括
GeorgeLin98
持久层 mongodb
MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数
Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net
佛一脚
error react mongodb 数据库
背景每天都能遇到奇怪的问题,做个记录,以便有缘人能得到帮助!换了一台电脑开发nextjs程序。需要连接mongodb数据,对数据进行增删改查。上一台电脑好好的程序,新电脑死活连不上mongodb数据库。同一套代码,没任何修改,搞得我怀疑人生了,打开浏览器进入mongodb官网毫无问题,也能进入线上系统查看数据,网络应该是没问题。于是我尝试了一下手机热点,这次代码能正常跑起来,连接数据库了!!!是不
入门MySQL——查询语法练习
K_un
前言:前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。1.员工示例数据库导入官方文档员工示例数据库介绍及下载链接:https://dev.mysql.com/doc/employee/en/employees-installation.h
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
ubuntu安装wordpress
lissettecarlr
1安装nginx网上安装方式很多,这就就直接用apt-get了apt-getinstallnginx不用启动啥,然后直接在浏览器里面输入IP:80就能看到nginx的主页了。如果修改了一些配置可以使用下列命令重启一下systemctlrestartnginx.service2安装mysql输入安装前也可以更新一下软件源,在安装过程中将会让你输入数据库的密码。sudoapt-getinstallmy
深入浅出 -- 系统架构之负载均衡Nginx的性能优化
xiaoli8748_软件开发
系统架构 系统架构 负载均衡 nginx
一、Nginx性能优化到这里文章的篇幅较长了,最后再来聊一下关于Nginx的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴趣的可以参考之前《JVM性能调优》中的调优思想。优化一:打开长连接配置通常Nginx作为代理服务,负责分发客户端的请求,那么建议开启H
【RabbitMQ 项目】服务端:数据管理模块之绑定管理
月夜星辉雪
rabbitmq 分布式
文章目录一.编写思路二.代码实践一.编写思路定义绑定信息类交换机名称队列名称绑定关键字:交换机的路由交换算法中会用到没有是否持久化的标志,因为绑定是否持久化取决于交换机和队列是否持久化,只有它们都持久化时绑定才需要持久化。绑定就好像一根绳子,两端连接着交换机和队列,当一方不存在,它就没有存在的必要了定义绑定持久化类构造函数:如果数据库文件不存在则创建,打开数据库,创建binding_table插入
计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)
java毕设程序源码王哥
php 课程设计 vue.js
该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发
3.增删改查--连接查询
问女何所忆
关系型数据库的一个特点就是,多张表之间存在关系,以致于我们可以连接多张表进行查询操作,所以连接查询会是关系型数据库中最常见的操作。连接查询主要分为三种,交叉连接、内连接和外连接,我们一个个说。1、交叉连接交叉连接其实连接查询的第一个阶段,它简单表现为两张表的笛卡尔积形式,具体例子:如果你没学过数学中的笛卡尔积概念,你可以这样简单的理解这里的交叉连接:两张表的交叉连接就是一个连接合并的过程,T1表中
docker from指令的含义_多个FROM-含义
weixin_39722188
docker from指令的含义
小编典典什么是基本图片?一组文件,加上EXPOSE端口ENTRYPOINT和CMD。您可以添加文件并基于该基础图像构建新图像,Dockerfile并以FROM指令开头:后面提到的图像FROM是新图像的“基础图像”。这是否意味着如果我neo4j/neo4j在FROM指令中声明,则在运行映像时,neo数据库将自动运行并且可在端口7474的容器中使用?仅当您不覆盖CMD和时ENTRYPOINT。但是图像
Redis:缓存击穿
我的程序快快跑啊
缓存 redis java
缓存击穿(热点key):部分key(被高并发访问且缓存重建业务复杂的)失效,无数请求会直接到数据库,造成巨大压力1.互斥锁:可以保证强一致性线程一:未命中之后,获取互斥锁,再查询数据库重建缓存,写入缓存,释放锁线程二:查询未命中,未获得锁(已由线程一获得),等待一会,缓存命中互斥锁实现方式:redis中setnxkeyvalue:改变对应key的value,仅当value不存在时执行,以此来实现互
mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
知识分享小能手
大数据 数据库 MySQL mysql 学习 oracle 数据库 开发语言 adb 大数据
1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能的语法、语句以及案例。1.1、TOP子句(SQLServer和Access)1.1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
†徐先森®
Oracle数据库 Web相关 错误集
createtablestudents(idintunsignedprimarykeyauto_increment,namevarchar(50)notnull,ageintunsigned,highdecimal(3,2),genderenum('男','女','中性','保密','妖')default'保密',cls_idintunsigned);在对数据库插入如上带有中文带有默认值的字段的时
Redis 有哪些危险命令?如何防范?
花小疯
redis 缓存 数据库 危险命令 大数据
Redis有哪些危险命令?Redis的危险命令主要有以下几个:1.keys客户端可查询出所有存在的键。2.flushdb删除Redis中当前所在数据库中的所有记录,并且此命令从不会执行失败。3.flushall删除Redis中所有数据库中的所有记录,不止是当前所在数据库,并且此命令从不会执行失败。4.config客户端可修改Redis配置。怎么禁用和重命名危险命令?看下redis.conf默认配置
【Golang】 Golang 的 GORM 库中的 Rows 函数
不爱洗脚的小滕
golang 开发语言 后端
文章目录前言一、Rows函数解释二、代码实现三、总结前言在使用Go语言进行数据库操作时,GORM(GoObject-RelationalMapping)库是一个常用的工具。它提供了一种简洁和强大的方式来处理数据库操作。本文将介绍GORM库中的Rows函数,这是一个用于执行原生SQL查询并返回结果的函数。一、Rows函数解释在GORM库中,Rows函数用于执行原生SQL查询并返回*sql.Rows结
接口测试如何设计测试用例
李蕴Ronnie
接口测试用例设计方式针对每个必填参数,都设计一条参数为空的测试用例必填参数不存在传的参数值在数据库中不存在添加数据接口,传入已有的数据重复添加编辑数据接口,各个字段分别编辑,合并编辑参数数据类型限制,针对每个参数设计一条参数值类型不符合的逆向用例参数自身取值范围,针对所有参数,设计一条每个参数值在取值范围内最大值的正向测试用例是否满足前提条件(token、headers),几个前提条件几条用例针对
Hadoop架构
henan程序媛
hadoop 大数据 分布式
一、案列分析1.1案例概述现在已经进入了大数据(BigData)时代,数以万计用户的互联网服务时时刻刻都在产生大量的交互,要处理的数据量实在是太大了,以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势。1.2案列前置知识点1.什么是大数据大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据集合,
非关系型数据库
天秤-white
nosql
一、为什么要用Nosql1.单机MySQL的时代。一个基本的网站访问量一般不会太大,单个数据库完全足够。那时候更多使用的静态网页html,服务器根本没有太大压力。这时候网站的瓶颈是什么?-数据量如果太大,一个机器放不下。-数据量太大需要建立数据的索引(B+Tree),一个服务器内存放不下。-访问量读写混合,一个服务器承受不了。2.memcached缓存+MySQL+垂直拆分(读写分离)。网站80%
六、全局锁和表锁:给表加个字段怎么有这么多阻碍
nieniemin
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。6.1全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于
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