JSP企业网站建设附录 A
Understanding object/relational persistence
The approach to managing persistent data has been a key design decision in every software project we’ve worked on. Given that persistent data isn’t a new or unusual requirement for Java applications, you’d expect to be able to make a simple choice among similar, well-established persistence solutions. Think of web application frameworks (Jakarta Struts versus WebWork), GUI component frameworks (Swing versus SWT), or template engines (JSP versus Velocity). Each of the competing solutions has advantages and disadvantages, but they at least share the same scope and overall approach. Unfortunately, this isn’t yet the case with persistence technologies,where we see some wildly differing solutions to the same problem.
For several years, persistence has been a hot topic of debate in the Java community.Many developers don’t even agree on the scope of the problem. Is “persistence” a problem that is already solved by relational technology and extensions such as stored procedures, or is it a more pervasive problem that must be addressed by special Java component models such as EJB entity beans? Should we hand-code even the most primitive CRUD (create, read, update, delete) operations in SQL and JDBC, or should this work be automated? How do we achieve portability if every database management system has its own SQL dialect? Should we abandon SQL completely and adopt a new database technology, such as object database systems? Debate continues, but recently a solution called object/relational mapping (ORM) has met with increasing acceptance.
Hibernate is an open source ORM implementation.Hibernate is an ambitious project that aims to be a complete solution to the problem of managing persistent data in Java. It mediates the application’s interaction with a relational database, leaving the developer free to concentrate on the business problem at hand. Hibernate is an non-intrusive solution. By this we mean you aren’t required to follow many Hibernate-specific rules and design patterns when writing your business logic and persistent classes; thus, Hibernate integrates smoothly with most new and existing applications and doesn’t require disruptive changes to the rest of the application.
This article is about Hibernate. We’ll cover basic and advanced features and describe some recommended ways to develop new applications using Hibernate.Often, these recommendations won’t be specific to Hibernate—sometimes they will be our ideas about the best ways to do things when working with persistent data, explained in the context of Hibernate. Before we can get started with Hibernate,however, you need to understand the core problems of object persistence and object/relational mapping. This chapter explains why tools like Hibernate are needed.
First, we define persistent data management in the context of object-oriented applications and discuss the relationship of SQL, JDBC, and Java, the underlying technologies and standards that Hibernate is built on. We then discuss the socalled object/relational paradigm mismatch and the generic problems we encounter in object-oriented software development with relational databases. As this list of problems grows, it becomes apparent that we need tools and patterns to minimize the
time we have to spend on the persistence-related code of our applications. After we look at alternative tools and persistence mechanisms, you’ll see that ORM is the best available solution for many scenarios. Our discussion of the advantages and drawbacks of ORM gives you the full background to make the best decision when picking a persistence solution for your own project.
What is persistence?
Almost all applications require persistent data. Persistence is one of the fundamental concepts in application development. If an information system didn’t preserve data entered by users when the host machine was powered off, the system would be of little practical use. When we talk about persistence in Java, we’re normally talking about storing data in a relational database using SQL. We start by taking a brief look at the technology and how we use it with Java. Armed with that information, we then continue our discussion of persistence and how it’s implemented in object-oriented applications.
Relational databases
You, like most other developers, have probably worked with a relational database.In fact, most of us use a relational database every day. Relational technology is a known quantity. This alone is sufficient reason for many organizations to choose it. But to say only this is to pay less respect than is due. Relational databases are so entrenched not by accident but because they’re an incredibly flexible and robust approach to data management.
A relational database management system isn’t specific to Java, and a relational database isn’t specific to a particular application. Relational technology provides a way of sharing data among different applications or among different technologies that form part of the same application (the transactional engine and the reporting engine, for example). Relational technology is a common denominator of many disparate systems and technology platforms. Hence, the relational data model is often the common enterprise-wide representation of business entities. Relational database management systems have SQL-based application programming interfaces; hence we call today’s relational database products SQL database management systems or, when we’re talking about particular systems, SQL databases.
Understanding SQL
To use Hibernate effectively, a solid understanding of the relational model and SQL is a prerequisite. You’ll need to use your knowledge of SQL to tune the performance of your Hibernate application. Hibernate will automate many repetitive coding tasks, but your knowledge of persistence technology must extend beyond Hibernate itself if you want take advantage of the full power of modern SQL databases.Remember that the underlying goal is robust, efficient management of persistent data.Let’s review some of the SQL terms used in this book. You use SQL as a data definition language (DDL) to create a database schema with CREATE and ALTER statements. After creating tables (and indexes, sequences, and so on), you use SQL as a data manipulation language (DML). With DML, you execute SQL operations that manipulate and retrieve data. The manipulation operations include insertion, update, and deletion. You retrieve data by executing queries with restriction, projection, and join operations (including the Cartesian product). For efficient reporting, you use SQL to group, order, and aggregate data in arbitrary ways. You can even nest SQL statements inside each other; this technique is called subselecting. You have probably used SQL for many years and are familiar with the basic operations and statements written in this language. Still, we know from our own experience that SQL is sometimes hard to remember and that some terms vary in usage. To understand this book, we have to use the same terms and concepts; so, we advise you to read appendix A if any of the terms we’ve mentioned are new or unclear.SQL knowledge is mandatory for sound Java database application development.If you need more material, get a copy of the excellent book SQL Tuning by Dan Tow
Also read An Introduction to Database Systems [Date 2004] for the theory, concepts, and ideals of (relational) database systems. Although the relational database is one part of ORM, the other part, of course, consists of the objects in your Java application that need to be persisted to the database using SQL.
Using SQL in Java
When you work with an SQL database in a Java application, the Java code issues SQL statements to the database via the Java DataBase Connectivity (JDBC) API. The SQL itself might have been written by hand and embedded in the Java code, or it might have been generated on the fly by Java code. You use the JDBC API to bind arguments to query parameters, initiate execution of the query, scroll through the query result table, retrieve values from the result set, and so on. These are lowlevel data access tasks; as application developers, we’re more interested in the business problem that requires this data access. It isn’t clear that we should be concerning ourselves with such tedious, mechanical details.What we’d really like to be able to do is write code that saves and retrieves complex objects—the instances of our classes—to and from the database, relieving us of this low-level drudgery.Since the data access tasks are often so tedious, we have to ask: Are the relational data model and (especially) SQL the right choices for persistence in objectoriented applications? We answer this question immediately: Yes! There are many reasons why SQL databases dominate the computing industry. Relational database management systems are the only proven data management technology and are almost always a requirement in any Java project.However, for the last 15 years, developers have spoken of a paradigm mismatch.This mismatch explains why so much effort is expended on persistence-related concerns in every enterprise project. The paradigms referred to are object modeling and relational modeling, or perhaps object-oriented programming and SQL. Let’s begin our exploration of the mismatch problem by asking what persistence means in the context of object-oriented application development. First we’ll widen the simplistic definition of persistence stated at the beginning of this section to a broader, more mature understanding of what is involved in maintaining and using persistent data.
Persistence in object-oriented applications
In an object-oriented application, persistence allows an object to outlive the process that created it. The state of the object may be stored to disk and an object with the same state re-created at some point in the future.This application isn’t limited to single objects—entire graphs of interconnected objects may be made persistent and later re-created in a new process. Most objects aren’t persistent; a transient object has a limited lifetime that is bounded by the life of the process that instantiated it. Almost all Java applications contain a mix of persistent and transient objects; hence we need a subsystem that manages our persistent data.Modern relational databases provide a structured representation of persistent data, enabling sorting, searching, and aggregation of data. Database management systems are responsible for managing concurrency and data integrity; they’re
responsible for sharing data between multiple users and multiple applications. A database management system also provides data-level security. When we discuss persistence in this book, we’re thinking of all these things:
■ Storage, organization, and retrieval of structured data
■ Concurrency and data integrity
■ Data sharing
In particular, we’re thinking of these problems in the context of an object-oriented application that uses a domain model.An application with a domain model doesn’t work directly with the tabular representation of the business entities; the application has its own, object-oriented model of the business entities. If the database has ITEM and BID tables, the Java application defines Item and Bid classes.Then, instead of directly working with the rows and columns of an SQL result set, the business logic interacts with this object-oriented domain model and its runtime realization as a graph of interconnected objects. The business logic is never executed in the database (as an SQL stored procedure), it’s implemented in Java. This allows business logic to make use of sophisticated object-oriented concepts such as inheritance and polymorphism. For example, we could use wellknown design patterns such as Strategy, Mediator, and Composite [GOF 1995], all of which depend on polymorphic method calls. Now a caveat: Not all Java applications are designed this way, nor should they be. JDBC RowSet (Sun JCP, JSR 114) makes CRUD operations even easier. Working with a tabular , the domain model helps to improve code reuse and maintainability significantly. We focus on applications with a domain model in this book, since Hibernate and ORM in general are most relevant to this kind of application. If we consider SQL and relational databases again, we finally observe the mismatch between the two paradigms. SQL operations such as projection and join always result in a tabular representation of the resulting data. This is quite different than the graph of interconnected objects used to execute the business logic in a Java application! These are fundamentally different models, not just different ways of visualizing the same model. With this realization, we can begin to see the problems—some well understood and some less well understood—that must be solved by an application that combines both data representations: an object-oriented domain model and a persistent
relational model. Let’s take a closer look.
JSP企业网站建设
理解对象-关系持续性
我们工作的每个软件项目工程中,管理持续性数据的方法已经成为一项关键的设计决定。对于Java应用,持续性数据并不是一个新的或不寻常的需求,你也许曾经期望能够在许多相似的,已被很好构建的持续性解决方案中简单地进行选择。考虑一下Web应用框架(Jakarta Struts 对 WebWork),GUI组件框架(Swing 对 SWT),或模版工具(JSP 对 Velocity)。每一种相互竞争的解决方案都有其优缺点,但它们至少都共享了相同的范围与总体的方法。不幸的是,这还不是持续性技术的情形,对持续性技术相同的问题有许多不同的混乱的解决方案。
在过去的几年里,持续性已经成为Java社区里一个争论的热点话题。对这个问题的范围许多开发者的意见甚至还不一致。持续性还是一个问题吗?它早已被关系技术与其扩展例如存储过程解决了。或者它是一个更一般的问题,必须使用特殊的Java组件模型例如EJB实体Bean来处理?甚至SQL和JDBC中最基本的CRUD(create, read, update, delete)操作也需要进行手工编码,还是让这些工作自动化?如果每一种数据库管理系统都有它自己的方言,我们如何达到可移植性?我们应该完全放弃SQL并采用一种新的数据库技术,例如面向对象数据库系统吗?争论仍在继续,但是最近一种称作对象-关系映射(ORM)的解决方案逐渐地被接受。Hibernate就是这样一种开源的ORM实现。
Hibernate是一个雄心勃勃的项目,它的目标是成为Java中管理持续性数据问题的一种完整的解决方案。它协调应用与关系数据库的交互,让开发者解放出来专注于手中的业务问题。Hibernate是一种非强迫性的解决方案。我们的意思是指在写业务逻辑与持续性类时,你不会被要求遵循许多Hibernate特定的规则和设计模式。这样,Hibernate就可以与大多数新的和现有的应用平稳地集成,而不需要对应用的其余部分作破坏性的改动。
本篇文章是关于Hibernate的。我们包含了基本与高级的特征,并且描述了许多使用Hibernate开发新应用时的推荐方式。通常这些推荐并不特定于Hibernate——有时它们可能是我们关于使用持续性数据工作时处理事情的最佳方式的一些想法,只不过在Hibernate的环境中进行了介绍。然而,在我们可以开始使用Hibernate之前,你需要理解对象持续性和对象-关系映射的核心问题。本章解释了为什么像Hibernate这样的工具是必需的。
首先,我们定义了在面向对象的应用环境中持续性数据的管理,并且讨论了SQL,JDBC和Java的关系,Hibernate就是在这些基础的技术与标准之上构建的。然后我们讨论了所谓的对象-关系范例不匹配的问题和使用关系数据库进行面向对象的软件开发中所遇到的一些一般性的问题。随着这个问题列表的增长,我们需要一些工具与模式来最小化我们用在与持续性有关的代码上的时间就变得很明显了。在我们查看了可选的工具和持续性机制后,你会发现ORM在许多情况下可能是最好的解决方案。我们关于ORM的优缺点的讨论给了你一个完整的背景,在你为自己的项目选择持续性解决方案时可以作出最好的决定。
什么是持续性?
几乎所有的应用都需要持续性数据。持续性在应用开发中是一个基本的概念。如果当主机停电时一个信息系统没有保存用户输入的数据,这样的系统几乎没有实际的用途。当我们讨论Java中的持续性时,我们通常是指使用SQL存储在关系数据库中的数据。我们从简单地查看一下这项技术和我们如何在Java中使用它开始。具有了这些知识之后,我们继续关于持续性的讨论以及如何在面向对象的应用中实现它。
关系数据库
你,像许多其他的开发者,很可能在使用一个关系数据库进行工作。实际上,我们中的大多数每天都在使用关系数据库。关系技术是一个已知数。仅此一点就是许多组织选择它的一个充分的理由。但仅仅这样说就有点欠考虑了。关系数据库如此不易改变不是因为偶然的原因而是因为它们那令人难以置信的灵活与健壮的数据管理方法。
关系数据库管理系统既不特定于Java,也不特定于特殊的应用。关系技术提供了一种在不同的应用或者相同应用的不同技术(例如事务工具与报表工具)之间共享数据的方式。关系技术是多种不同的系统与技术平台之间的一个共同特征。因此,关系数据模型通常是业务实体共同的企业级表示。关系数据库管理系统具有基于SQL的应用编程接口,因此我们称今天的关系数据库产品为SQL数据库管理系统,或者当我们讨论特定系统时,称之为SQL数据库。
理解SQL
为了有效地使用Hibernate,对关系模型和SQL扎实的理解是前提条件。你需要用你的SQL知识来调节你的Hibernate应用的性能。Hibernate会自动化许多重复的编码任务,如果你想利用现代SQL数据库的全部能力,你的持续性技术的知识必须扩充至超过Hibernate本身。记住基本目标是健壮地有效地管理持续性数据。
让我们回顾一些本书中用到的SQL术语。你使用SQL作为数据定义语言(DDL)通过CREATE与ALTER命令来创建数据库模式。创建了表(索引,序列等等)之后,你又将SQL作为数据处理语言(DML)来使用。使用DML,你执行SQL操作来处理与取出数据。处理操作包括插入,更新和删除。你使用约束,投射,和连接操作(包括笛卡尔积)执行查询来取出数据。为了有效地生成报表,你以任意的方式使用SQL来分组,排序和合计数据。你甚至可以相互嵌套SQL命令,这项技术被称作子查询。你也许已经使用了多年的SQL并且非常熟悉用它编写的基本操作和命令。尽管如此,我们的经验还是告诉我们SQL有时难于记忆并且有些术语有不同的用法。为了理解本书,我们不得不使用相同的术语与概念;因此,如果我们提到的任何术语是新出
现的或者是不清楚的。 为了进行健全的Java数据库应用开发,SQL知识是强制的。如果你需要更多的资料,找一本Dan Tow的优秀著作《SQL Tuning》。同时读一下《An Introduction to Database Systems》,学习一些(关系)数据库系统的理论,概念和思想。关系数据库是ORM的一部分,当然另一部分由你的Java应用中的对象构成,它们需要使用SQL被持续化到数据库中。
在Java中使用SQL
当你在Java应用中使用SQL工作时,Java代码通过Java数据库连接(JDBC)执行SQL命令来操作数据库。SQL可能被手工编码并嵌入到Java代码中,或者可能被匆忙地通过Java代码生成。你使用JDBC API将变量绑定到查询参数上,开始执行查询,在查询结果表上滚动,从结果集中取出值,等等。这些都是底层的数据访问任务,作为应用开发者,我们对需要这些数据访问的业务问题更加感兴趣。需要我们自己来关心这些单调的机械的细节,好像并不是确定无疑的。
我们真正想做的是能够编写保存和取出复杂对象(我们的类实例)的代码—从数据库中取出或者保存到数据库中,尽量为我们减少这些底层的苦差事。因为这些数据访问任务通常都是非常单调的,我们不禁要问:关系数据模型特别是SQL是面向对象的应用中持续性问题的正确选择吗?我们可以立即回答这个问题:是的!有许多原因使SQL数据库支配了计算行业。关系数据库管理系统是唯一被证明了的数据管理技术并且几乎在任何Java项目中都是一项需求。
然而,在过去的15年里,开发者一直在讨论范例不匹配的问题。这种不匹配解释了为什么每个企业项目都需要在持续性相关的问题上付出如此巨大的努力。这里所说的范例是指对象模型和关系模型,或者可能是面向对象编程与SQL。让我们通过询问在面向对象的应用开发环境中,持续性究竟意味着什么,来开始我们对不匹配问题的探究。首先,我们将本章开始部分声明的对持续性过分简单的定义扩展到一个较宽的范围,更成熟的理解包括维护与使用持续性数据。
面向对象应用中的持续性
在面向对象的应用中,持续性允许一个对象的寿命可以超过创建它的程序。这个对象的状态可能被存储到磁盘上,并且在将来的某一时刻相同状态的对象可以被重新创建。这样的应用不仅仅限于简单的对象——关联对象的完整图形也可以被持续化并且以后可以在新的进程里被重新创建。大多数对象并不是持续性的;暂态对象只有有限的寿命,被实例化它的进程的寿命所限定。几乎所有的Java应用都在混合使用持续与暂态对象;因此,我们需要一个子系统来管理我们的持续性数据。现代的关系数据库为持续性数据提供了一种结构化的表示方法,允许排序,检索和合计数据。数据库管理系统负责管理并发性和数据的完整性;它们负责在多个用户和多个应用之间共享数据。数据库管理系统也提供了数据级别的安全性。当我们在本书中讨论持续性时,我们考虑以下这些事情:
■ 存储,组织与恢复结构化数据
■ 并发性与数据完整性
■ 数据共享
特别地,我们将在使用域模型的面向对象的应用环境中考虑这些问题。使用域模型的应用并不直接使用业务实体的扁平表示进行工作,这些应用有它们自己的面向对象的业务实体模型。如果数据库中有“项目”与“竞价”表,则在这些Java应用中会定义“项目”与“竞价”类。
然后,业务逻辑并不直接在SQL结果集的行与列上进行工作,而是与面向对象的域模型进行交互,域模型在运行时表现为一个关联对象的交互图。业务逻辑从不在数据库中(作为SQL存储过程)执行,而是被实现在Java程序中。这就允许业务逻辑使用成熟的面向对象的概念,例如继承与多态。我们可以使用众所周知的设计模式例如“策略”,“中介者”和“组合” ,所有这些模式都依赖于多态方法调用。现在给你一个警告:并不是所有的Java应用都是按照这种方式设计的,并且也不打算是。对于简单的应用不使用域模型可能会更好。SQL和JDBC API可以完美地处理纯扁平数据,并且现在新的JDBC结果集已经使CRUD操作变得更简单了。使用持续性数据的扁平表示进行工作可能更直接并且更容易理解。
然而,对于含有复杂业务逻辑的应用,域模型有助于有效地提高代码的可重用性和可维护性。在本书中我们集中在使用域模型的应用上,因为通常Hibernate和ORM总是与这种类型的应用有关。如果我们再次考虑SQL和关系数据库,我们最终会发现这两种范例的不匹配之处。
SQL操作例如投射与连接经常会导致对结果数据的扁平表示。这与在Java应用中用来执行业务逻辑的关联对象的表示完全不同!这是根本不同的模型,而不仅仅是相同模型的不同的显示方式。
带着这些认识,我们能够开始看一下这些问题——许多已经很好理解的与没有很好理解的——必须被合并使用这两种数据表示的应用所解决——一个面向对象的域模型与一个持续性的关系模型。让我们仔细地看一下。
JSP企业网站建设Abstract
This paragraph mainly talk about Internet grows up vary fast inner along with joining in WTO.The net is becoming a new media with the most potential of development and future,as well as the hot point of publicize by much business. The net technology should be well used to offer information service for clients and cooperate cooperates,and catchs business especially for the tradition large corporation.Shenyang Changhong engine Ltd as a engine-making corporation should build its homepage better to qua it as a carrier to publicize,service and communion from this way to concert it grows up quickly.Let more corporation and client join in and know Shenyang Changhong engine Ltd by homepage.
The Java Server Page extends all the specialty of Java and has very vastitude development.So this item uses JSP as basal language Struts as empolder frame Hibernate as relational persistence
摘 要
本文主要阐述了随着加入WTO,Internet也在以迅猛的势头在国内爆发式地增长,网络凭借其卓越的互动性与便捷的交流手段正成为最有发展潜力与前途的新兴媒体,成为众商家倍为关注的宣传热点。尤其是传统大型企业更应该充分利用互联网技术,为客户、合作伙伴在网上提供信息服务,并且借助互联网,敏锐的捕捉商机。作为专业从事机械制造的沈阳长红机械有限公司,更需要建设好网站,将其作为对外宣传、服务和交流的载体,来配合公司的迅速发展,使网站具有鲜明的行业特色,使更多的企业通过网络来结盟,使更多的客户通过网络来了解沈阳长红机械有限公司。
JSP继承了所有Java语言的特点,而且发展前景十分的广阔,因此本项目才用Jsp语言作为根本,选用经典的Struts作为开发架构,在数据持久层方面则使用了Hibernate.
关键字:互联网,企业,JSP,
JSP企业网站建设
1 需求分析
1.1 项目背景
现在网络的发展已呈现商业化、全民化、全球化的趋势。目前,几乎世界上所有的公司都在利用网络传递商业信息,进行商业活动,从宣传企业、发布广告、招聘雇员、传递商业文件乃至拓展市场、网上销售等,无所不能。如今网络已成为企业进行竞争的战略手段。企业经营的多元化拓展,企业规模的进一步扩大,对于企业的管理、业务扩展、企业品牌形象等提供了更高的要求。在以信息技术为支撑的新经济条件下,越来越多的企业利用起网络这个有效的工具。网站早已由论证阶段进入了实质阶段,尤其为企业提供一个展示自己的舞台、为消费者创造一个了解企业的捷径。公司可以通过建立商业平台,实行全天候销售服务,借助网络推广企业的形象、宣传企业的产品、发布公司新闻,同时通过信息反馈使公司更加了解顾客的心理和需求,网站虚拟公司与实体公司的经营运作有机的结合,将会有利于公司产品销售渠道的拓展,并节省大量的广告宣传和经营运营成本,更好地把握商机。随着全球信息网络的发展,Internet在世界上已不仅仅是一种技术,更重要的是它已成为一种新的经营模式。从4C( Connection.,Communication ,Commerce , Co-operation )层次上彻底改变了人类工作,学习,生活,娱乐的方式,已成为国家经济和区域经济增长的主要动力。Internet正成为世界最大的公共资料信息库,它包含无数的信息资源,所有最新的信息都可以通过网络搜索获得。更重要的是,大部分信息都是免费的,应用电子商务可使企业获得在传统模式下所无法获得的巨量商业信息,在激烈的市场竞争中领先对手。
1.2 项目目标与期望
1.2.1 树立全新企业形象
对于一个以机械产品制造和销售为主的大型企业而言,企业的品牌形象至关重要。 特别是对于互联网技术高度发展的今天,大多客户都是通过网络来了解企业产品、企业形象及企业实力,因此,企业网站的形象往往决定了客户对企业产品的信心。建立具有国际水准的网站能够极大的提升企业的整体形象。
1.2.2 增强销售能力
销售力指的是产品的综合素质优势在销售上的体现。现代营销理论认为,销售亦即是传播。销售的成功与否,除了决定于能否将产品的各项优势充分地传播出去之外,还要看目标对象从中得到的有效信息有多少。由于互联网所具有的“一对一”的特性,目标对象能自主地选择对自己有用的信息。这本身已经决定了消费者对信息已经有了一个感兴趣的前提。使信息的传播不在是主观加给消费者,而是由消费者有选择地主动吸收。 同时,产品信息通过网站的先进设计,既有报纸信息量大的优点,又结合了电视声、光、电的综合刺激优势,可以牢牢地吸引住目标对象。因此,产品信息传播的有效性将远远提高,同时亦即是提高了产品的销售力。
1.2.3 提高附加值
许多人知道,购买产品不仅买的是那些看得见的实物,还有那些看不见的售后服务。这也就是产品的附加值。产品的附加值越高,在市场上就越有竞争力,就越受消费者欢迎。因此,企业要赢得市场就要千方百计地提高产品的附加值。在现阶段,传统的售后服务手段已经远远不能满足客户的需要,为消费者提供便捷、有效、即时的24小时网上服务,是一个全新体现项目附加值的方向。世界各地的客户在任何时刻都可以通过网站下载自己需要的资料,在线获得疑难的解答,在线提交自己的问题。
总结上述几点,长红机械有限公司网站建设目标可总结如下:
1) 帮助企业建立有效的企业形象宣传、企业风采展示、公司产品宣传,打造“长红机械有限公司”新形象。
2) 充分利用网络快捷、跨地域优势进行信息传递,对公司的新闻进行及时的报道。
3) 通过在线供求系统实现网上的供求信息的查询、订购、交易联系,优化信息的流通渠道。
1.3 项目设计原则
1.3.1 商业性原则
作为企业商业运作的一个组成重要部分,服务于长红机械有限公司企业文化的对外传播,服务于企业与客户、企业与员工沟通渠道的建立,完善企业服务体系,创造更多的商业机会,为企业经营者提供科学决策辅助。
1.3.2 品牌性原则
为客户提供有价值的产品和服务,充分体现“长红机械有限公司”品牌优势,重点塑造企业网络品牌的个性化形象,使注意力资源尽可能地转化成品牌消费,建立忠诚“长红机械有限公司”消费群体。
1.3.3 经济性原则
建立适合长红机械有限公司自身需求的网络平台,提供广泛的涵盖用户多种需求的功能,数据处理方式灵活以满足高度用户化的需求,节省网站建设成本,并确保其较好的拓展性和开放性;同时网站具有基于WEB界面的管理后台,企业能够自主的对网站中大部分内容作更新、修改操作,节省了企业网站的运营成本,提高了信息更新、传播效率。
1.3.4 扩充性原则
网站的整体规划及框架设计是具可扩充性的,前台页面的设计能保证企业网站在增加栏目后不会破坏网站的整体结构。后台数据库的设计具有高度的扩充性,企业能够根据需要对栏目、类别的增、删、修改。
JSP企业网站建设
2 可行性分析
2.1 技术可行性
2.1.1 动态网站技术介绍
Internet起源于20世纪60年代的美国,它在近几年迅速风靡全球,其根本原因不仅在于她拥有卓越的国际通信功能,更在于它拥有巨大的信息资源.所谓的Internet是指由分布在全世界成千上万的计算机网络遵循一定的通讯协议,并相互联系在一起而形成的国际互连网络,也就是说,Internet是建立和使用这些网络的人群,群体,公司以及各种网络资源的集合体.
随着网络技术的不断发展,单纯的静态页面已经不能满足发展的需要,因为静态页面是用单纯的HTML语言组成的,它没有交互性.因此,为了满足实际的需要,许多网页文件扩展名不再只是”htm”,”html”,出现了以”php”,”asp”,”jsp”,”shtml”等为后缀的网页文件,这些都是采用动态网页技术制作出来的.
2.1.2 程序语言的选择
·CGI
CGI( Common Gateway Interface,通用网关接口).首先,客户端(即Web浏览器)根据某资源的URL(Uniform Resource Locator,统一资源定位器)向Web服务器提出请求,Web服务器的HTTP Daemon(守护进程)将此请求的参数通过标准输入stdin和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序处理结果通过标准输出stdout返回给HTTPDaemon进程,再由HTTP Daemon进程返回给客户端,由浏览器解释执行,将最终结果在用户面前显示.CGI允许Web服务器运行外部应用程序,以通过外部程序来访问数据库等一些外部资源,并产生HTML文档给浏览器.但每次请求CGI程序都要重新启动程序,影响了响应的速度,且CGI程序不能被多个客户请求共享,影响了各种资源的使用效率.为了克服CGI的这些缺点,一些Web服务器厂商开发出了专用的API(Applications Program Interface应用程序接口),这样就允许程序员编写程序来扩展服务器的功能.API相对于CGI与Web服务器的结合更加紧密,占用的资源较少,运行的效率大有提高,安全性与保护性更好.但是开发API应用程序比开发CGI应用程序复杂得多,要求程序员掌握更多的计算机软件知识,且各种API之间的兼容性不好,业界没有一个统一的标准,使得API程序只能工作在专用的Web服务器与操作系统之上.编写CGI的程序设计语言有许多种,常用的有C,PERL,Visual C++等,由于对程序员的要求较高,且编写与 调试比其它队编程技术困难,故近年来基于B/S的信息系统工程时间中已很少被采用.
·ASP
ASP的程序比HTML更方便而更富有灵活性.是在Web服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器.因此ASP与一般的脚本语言相比要安全得多.ASP最大的好处就是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能.但ASP技术也并非完美无缺,由于它基本上是局限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术要实现在跨平台Web服务器上工作,不是很容易.Microsoft的ASP技术目前已发展到.NET版.对很多人来说,用ASP来创建Windows服务器平台上的动态Web网页,整个站点和基于Web的应用程序已经成为及其自然的方法.在浏览器地址栏中,文件扩展名.asp同表示动态创建的网页的文件扩展名.pl或.cgi一样,已被浏览者所接受.开发ASP程序,常常先设计静态网页的栏目格式和排版形成HTML语言,接着在HTML的基础上添加脚本程序,形成ASP程序后再实现动态的Web网页.在ASP的程序开发中,它所用的脚本语言是JavaScript和VBScript,在默认情况下使用的是VBscript,它是VB程序设计语言的一个子集,语法与VB基本相同.ASP中的ADO对象用来执行与数据库相关的操作,ADO再以OLEDB或ODBC的方式访问数据库,在.NET版本中这一对象称为ADO.NET.
·PHP
PHP即Hypertext Preprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C,Java,Perl等语言,而且只需要很少的编程知识就能使用PHP建立一个真正交互的Web站点.它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签或者在HTML标签中加入脚本代码从而更好地实现页面控制.PHP提供了标准的数据库接口,数据库连接方便,兼容性更强,扩展性强,可以进行面向对象编程.但是PHP对组件的支持不够,扩展性差,常用它与免费的数据库系统MySQL协同一起用来构建中小型网B/S应用大网站或信息系统.
·JSP
JSP(JavaServer Pages)是由Sun公司倡导,许多别的公司参与一起创建的一种新动态网页技术标准,类似其他技术标准.在传统的网页HTML文件(*.htm,*.html)中加入Java程序片断(Scriptlet)和JSP标签,构成了JSP网页(*.jsp)Servlet/JSP Container收到客户端发出的请求时,首先执行其中的程序片断,软后将执行结果以HTML格式响应给客户端,其中程序片断可以是:操作数据库,重新定向网页以及发送E-Mail等等,这些都是建立动态网站所需要的功能.所有程序操作都在服务器端运行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-side Language.所以被许多人认为是未来最有发展前途的动态网站技术之一.
经过如上的程序语言的比较,PHP功能相对简单,不适合作大程序,而CGI效率相对较低,所以也不考虑,因为该系统并没有原有的基础平台需要扩展,也不需要与其他系统进行太多的交互,所以使用J2EE的模式并不能够体现出J2EE本身的优势,而JSP又是J2EE的核心技术之一,可以随时升级为J2EE程序,,这里暂时不考虑采用J2EE,这样只需要在ASP和JSP中进行选择.在进行了诸多因素的比较之后,最终认为目前这个阶段比较合适的是JSP,,而选择Struts架构作为开发的主体框架,选用Hibernate作为数据持续性处理层,则是考虑到了其高速的开发效率,及代码重用性高,易于维护等各种优势.其最终目的是希望提高系统底层业务逻辑的可重用性,增加系统的可扩展性,降低系统维护成本.
2.1.3 语言优势
·将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面.使用JSP标识或者小脚本来生成页面上的动态内容.生成的内容的逻辑被封装在标识和JavaBeans组件中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面而不影响内容的生成.
·一次编写,到处运行
作为Java平台的一部分,JSP拥有Java编程语言”一次编写,到处运行”的特点,随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用.
·JSP的平台适应性更广
这是JSP比ASP的优越之处,几乎所有的平台都支持Java,它们可以在任何平台下通行无阻.虽然NT的OS占据了很大的市场的份额,但在服务器方面UNIX的优势仍然很大.从一个平台移植到另一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标注的字节码与平台无关.
·健壮的存储管理和安全性
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译为Java Servlet,JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性
·数据库连接技术
很多的OS中都带有JDBC驱动程序,Java就通过JDBC与数据库连接,执行查询,提取数据等操作.Sun公司还提供了JDBC-ODBC的桥连方式,因此Java也可以访问带有ODBC驱动的数据库,目前大多数数据库系统都带有ODBC驱动,所以Java能访问诸如Oracle,Sybase,MS SQL Server 和Access等类型的数据库.
2.1.4 操作可行性
对于用户来说,本系统只要求使用者掌握一定的上网经验,经过仔细设计和测试之后的系统具有操作简单,方便灵活等优点,足可以满足各种用户的不同需求,同时也方便了公司的内部管理。管理人员及用户一定会在短时间内掌握并熟练使用。只要动一动鼠标键盘就可以达到想要的效果。
2.2 环境可行性分析
2.2.1 软件环境
·操作系统:Win2k Server sp4
·数据库: Microsoft SQL Server 2000 Enterprise Edition sp3
·Web服务器:TOMCAT
·IDE;Eclipse3.1.1+Myeclipse4.1.1GA+Lomboz+emf,Dreamweaver8
JSP企业网站建设
·外部包:Struts.jar Hibernate.jar
2.2.2 硬件环境
AMD Athlon 64 3000+,KingMax PC3200 512MB × 2,Gainward NV35XT
Seagate SATA 8M 120GB × 2
2.3 系统结构可行性分析
2.3.1 B/S模式简介
本系统采用B/S模式。
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
2.3.2 B/S模式的优点
·维护和升级方式简单
目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性.对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护.无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享.所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向.今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的.因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器.
·成本降低,选择更多
大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位.现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高.所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行.
比如说很多人每天上“网易”网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统.
3 系统设计
系统设计是在系统分析的基础上由抽象到具体的过程.主要目标是将系统分析阶段所提出的反映了信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案,为下一阶段系统实施提供必要的技术资料,应符合系统性,灵活性,可靠性,经济性的要求.若图片无法显示请联系QQ3710167
3.1 总体设计
图3.1 沈阳长红机械有限公司网站功能模块图
图3.2 沈阳长红机械有限公司网站后台管理系统功能模块图
3.2 数据库设计
3.2.1 数据库的需求分析
依据项目的处理需求,对应数据表的设计及功能如下:
· 招聘信息表: 存放发布企业的招聘信息
· 用户留言表: 存放注册用户的留言
· 应聘信息表: 存放提交的应聘信息
· 新闻表: 存放网站内的新闻
· 订单表: 存放注册信息的订单
· 用户表: 存放注册用户的基本信息
· 产品表: 存放公司产品的基本信息
3.2.2 数据库表的具体设计
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Position
Varchar
20
职位
是
有(无重复)
Num
Varchar
50
招聘人数
是
无
Place
Varchar
5
工作地点
是
无
Paid
Varchar
20
待遇
是
无
Showtime
Varchar
50
发布日期
是
无
Age
Varchar
30
要求年龄
是
无
Describer
Varchar
500
职位描述
是
无
表3.1 getjob : 招聘信息表
表3.2 infoback : 用户留言表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
Int
4
自动编号
是
有(无重复)
是
Name
Varchar
50
用户名
是
无
Who
Varchar
50
联系人
是
无
Compname
Varchar
50
公司名称
是
无
Tel
Varchar
50
联系电话
是
无
Fax
Varchar
50
传真
是
无
Email
Varchar
50
电子邮件
是
无
Title
Varchar
50
留言标题
是
无
Content
Varchar
400
留言内容
是
无
Bktime
Varchar
50
留言时间
是
无
Reconfirm
Varchar
4
是否回复
是
无
Back
文本
500
回复内容
否
无
JSP企业网站建设
表3.3 invite : 应聘信息表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
int
4
自动编号
是
有(无重复)
是
Positions
varchar
50
应聘职位
否
无
Name
varchar
50
姓名
否
无
Sex
varchar
20
性别
否
无
Birth
varchar
50
生日
否
无
Merry
varchar
30
婚否
否
无
Graduate
varchar
50
毕业院校
否
无
Grade
varchar
50
学历
否
无
Spciality
varchar
50
专业
否
无
Zip
varchar
50
邮编
否
无
Tel
Varchar
50
电话
否
无
Email
Varchar
50
邮件
否
无
Address
Varchar
50
地址
否
无
Ability
Varchar
50
能力
否
无
about
varchar
400
个人简历
否
无
表 3.4 news : 新闻表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
int
4
自动编号
是
有(无重复)
是
Title
varchar
50
新闻标题
是
无
Content
varchar
50
新闻内容
是
无
Author
varchar
50
作者
是
无
Type
varchar
50
新闻类别
是
无
Degree
int
4
浏览次数
是
无
intime
varchar
50
添加时间
是
无
表 3.5 orders : 订单表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
Int
4
自动编号
是
有(无重复)
是
Name
varchar
10
用户名
是
无
proID
Varchar
12
产品名
是
无
ordID
Varchar
4
订单编号
是
无
Num
Varchar
30
数量
是
无
Howlong
Varchar
50
交货日期
是
无
other
Varchar
50
其他说明
是
无
effects
varchar
50
交付车间
是
无
表 3.6 userInfo : 用户信息表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
Int
4
自动编号
是
有(无重复)
是
Name
varchar
10
用户名
是
无
Psw
Varchar
12
密码
是
无
Question
Varchar
4
提示问题
是
无
Answer
Varchar
30
答案
是
无
Sex
Varchar
50
性别
是
无
Email
Varchar
50
邮件
是
无
http
varchar
50
主页
否
无
Compname
varchar
50
公司名
否
无
Fax
Int
4
传真
否
无
Tel
Int
4
电话
是
无
表3.7 product : 产品信息表
字段名称
数据类型
字段大小
作用
必填字段
索引
是否主键
Id
Int
4
自动编号
是
有(无重复)
是
Name
varchar
10
产品名
是
无
Degree
Varchar
12
浏览次数
是
无
Type
Varchar
4
产品类型
是
无
path
Varchar
30
小图路径
是
无
Show
Varchar
50
大图路径
是
无
Power
Varchar
50
功率
否
无
Intro
varchar
50
介绍
否
无
Material
varchar
50
材料
否
无
Astm
varchar
50
Astm
否
无
iso
Varchar
50
Iso
否
无
Direct
Varchar
50
清理直径
否
无
Cpxd
Varchar
50
产品细度
否
无
Pronum
Varchar
50
抛丸数量
否
无
Qlfw
Varchar
50
清理范围
否
无
Pwnum
Varchar
50
最大产量
否
无
Pwgl
Varchar
50
抛丸功率
否
无
Rl
Varchar
50
最大容量
否
无
Inair
Varchar
50
进气压力
否
无
outair
varchar
50
排气压力
否
无
3.3 详细设计
3.3.1 功能设计
功能设计充分考虑到沈阳长红机械有限公司展示企业形象、扩大知名度的需要.网站采用了多个动态模块,企业能够自主、独立的完成网站中大多数内容的更新,同时,设计以展示沈阳长红机械有限公司形象为主,主要体现沈阳长红机械有限公司网站的整体美感.增强了企业在访问者心中的亲和力认知度,使沈阳长红机械有限公司的产品为更多的客户所瞩目.网站内容及结构框架设计上力求体现简捷性与人性化的思想,在功能设计上配合企业的经营模式、经营思想、发展战略.页面的设计将充分体现沈阳长红机械有限公司大企业的形象,在框架编排、色彩搭配以及Flash动画的适当穿插都做到恰到好处,使整个网站在保证功能的前提下给使用者带来良好的视觉享受和精神愉悦感.
3.3.1.1 网站首页
网站首页是网站的第一内容页,整个网站的最新、最值得推荐的内容将在这里展示.以达到整个公司的企业形象的和谐统一;在制作上采用JSP动态页面,系统可以调用最新的内容在首页显示.在内容上,首页有公司的新闻热点,推荐产品等信息,并且管理员在后台可以动态更新首页的内容,使整个网站时时充满生机和活力.在设计上,注重协调各区域的主次关系,以营造高易用性与视觉舒适性的人机交互界面为终极目标.给浏览者耳目一新的感觉,吸引浏览者经常访问沈阳长红机械有限公司网站.
3.3.1.2 关于企业
本栏目采用静态页面,主要功能是宣传企业,通过对的基本情况、文化理念、服务、产品的了解,使沈阳长红机械有限公司为更多客户所熟悉、信赖.在页面设计上,采用灵活运用多种动画效果,力求将沈阳长红机械有限公司的企业形象予以最好的传达.
·企业形象
该模块主要介绍了企业从建立到成长的发展历程,以及公司的所获得的专利,企业的精神等,让浏览者对企业有个大体的印象.
·企业文化
该模块向浏览者展示了企业的宗旨,经营理念,价值观,作风,战略等内容.
·企业荣誉
该模块采用静态页面,主要内容为介绍公司所获得的荣誉证书、通过的技术认证等信息,可以采用图片加文字的表现手法.
·组织机构
该模块对沈阳长红机械有限公司的主要领导作了简要的介绍.
3.3.1.3 新闻资讯
可以使用此系统构造新闻内容页面,分为行业新闻和企业新闻两部分,自动生成新闻连接,同时产生相关新闻列表,自动显示信息及发布时间等.它大大减轻了网站更新维护的工作量,加快了信息的传播速度,使网站时时保持着活力和影响力.
3.3.1.4 产品信息
该模块为沈阳长红机械有限公司网站的重要部分,详细介绍了公司的产品.可以浏览全部的产品,可以按产品的分类浏览产品,也可以分别按名称或简介查找产品.在找到自己理想的产品之后,点击”加入收藏”的链接,就可以增加一张订单, 在订单中,可以修改定购产品的数量,交货的日期,以及其他的要求等等.然后在一周,公司的负责人员会打电话联系用户,以确定生产.
3.3.1.5 信息反馈
本模块是一个互动动态栏目,是网站管理者获得网站访客反馈信息的一个重要来源,注册的会员可以在这里留言,网站后台管理员可以在线的对其留言的内容加以回复.它主要是提供了一个公共的信息发布平台,也适用于作为企业内部个人办公助手以及企业与企业之间进行信息交流;使得媸彼娴夭檠畔⒌囊贫旃晌赡?
JSP企业网站建设
3.3.1.6 人才招聘
本模块功能如其名,公司在某一部门需要发展壮大,或者有员工离开时,可以在这里发布招聘信息,然后通过后台管理程序,浏览应聘者的个人简历,选择其中合适的人员通知其到公司面试.
3.3.1.7 联系我们
公司的详细联系方式,包括地址,电话,传真等.
3.4 开发架构
3.4.1 软件开发架构的意义
对于已经习惯了使用传统的JSP设计方式实现动态网站的程序员,在刚开始接触Struts时经常会出现一种困惑:专业书籍和文章中总是使用Struts Framework这种说法,Struts通常也被称为是一种Web应用开发的架构(Framework),那么到底什么是架构,软件开发架构的意义又是什么呢?
如果将早期的软件开发方式比喻为传统手工业生产方式的话,那么基于软件开发架构的开发方式则是大型现代化工厂生产方式的体现.虽然二者都能够制作出产品,但是在生产效率及产品质量的保证上显然会有巨大的差异.
汽车生产厂家在制造一辆汽车时,总是先在各条生产线上制作出不同类型的零件,最终再由专业的技师在专业的组装生产线上将成百上千的零件组装成一台完整的汽车,显然,设计者的主要精力并不是用于重复地制造相同的车轮,相同的方向盘,而是利用现成的车轮组装出一辆辆不同的汽车.同样,开发人员也可以利用软件架构中提供的组建库(如同已经生产好的规范化的汽车核心零部件库),按照既定的组装方式将不同的组建应用在软件产品的各个环节,最终开发出一个完整的,高质量的软件产品.
实际上,如果需要,汽车设计者也可以将原有的车轮进行改造,例如涂上不同的颜色,贴上不同的装饰物等.同理,软件开发人员可以在现有组件的基础上进行扩展和改进,这实际上充分地实现了软件开发的可扩展性.
组件复用是面向对象编程思想的结晶,而在软件架构的基础上进行开发可以最大限度地实现组件的复用.在大型,多层结构的软件开发项目中,开发和使用具有可重用性,可扩展性,经过良好测试的软件组织,可以使开发者从大量繁琐的代码工作中解脱出来,专注于软件设计和业务逻辑的实现.通常将被验证为有效的,相同类型问题的解决方案进行抽象,即可提取形成一个应用程序框架,即Framework.每一种Framework都有自己的一套明确的实现机制,通常在Framework结构中都会包含一个”命令和控制”组件(“command and control”component),类似于工业生产中的”控制中心”,开发人员通过它可以很容易地控制,扩充和实现该Framework上的开发结构.
3.4.2 Struts架构简介
随着Web开发技术的日益成熟,在Web开发开发领域中出现了许多设计好的软件开发框架,Struts就是一种基于MVC经典设计模式的框架,也是当前Web开发中比较成熟的一种框架.
3.4.2.1 经典的MVC模式
MVC(Model-View-Controller)模式,即模型-视图-控制器模式,其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分.
·模型(Model):业务逻辑层.实现具体的业务逻辑,状态管理的功能.
·视图(View):表示层.即与用户实现交互的界面,通常实现数据输入和输出功能.
·控制器(Controller):控制层.起到控制整个业务流程(Flow Control)的作用,实现View和Model部分的协同工作.
MVC设计模式可以针对需要为同样的数据提供多个不同视图的应用程序,例如:公司产品数据库中同样的产品信息数据,但需要根据用户的不同需求在页面中显示其所需的不同产品信息.
MVC设计模式中,事件一般是指客户端Web浏览器提交的各种不同请求,这些请求由控制器进行处理,控制器根据事件的类型来改变模型或各个视图,视图也可以接受模型发出的数据更新的通知,依据数据更新的结果调整视图效果,呈现在用户面前.而模型也可以通过视图所获得的用户提交的数据进行具体业务逻辑的处理.
显然这样的运行机制可以起到分工明确,指责清晰,各尽所长的效果.而在软件开发的过程中,这样的开发方式无疑可以有效地区分不同的开发者,尽可能减少彼此之间的互相影响.充分发挥每个开发者的特长.这在开发大型复杂的Web项目时体现得尤为突出.若图片无法显示请联系QQ3710167
图 3.1 MVC设计模式的结构
3.4.2.2 Struts 1.2 开发框架
作为基于MVC设计模式的Web应用的一种典型体现,Struts架构实际上是建立在Model2基础上的,对Model,View和Controller都提供了现成的实现组建.
3.4.2.2.1 Controller控制器部分
Struts中的Controller控制器部分是通过专门的Servlet来实现的,该Servlet是一个Struts API中提供的ActionServlet类型的实例,ActionServlet类继承了javax.servlet.http.HttpServlet类,因此该类的实例可以和普通的Servlet一样工作,其作用是接收客户端浏览器的请求,然后选择执行相应的业务逻辑,再把响应结果送回到客户端.
Action对象是开发者定义的类(该类必须是Struts API中提供的Action类的子类)的实例.在继承该类的过程中开发者可以加入具体业务逻辑或调用业务逻辑模块.Action对象在进行了业务逻辑或调用业务逻辑模块.Action对象在进行了业务逻辑的处理以后会将应用程序流程转到合适的View组件,最终将响应送回浏览器客户端.Struts中提倡Action对象只用来决定”做什么”,相当于一个低层面的控制器,因此也可以将Action归纳为Controller的组成部分.
3.4.2.2.2 Model 模型部分
MVC系统中的Model模型部分从概念上可以分为两类:系统的内部状态和改变系统状态的动作.Struts中的Model部分一般由JavaBean以及EJB组成.在Struts架构中使用JavaBean来提供具体的业务逻辑,即”怎么做”,对于复杂的系统也可以使用EJB等组件来实现系统状态维护.这种业务逻辑的细分可以增强
可以代码的可重用性.
3.4.2.2.3 View视图部分
Struts中的View视图部分依然可以采用JSP来实现.此外,Struts还提供了丰富的自定义标记库,View部分使用这些自定义标签同样可以实现与Model部分的有效交互并能够增强显示功能.
3.4.2.3 Struts开发环境安装
在Tomcat安装完成后,即可将Struts框架工具安装到对应的WEB Container中.可以通过Struts的二进制发布包安装Struts框架,具体操作步骤:
① 下载二进制发布版
② 将下载的Struts二进制发布包进行解包,将解包目录下的lib目录下的所有.jar文件全部复制到项目目录的WEB-INF/lib下,如果在多个项目中都用到了Struts,则将上述文件直接复制到Tomcat目录下的common/lib下.
③ 将对应的lib目录下的struts.jar文件添加到环境变量CLASSPATH中即可.
以上资源可以从http://jakarta.apache.org/struts/userGuide/index.html获得更多关于Struts安装和相关配置的说明信息.
3.5 数据持久层
数据是软件系统中不可缺少的环节,数据持久化的解决之道也一直是企业计算标准中最有影响力的部分.如今关系型数据库已经稳定地占据着主要的数据库市场,XML技术和XML数据库技术也日渐成熟.
JSP企业网站建设
3.5.1 持久化数据
数据是我们软件开发人员必须考虑的对象.无论你使用哪种技术,借助哪种工具,以及购买哪种软件平台产品,当接受一个实际的问题时,你都需要面对实际的数据,考虑实际数据的各种问题.在这些问题中往往都包含数据持久化的问题,这不仅是因为我们的计算机内存有限,更主要的原是业务逻辑的需要,作为一个接触软件技术,尝试写程序的人,我们要接触各种类型的数据.下面列举了三种常见的数据类型:
3.5.1.1 随机数据
这种数据指的是不确定结构,不了解数量,目前也搞不清关系的数据.它听起来很奇怪,但在实际的程序设计中十分常见.例如,从一个震动源传递到计算机采集卡的数据,再比如一个自然物生长过程中的数据.可能有些数据实际上是很有规律的,但是在设计程序时由于对它的了解很少,使它对于我们来说也成了随即的数据了.我没曾经在遇到这种搞不大清楚的数据时,使用很大的数组或者多个链表来表述,不管下一个数据的值是什么,先存储起来再说.有时候当遇到的数据总也摸不到规律,或者越来越多,内存也容纳不下时,就找个文件存放起来,后来发现其实存入文件的方式很不错,起码可以一直继续下去.也许这就是最佳的持久化策略了.
3.5.1.2 属性数据
在接触具体的项目开发任务时,更多的时候要接触到属性类型的数据,这些数据来源于对象的属性,当然这些属性之间还存在关系,对于此类数据,似乎最好的持久化方法就是利用关系型数据库表了,在存入数据表的过程中还可以借助Hibernate来提高开发的效率,或者直接使用JDBC来传递SQL语句.这两种方法有些相似但还有细微的差别.
3.5.1.3 XML数据
现在很多网络上的应用程序都使用XML类型的数据,或者说是一种树状的数据,如何将这两种数据持久化保存下来呢?一种方法是将XML数据拆分为属性数据,然后存储到关系型数据库中.另一种方式比较新,是将XML数据存储到XML数据库中,在XML数据库中存储这种数据时,数据的结构不变,XML数据在XML数据库中,在XML数据库中以文档对象形式保存,使用XPaht和XQuery查询语言来查询XML数据中的节点数据,或者多个XML文档中的多个节点数据.
相对于属性数据而言,XML数据是很宽松的.首先,XML数据的结构没有被确定下来,起码没有被定死为某种僵化的结构.其次,对于XML数据的各个节点来说,数据的类型并没有被确定下来,在XML中如果不加特殊的约束(例如DTD或者Schema),XML文档中的数据和结构可以有十分大的变化空间,在XML中以字符串形式存在的数据,很难确定它的类型是int或是String.最后,XML是可以被转换处理的,利用XSLT可以将XML转换成希望的结果.因此可以说对XML数据的约束是比较宽松的,XML数据类型甚至可以用来模拟实现一些随即性质的数据.
3.5.2 持久化技术
一直以来,在Java开发领域中基于数据库应用的设计实现一直是面向关系的,也就是说与数据库相关的处理过程并没有实现真正的面向对象.如何在数据存取的操作中实现真正的面向对象,一直是开发人员探索的问题.正在使用中的对象序列化技术,EJB中Entity Bean技术等,都是在这方面很好的探索.但是实体Bean设计实现过程中的繁琐和复杂,使得许多开发人员望而却步.
而Hibernate的出现,提供了一个符合Java面向对象编程思想,易于使用的数据库持久化解决方案.因此,在目前行业的Java数据库应用项目中,有越来越多的开发人员开始尝试使用Hibernate在数据库外面包裹上一层面向对象的外衣,从而将开发人员从繁琐,重复,技术含量不高的数据库编程中结果出来.
3.5.2.1 Hibernate概述
Hibernate在英文中的意思是”冬眠”,从这个角度也可以体会到Hibernate架构下提供的相关技术可以实现度十角状态的持久性保存.在传统的数据库编程中,开发人员要面对大量重复行代码的编写,以实现对不同数据表中的数据的获取,并将获取到的记录数据封装成对象,在处理完成之后,如果需要进行对象状态的存取,需要将对象中的数据拆卸成数据库记录中的对应字段的值,然后向数据库中进行存取.
这种工作方式显然没有实现真正意义上的数据存取阶段的面向对象.虽然数据存取过程中的工作步骤是基本固定的,但是由于操作的数据表中字段列表数据的不同,使得开发人员必须要不厌其烦地书写与相应的实体类对应的封装处理过程.
而在Hibernate中,类似这种重复性高,工作量大,但是又必须保证高质量完成的体力活,全部由Hibernate接管过去.这对广大的Java开发人员无疑是个非常好的消息.
Hibernate本质上是一个面向Java开发环境的对象/关系数据库映射工具.在Hibernate之前,开发人员要将面向对象的软件和关系数据库结合在一起,往往会费长麻烦.而借助Hibernate对象/关系数据库映射技术,可以非常轻松地将以面向对象思想封装的对像的各个状态数据映射到基于SQL的关系模型数据结构中去,若图片无法显示请联系QQ3710167
图 3.2 Hibernate工作示意图
4 系统实现
4.1 实现效果
4.1.1 网站首页
在浏览器地址栏中输入http://localhost:8888/02121140之后,屏幕中将显示如图 4.1所示的沈阳长红机械有限公司的首页.顶部为一行下拉导航菜单,可以链接到网站的各个功能模块,中上部为企业和行业两类新闻,左边为四种产品的分类,右边为用户登陆的区域,最下面是主要的产品.
JSP企业网站建设
图 4.1 沈阳长红机械有限公司的首页
4.1.2 关于企业
在下拉导航菜单中点击”关于企业”可链接到关于企业功能模块,如图4.2所示在左边点击”企业形象”,”企业文化”,”企业荣誉”,”组织机构”可进入相应的页面.若图片无法显示请联系QQ3710167
图 4.2 关于企业
4.1.3 新闻资讯
在下拉导航菜单中点击”新闻资讯”可链接到新闻资讯的功能模块,如图4.3所示,一共分”企业新闻”和”行业新闻”两类,点击左边的链接可进入相应的页面.然后点击新闻的标题,可浏览该新闻,并且可以查看该新闻的录入时间和浏览次数.
图 4.3 新闻资讯
4.1.4 产品信息
在下拉导航菜单中点击” 产品信息”可链接到产品信息的功能模块如图4.4所示,即可浏览全部的产品,左边有”产品分类”和”产品搜索”两个功能模块,可按分类浏览产品和按”产品名称”或”产品介绍”查找产品.然后点击”了解详情”的图片按钮可以浏览该产品的详细信息.在确定了某个产品后,点击”加入收藏”,可以填写一张订单定购该产品.
图 4.4 产品信息
4.1.5 信息反馈
在下拉导航菜单中点击” 信息反馈”可链接到信息反馈的功能模块.如果您不是注册的会员或者您还没有登陆,则不能留言.如图4.5所示.在登陆后即可浏览您以前的留言,并可查看管理员对您留言的回复.
图 4.5 信息反馈
4.1.6 人才招聘
在下拉导航菜单中点击”人才招聘”可链接到人才招聘的功能模块,如图 4.6所示,在确定要应聘某一职位后,点击”应聘此职位”,可进入相应的页面,填写姓名,性别等基本信息,然后等待工作人员通知您面试.
图 4.6 人才招聘
4.1.7 联系我们
在下拉导航菜单中点击”联系我们”可链接到联系我们的功能模块,如图4.7所示.就可以查看沈阳长红机械有限公司的地址,电话,传真等联系方式.
图 4.7 联系我们
4.1.8 会员功能
在网站的首页,以及关于企业等功能模块中,都有用户登陆的功能模块,在填入正确的用户名和密码后,即可以注册用户的身份浏览网站,并具有:修改会员资料或密码,填写订单,留言等功能.如果用户尚未注册,则点击”新用户注册”链接到注册页面,填写好信息后,即可注册.如果注册后的用户,忘记所设置的密码,可以到密码找回的页面,填写用户名,提示问题和答案,以及注册时所使用的电子邮箱即可找回密码,系统将您当前的密码以邮件的形式发回到你的邮箱内.若图片无法显示请联系QQ3710167
4.2 用户表示层
人才招聘
联系我们
关于企业
企业形象xingxiang xinagxiang xingxi
企业文化
企业荣誉
组织机构
新闻资讯
行业新闻
企业新闻
产品浏览览
产品分类
产品信息
填写订单
留言系统
用户登陆
首页 在用户表示层内,主要是一些JSP的页面,用于实现图4.1---图4.7所示的页面,该层中的JSP页面都放在项目的根目录下.整个网站的页面关系如图4.8所示.
JSP企业网站建设
4.8 网站页面关系图
4.3 数据持久层
由于本网站采用了Hibernate开发架构实现了数据持久层处理的功能,因此要给出Hibernate相关的配置文件及映射文件的具体源代码及其功能.对应Hibernate的配置文件和映射文件要放置在项目的src目录中, ,而用于管理session以及封装了数据库操作相关方法的类则与其他类一样,放到相应的包中, 本项目的相对路径为com.chjx.
4.3.1 Hibernate配置文件(hibernate.cfg.xml)
在该文件中主要是进行SessionFactory配置(可以理解成建立与数据库之间连接的配置)在Hibernate中,既可以用XML文件,也可以使用属性文件来配置,而本系统则使用的是XML.该文件的代码如下:其中粗体的部分数据库的类型,服务器,端口号,数据库名称等相关配置.
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
conn_SQL
jdbc:microsoft:sqlserver://L4:1433;SelectMethod=cursor;DatabaseName=chjx
sa
com.microsoft.jdbc.sqlserver.SQLServerDriver
org.hibernate.dialect.SQLServerDialect
4.3.2 Hibernate的映射文件
该映射文件是Hibernate架构中最基本也是最重要的一个配置文件,用于声明Hibernate中实现实体类的属性和数据库队形数据表字段之间的映射关系.这里仅给出留言表(infoback)对应的配置文件infoback.hbm.xml的代码,其他表与之类似.
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
4.3.3 声明管理session的类
该类用于管理session的生成和关闭.其中声明管理session的类基本上符合在传统Java Web开发中的JDBC的Connection对象的概念,在Hibernate中,该session帮助实现和数据库之间的交互.在Hibernate的开发过程中,session类声明的格式基本上是固定的,在项目中新建一个类,该类应该放置在项目文件夹下的src对应的包中,本项目的相对路径为com.chjx.文件名为HibernateSessionFactory.java.
package com.chjx;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal threadLocal = new ThreadLocal();
private static final Configuration cfg = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
private HibernateSessionFactory() {
}
}
4.3.4 封装了数据库操作的类
该类中封装了借助Hibernate机你姓女冠数据库相关操作的方法. 这里也仅给出留言表(infoback)对应的配置文件Infoback.java的代码,其他表与之类似.
package com.chjx;
import java.io.Serializable;
public class Infoback
extends AbstractInfoback
JSP企业网站建设
implements Serializable
{
public Infoback()
{
}
public Infoback(java.lang.Integer id)
{
super(id);
}
}
4.4 业务逻辑层
在本系统的业务逻辑层中,主要定义了一个用于连接数据库的Bean体.并将其编译后生成的类保存在项目目录下WEB-INF的子目录classes的相应的包中,本项目的相对路径为: WEB-INF\classes\com\chjx.其主要代码如下:
String DBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String ConnStr="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=chjx";
String DBuser="sa";
String DBpsw="";
public Conn()
{
try{
Class.forName(DBDriver);
}catch(java.lang.ClassNotFoundException Conn_e)
{
System.err.println(Conn_e);
}
}
4.5 控制处理层
表4.1是沈阳长红机械有限公司网站中Action映射表.该映射决定了Action与其他Web组件之间的关系.作为前后台之间的桥梁,本表中指明了每个Action的入口(即调用Action的组件)及出口(即请求转发的目标组件).
Action
入口
出口
Rerr
Register.jsp
RegErr.jsp
Rok
Register.jsp
RegOk.jsp
Nosame
Index.jsp
LogErr.jsp
Same
Index.jsp
LogOk.jsp
Adm
Index.jsp
Main.jsp
Jok
Job.jsp
jobOk.jsp
Jerr
Job.jsp
Joberr.jsp
Inferr
Infoback.jsp
Inferr.jsp
infOk
Infoback.jsp
infOk.jsp
Cok
Comeback.jsp
Comebackok.jsp
Cerr
Comeback.jsp
Comebackerr.jsp
Mok
Modify.jsp
Modok.jsp
Mno
Modify.jsp
Moderr.jsp
Addok
Add.jsp
Addok.jsp
表 4.1 Action 映射表
4.6 技术难点
4.6.1 投票系统
为了检测用户对本网站的满意程度,设置了投票系统,在用户选择了相应的选项后,将更新对应的数据库的列,再到显示投票结果的列取出相应的值.但java中默认保留小数点后8位,所以要调用java.text包中的DecimalFormat方法,将投票的百分比格式化为小数点后保留两位:
DecimalFormat df1= new DecimalFormat("########");
4.6.2 中文乱码
由于浏览器中的参数传递是按字节传送,因此英文和数字不会有任何的问题,而中文汉字则由两个字节组成.为了解决这个问题,使用了下面的两种方法:
①<%request.setCharacterEncoding(“gb2312”);%>
②request.getParameter("Password").getBytes("ISO-8849-1"),"GB2312");
4.6.3 图片处理
在SQL Server2000的数据库中可以存放任何格式的图片,但是要将其转换为二进制的数据存入数据库,在调用时再将二进制数据转换为图片,这样虽然便于管理,但是在当前国内的网速来看,这样的方法是在是不可取.因此本系统的图片均是存放的相对路径,将图片放在系统根目录下的image文件夹中,按类分好,然后将其相对路径存入数据库的对应列中.这样可以大大提高网页浏览的速度.
4.6.4 HQL语言
本系统中,所有对数据库的操作都由Hibernate来完成,因此用到了大量的HQL语言.HQL是Hibernate设计的一套完整而实用高效的查询语言,它通过面向对象的语句结构实现了和SQL语言类似的功能.如果向表里插入一条数据的话,直接调用save()方法即可,但如果要使用查询功能的话,我按照一般的SQL语句的方法:from 表名 where 条件,却总是找不到预期的数据,后来看书中发现,from后跟的是表对应映射的类文件名,而非表名,比如招聘表为invite,它对应的类为Invite.java,所以在from后要根Invite而不是invite.
4.6.5 安全性
将项目发布到互联网上后,有些用户不是点击超链接打开网站的某个页面,而是在地址栏中直接写,而后进入,试图避开身份验证,处于对安全性的考虑,本项目在用户登陆后才能进入的页面中,加入了如下的一行判断,如果用户非法进入,则看到的将是一片空白页.
String name=(String)session.getAttribute(“name”);
If(name==null){……..}
JSP企业网站建设
5 系统测试
在完成了程序的编写工作后,接下来将进行软件的测试,这里说的软件,并不单单是指程序本身,还包括其他方面.测试和开发一样,也是一项技术性很强的工作,有着很多的技巧. 软件测试是软件质量保证的主要活动之一,因此,测试的质量直接影响软件的质量.
5.1 测试的定义及目的
软件测试就是在软件投入运行前,对软件的需求分析,设计规格说明和编码的最终复审,是保证软件质量的关键步骤.如果要给软件测试下定义,可以这样将,软件测试是为了发现错误而执行程序的过程.
测试的目的在于将软件设计时设计者与程序开发者之间理解不一致的地方,功能与需求不一致的地方,不符合逻辑思维的情况都反映给质量控制部门,由质量控制部门调配需求部门统一作出一个明确解答,再由开发人员进行修改和补充.
测试的目标是以最少的时间和人力找出软件中潜在的各种错误和缺陷.
5.2 测试的原则
对于相对复杂的产品或系统来说,Zero-Bug是一种理想,Good-Enough是我们的原则.Good-Enough原则就是一种权衡投入/产出比的原则;不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现.我们操作的困难在于,如何界定什么样的测试是不充分的,什么样的测试是过分的.目前状况唯一可用的答案是:制定最低通过标准和测试内容,然后具体问题具体分析.
5.3 测试的方法
依据前面所说的测试对象,我们把测试划分为几个方面来进行测试.
5.3.1 界面测试
界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要求核对就行了.可这快往往是程序开发人员容易忽视和遗漏的地方,也是常常出Bug的地方.下面是界面测试中经常出现的几种Bug:
① 错别字,即界面中的标题或者文本内容中出现了错别字.这种Bug如果测试人员不细心,和难找出来,可能会出现在提示信息或界面中.
② 出现了一些根本读不懂的内容,一般多出现在程序的提示信息和一些较长的文本中.这种情况基本上出现在拼起来显示的提示中,页面的简单陈述是通过变量拼组起来的,通过程序将字一个一个地输出出来.通常是因为程序中的控制错误或是程序开发人员对程序没有进行认真的自测,导致出现这种Bug.
③ 程序员自创的词语,,虽然意思对,但不符合界面的标准及需求.这种情况基本上是由于开发人员使用一些专业术语,并且混杂着自己的理解出现Bug,主要是由于开发过程中团队合作没又明确的分工,没有统一的规范用语.
④ 页面类似的内容中,明显有字体,字号不同的情况,使界面整体风格看上去不一致,这种情况只出现在没有CSS定义的情况下,或是已经定义的CSS,开发人员在开发过程中没有调用.
⑤ 标题相近的程序及模块,把标题弄混.这种情况多是因为业务方面的定义名称很相似或很类似,并且业务实体方面也很类似,开发人员在开发过程中忽略了开发名称和模块,只单独地实现其功能.
5.3.2 功能测试
顾名思义,功能测试主要是测试程序模块是否实现了设计中所有要求的功能.功能测试中需要注意的有:
① 查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的,这里要注意多个查询条件之间的关系,还有一些常识性的问题,比如按月查询,闰年中二月的天数.
② 录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台与后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因.还有就是必须录入的字段的设置是否有误.
③ 测试删除功能中需要注意的是单击”删除”按钮后,一般会出现提示信息,询问是否确定删除.通常情况下,我们单击”确认”按钮查看信息是否被删除掉了,而忽略了单击”取消”按钮后程序的反应,这时有可能的是没有删除,还有一种可能是即便单击了”取消”按钮,也一样删除了数据.另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除了,即如果再按照这种查询方式查询,是否还能查询出来.有的时候需要在数据库中设一个标志位,而不是真正的物理删除.所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志位考虑在内.
④ 关于修改功能的测试,主要是看修改确认后是否数据真正已被修改了.这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了.
5.3.3 需求测试
针对需求测试,是测试中很重要的一个环节.因为需求是在软件设计,开发乃至软件测试中重要的依据.要针对需求测试,首先就要对项目的需求和业务有一定的了解.这些需求很多时候是在实现增,删,查,改这些基本功能之上,针对项目和相关业务所作的一些逻辑上的控制.这就要求程序员在设计和编码的时候要去充分理解考虑需求.
5.3.4 性能测试
性能测试在软件的质量保证中起着重要的作用..通常我们把性能指标全部归结到硬件,操作系统和开发环境上,而忽略了代码本身性能上的考虑.性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性.
5.4 测试中其他要注意的地方
· 时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作.其主要原因是,模块相互调用时接口会引入许多新问题.这就要求在进行程序设计和编码的时候要尽可能地从整体考虑.
· 引用某些控件,实现了程序中未实现的功能的同时,也容易引发新的Bug.
· 错误本身出现在程序设计阶段,并非由于程序员编码造成的问题.这就要求我们无论是在开发还是测试阶段,对需求或程序设计存在疑问,应及时提出,及时解决.
· 由于一些模块被修改了,对其他模块造成了影响而出现了新的Bug.发现这些Bug要求我们对程序整体的结构有基本的了解,清楚模块之间的一些联系.
5.5 沈阳长红机械有限公司网站的测试
在完成编码的工作以后,根据以上的方法和步骤进行了如下的测试:
· 界面测试:在不开启Web服务器的情况下,反复点击网页上的超链接,测试其连接情况,直到所有的链接都达到预期的效果.
· 功能测试:对网站的几大功能模块逐一测试,尽最大可能发现起潜在的错误,比如邮箱的格式,电话号码是否全为数字.
· 性能测试:将程序以局域网的形式发布,查看其是否满足多用户的要求.
· 需求测试:根据需求分析的内容,测试网站是否和当初的设计一样.
通过这几方面的测试,我及时修正了系统中存在的问题,很好的提高了系统的性能,达到了预期目标。
JSP企业网站建设
总结
经过两个月艰苦卓绝的努力,总于完成了本毕业设计.从当初领到题目到最后一个功能模块的完成,经历了无数次的错误->修改代码->重启服务器->运行的过程,感觉到平时学的知识是多么的浅薄,书到用时方恨少,现在是体验的真真切切.本来已经耳熟能详的代码,一到IDE中书写,却提笔忘字,这充分的反应了我平时的基本功不扎实,常用代码的不熟练.给我以后的工作敲响了警钟,有了努力的方向.
但通过本次毕业设计,我也感受到了开源的方便,遇到什么问题,上网一查,就知道该怎么弄了,以前做个课程设计都是怕别人和我的一样,不愿意给别人看,现在知道了程序弄不出来是多么的着急,学习都是相互的,互相研究才能共同进步的.以后要多多注意这方面的事情,
本次毕业设计是我工作前一次很好的演练和实践的机会,是培养独立思考问题和自学能力的锻炼,使我意识到必须努力学习才能才工作中体现自己的价值,适应社会的需要.
致谢
经过了三个月的努力,我使用Struts,Hibernate,JDBC等Jsp相关技术在Eclipse+Myeclipse+Lomboz的IDE环境下,我完成了题目为:沈阳长红机械有限公司网站的毕业设计.
本次设计能够顺利完成,我首先要感谢著名的Java的开源组织--apache,是他们提供了一些诸如Struts,TOMCAT等非常好用的Java开源项目,才使得Java的Web开发变得如此的简单,也让我深深体会到开源的好处.
其次,我要感谢我的指导老师,她自始自终都给予了我莫大的帮助,对的设计中每一个计划,每一项安排都提出了至关重要的建议,使我少走了许多弯路,节省了大量的时间,并且能不厌其烦地指导我技术上的问题,使我的系统更加完善和符合企业网站的要求. 可以说,我的毕业设计的顺利完成凝聚着导师的大量心血.
另外,我还要感谢那些网上的朋友,他们毫不吝啬的将自己所掌握的知识拿出来资源共享,才使我部分功能模块得以实现,谢谢他们.
通过这次毕业设计,我体会很多,学会是一回事,会用则就是另一回事了.以前感到自己专业技能还可以,但真正到用的时候就发现了很多缺陷,发现自己其实差距很大,还不能适应工作.为我今后指明了努力方向.
再一次,我向多方面支持和帮助过我的人表示由衷的感谢!
参考文献
[1] 刘洋 编著,精通Hibernate,电子工业出版社,2005年5月
[2] 史济民 顾春滑 编著,软件工程――原理、方法与应用,高等教育出版社,2002年12月
[3] 张桂元,贾燕枫 编著,Eclipse开发入门与项目实践,人民邮电出版,2006年1月
[4] 张桂元,贾燕枫 编著,Struts开发入门与项目实践,人民邮电出版社,2005年8月
[5] 孙卫琴 编著 精通Struts:基于MVC的Java Web设计与开发,电子工业出版社,2004年8月
[6] 鲁晓东 编著 JSP软件工程案例精解,电子工业出版社,2005年4月
[7] 丁鹏 编著 STRUTS技术解密及WEB开发实例,清华大学出版社,2004年3月
[8] 夏昕 编著 深入浅出Hibernate,电子工业出版社,2005年6月
[9] 孙卫琴 编著 精通Hibernate:Java对象持久化技术详解,电子工业出版社,2005年1月
[10] SUN 编著 JavaTM 2 SDK, Standard Edition Documentation,2003年6月