2012-03-18 42 views
0

我明白,为了编写线程安全的servlet,最简单的事情之一是在本地声明所有变量。如何在Servlet中的doGet和doPost方法之间传递局部变量?

当我的程序调用doPost时,它创建一个数据库的实例,我们称之为db。我想将该实例传递给doGet方法,但安全无需全局声明数据库。有什么办法可以做到吗?

+0

为什么要从doPost()调用doGet()? – Wolfgang 2012-03-18 17:40:56

+0

我不会从doPost()中调用它我想实例化数据库一次并在程序中使用该实例。 – moon4e 2012-05-21 16:04:23

+0

你说你不想声明它是“全局的”(Java中没有这样的东西,这是一个C术语),但是你想要某种单例 - 这听起来像是对我的一个矛盾。 – Wolfgang 2012-05-23 11:02:50

回答

1

我会建议您使用一个类变量,它引用一个DataSource对象,从中可以在doGet或doPost方法中获得新的数据库连接。这是一种踏面安全的方式。

但对你的代码更好的可维护性,你应该阅读有关JPA

1

正如你可能知道,的doGet()和doPost()被称为在不同情况下(当浏览器或HTTP客户端执行GET或POST HTTP请求,分别)。

听起来好像您的应用程序在这两个请求之间具有共同的功能。我的建议是,将doGet()和doPost()可以调用的servlet中的共享功能抽象为另一个方法(或多个方法)。

替代地,如果所有功能是共享的,则可以实现该服务()方法,它servlet容器将要求所有请求类型(代替的doGet()或doPost())。

相关问题