java servlet新人问题 求助

来源:百度知道 编辑:UC知道 时间:2024/05/05 19:22:08
import .....
public class FirstDBServlet extends HttpServlet {
private String url;
private String user;
private String password;

public void init() {
String driverclass = getInitParameter("driverClass");
url = getInitParameter("url");
password = getInitParameter("password");
Class.forName(driverClass);
}

pulic void doGet(HttpServletRequest req, HttpServletResponse resp) {
Connection conn = null;
Statement stmet = null;
conn = DriverManager.getConnection.getConnection(url, user, password);
.....
}
}

请问,这段例子代码中,为何不将conn定义成成员变量,然后再init()里使用conn = DriverManager.getConnection.getConnection(url, user, password);
这样,不用每个用户来访问这个servlet时都去重复构建conn了。
孙鑫老师的例子中,这样写,原因是何?
http://zhidao.baidu.com/question/78694019.html

这个问题你要是理解了servlet生命周期的问题你就明白了。servlet从始至终
有且只有一个对象,它只在第一次request请求发生的时候被初始化,并且只一遍 。初始化调用init方法只一遍 。每产生一个请求调用一遍service方法 然后service再去调用受保护的service方法,它再去调用doGet/doPost。 以多线程的方式运行。最终卸载前调用destroy方法。

之所以不要在servlet中设计成员变量。就因为他至始至终只有一个对象。所以为了避免各自的连接不被别人的请求改变或者关闭所以要各自请求拥有自己的一份连接。这么讲应该明白了吧!

才子_辉祝您愉快!

道理讲的够清楚的了吧?是你没明白吧?没说一定不能用,只是不赞成去那么用,那样很不合理。你非要用就用好了,明知山有虎偏向虎山行。以前年代有人说你傻,这年头算你有个性!