JSP的调试工具

大部分商业集成化开发环境(IDES)都提供某种调试器使你可以步进执行一个Java类,检验并可能改变变量的取值。JDK包含一个命令行调试器名为jdb,它或多或少地执行以上功能。这些工具可能会有用,但用于调试JSP代码时有一些弊端。

首先,JSP页面与其等价的字节代码并不存在紧密的映射关系。它们可能由scriptlet、伪指令、表达式、HTML和定制标签组成。如果对按行进行跟踪有兴趣,就需要使用生成的servlet源码,而不是.jsp文件惊醒调试。

另外,JSP类被载入并运行于由可能链接到web服务器的servlet引擎控制的单独的虚拟机中。为了调试单独的类,必须以调试模式启动整个servlet引擎。需要验证所有同样的类路径入口都是激活的并使用相同的端口等等。你甚至可以指出其执行方式。这使得调试环境与真正的运行时环境有很大差别。还有,在两种环境之间微小的差异可能会导致出现与正在被调试的问题无关的超时和竞争条件。

捕获窗体参数

当使用HTML窗体发送请求参数到一个JSP或servlet时,明显需要测试的是能够知道其发送的参数及其取值。这通常是不明显的。如果一个SELECT元素允许多个选择,那么请求参数值是什么?发现以上取值的一种容易方式是使用捕获请求参数并作为表格形式的名字/取值对显示它们调试的JSP页面。

从请求对象中取得所有参数名,然后循环列表并打印每一参数的名字和取值。唯一难的是参数可能有多个取值。例如,检查框组可以有同样的名字但却有不同的value属性。Servlet API考虑了这一点,提供了请求对象中的getParameterValues()方法返回一个取值组。

使用JDBC连接后台数据库

当我们的JSP程序获取数据库的数据时,是无法直接进行存取的,因为后台数据库并无法明白JSP命令的意义。所以,当我们要存取后台数据库时必通过一个标准接口来存取,那就是JDBC。所以,JDBC可以说是JSP程序与后台数据库的一个沟通管道。基本上,JDBC也可以说是一种API,它主要的功能:1、建立与后台数据库的连接。2、向后台数据库传送SQL程序处理。3、将查询的结果传回JSP程序处理。

由于JDBC是由Java语言所开发而成的,所以具有跨平台的特性。程序开发人员只要专注于程序的开发及SQL语句的撰写,即可通过JDBC这个标准接口来存取后台数据的数据。但是,要与它连接的数据库需具备有相对应的JDBC驱动程序,否则是无法连接的。

通过web存取数据库

信息爆炸的时代,在许多时候,我们不但利用数据库保存大量的信息,更会利用网际网络来散布这些有用的信息,和数据库相连的web网站在网际网络上大受欢迎,如国内著名的人力资源网站,提供在线数据库让许多求职者在网站上登录自己的履历数据,也可以让许多公司在网站内的履历数据库中寻找合适的人才,这使得求职者和求才者形成一个非常良好的互动关系。

存取架构仍是遵循传统的client/server架构。在服务器端由web服务器和数据库服务器所组成,而client端只需要一个支持Java的浏览器即可。服务器端的web服务器负责执行JSP程序,我们在JSP程序中通过JDBC的处理机制来和数据库服务器相连,并取数据库中的数据,当让我们也可以通过JDBC向数据库下达SQL命令,对数据库进行新增、删除和修改记录等操作,这一切都靠JDBC提供的类与方法来达成。Web服务器还有一个工作,便是将我们操作数据库的结果,以HTML的形式通过HTTP协议,回传给前端的浏览器。在这整个存取架构中,最重要的部分就JDBC,没有JDBC,我们的JSP程序根本没有办法和数据库相连。

面向对象的编程方法

现在,面向对象的编程方法早已经成为编程的主流,那么究竟怎么理解面向对象这个概念呢? 小编带大家一起来了解一下!!

1、万物皆对象。将对象想成一种特殊的变量;它存储数据,而且还可以让你提要求,命令它进行某些操作。从理论上讲,你可以把所有待解决的问题中的概念性组件都表示成程序里的对象。

2、程序就是一组相互之间传递消息,告诉对象该干些什么的对象。你只要向那个对象发一个消息,就能向它提出要求。更确切的说,你可以这样认为,消息是调用专属某个对象的方法的请求。

3、每个对象都利用别的对象来组件它自己的记忆。换言之,你通过将已有的对象打成一个包,来创建新的对象。由此,你可以将程序的复杂性,隐藏在对象的简单性之下。

网站建设编码中复用实现

一旦类创建完成并且测试通过之后,它就应该能(很好地)表示一段有用的代码。但实际上代码复用并不像我们希望的那样容易;要设计一个复用性良好的对象,需要经验和远见。代码复用是OOP语言最显著的优点之一。

复用代码最简单的方式是直接用这个类来创建对象,但是你也可以将那个类的对象放到一个新的类中。我们把它称为创建一个成员对象。为了能让那个新的类提供你所设计的功能,它可以由任意多个,任意类型的对象,以任意形式组合在一起。由于你是用已有的类来合成新的类,因此这一概念被称为合成。通常将合成称为“有”关系,就像“轿车有引擎”。

继承复用接口

当你继承了一个类时,你也创建了一个新的类。这个新的类不仅包含了已有类的所有成员(尽管private成员已经隐藏起来了,是不能访问的),更重要的是它复制了基类的接口。于是所有能够传给基类的消息也都可以传给派生类。由于我们根据它能接受什么消息来判断这是什么类,因此这就意味着派生类和基类是属于同一类型的。

既然基类和派生类具有相同的基本接口,那么这个接口的背后就必须跟着实现。也就是当对象收到某个消息的时候,它必须能执行一些代码。如果你只是继承了一个类,其他什么都不做,那么基类的方法会直接带进派生类,也就是说派生类的对象与基类的对象的类型相同而且行为也一样,这可就没有什么吸引力了。

用继承来进行设计

一旦理解了多态性,你就会觉得所有东西应该都是继承下来的,因为多态性实在是太聪明了。但是这样做会加重设计的负担;实际上,如果你一遇到“要用已有的类来创建新类”的情况就想到要用继承的话,事情就会毫无必要地变得复杂起来了。

较好的办法还是先考虑合成,特别是当你不知道该继承那个类的时候。合成并不强求你把设计搞成一个类系。此外它还更灵活,因为使用合成的时候,你可以动态地选择成员的类型(以及它们的行为)而使用继承的话,就得在编译时指明对象的确切类型。

但是程序运行时函数的reference可以连到另一个对象上,因为可以用其它对象来替换它,于是构造函数的行为就发生了变化。这样你就在运行时获得了高度的灵活性。这也被称为状态模式。反观继承,它不能让你在运行时继承不同的类;这个问题在编译的时候就已经定下来了。

本地内部类

你也可以在代码段里,通常就是方法的正文部分创建内部类。本地内部类不能有访问控制符,因为它不属于宿主类,但是它确实可以访问当前代码段的final变量,以及宿主类的所有成员。一个程序分别用本地内部类和匿名内部类实现了这个接口,两者有着相同的行为和功能。由于本地内部类的名字在这个方法外面是没法访问的,因此用本地内部类来代替匿名内部类的唯一正当的理由就是,你需要一个有名字的构造函数,并且/或者要重载这个构造函数,因为匿名内部类只能进行实例初始化。选择本地内部类而不是匿名内部类的唯一原因就是,你必须创建多个哪种类的对象。

Java接口(interface)的应用

Interface关键词进一步强化了abstract的概念。你可以把它想象成纯的abstract类。它能让开发人员定义类的形式:方法,参数列表,返回值的类型,但是却没有方法的正文。Interface也可以包含数据成员,但是它天生就是static和final的。Interface只提供形式,不谈实现。

Interface的意思是“所有实现这个接口的类都应该长这个样子”。因此任何程序,只要用到了这个interface就都知道它有哪些方法可提供调用了,仅此而已。因此,interface会被用做定义类之间的协议。