请教:jsp声明<%! %>的方法里可不可以连接数据库?

BigKing 2005-12-14 10:31:44
我在jsp<%! %>声明的方法里写了一个方法,在这个方法里连接了数据库,但是有了这个方法这个页面就打不开,始终是连接等待中,我把这个方法去掉就可以打开该页面,我把这个方法中的连接数据库的语句放到<% %>中就可以!为什么?
请大家帮帮忙!
...全文
285 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigKing 2005-12-15
  • 打赏
  • 举报
回复
终于知道了,<% %>中定义的是本地变量是不能在<%! %>中定义的方法中使用的!我想这才是问题最终的答案!
BigKing 2005-12-15
  • 打赏
  • 举报
回复
QWERT520(别来无恙) 谢谢了,
按你说的那样确实可以,但是为什么申明在别的地方就不行了呢,是不是<%! %>中定义的方法不能引用在别的地方如<% %>中定义的变量呢!
zzg5152 2005-12-15
  • 打赏
  • 举报
回复
你把你的联接数据库的方法写到<%! %>之间,在<%! %>里面写的方法是在toGet()之外,也就是说,只要有人调用这个servlet就要执行一次数据库联接,所以你这么写是不对的。
常遇道 2005-12-15
  • 打赏
  • 举报
回复
把conn.jsp的声明干掉
在调用页面声明就可以了
BigKing 2005-12-15
  • 打赏
  • 举报
回复
连接数据的声明我是放在conn.jsp里的呀,下面我不是粘贴了conn.jsp的代码的吗
niko7 2005-12-15
  • 打赏
  • 举报
回复
这样的代码当然编译都通不过!

<%!
String str=null;
String connectdb()
{
String sql1="select * from message where id='1'";

stmt=con.createStatement();//con 没有申明,stmt也还没有申明
rs=stmt.executeQuery(sql1);//rs 也没有申明
while(rs.next())
{
str=rs.getString("topic");

}
rs.close();
stmt.close();
con.close();
return str;
}
%>

那些没有申明的东西你就用参数传进去吧!
String connectdb(。。。。。。。这里传参数!。。。。。。)

还有,不要发重复帖子,除了浪费分数没什么好处。
http://community.csdn.net/Expert/topic/4459/4459852.xml?temp=.1322748

xiongbing528 2005-12-14
  • 打赏
  • 举报
回复
当然可以。但是不实用.还不如直接写数据库的连接.最好把你的代码帖出来让大家看看.
eureka0891 2005-12-14
  • 打赏
  • 举报
回复
可以,不过这么干
不推荐,
这个变量对于所有的用户来说只有一份,

<%!
int i = 0;
%>
然后<%=i++%>会发现每个用户访问时都会不同。

如果把连接放在此处,那么这个连接的存活期是从第一次访问页面到页面重载。
写在这儿,你何时关闭连接?
数据库连接一般是操作时取得一个,用完后马上关闭
blackhost 2005-12-14
  • 打赏
  • 举报
回复
那是你的方法可能有问题。还是查查代码是否有问题。

另外,虽然楼上说servlet和普通的JavaBean没有区别,但是为了维护,还是习惯于用SERVLET作控制调转用,而真正的业务逻辑封装在javabean中。
niko7 2005-12-14
  • 打赏
  • 举报
回复
当然,需要说明的是,在<%! %>里面做过头了就不好了。

jsp被部分人说不好,就是因为jsp很强大,导致很多初学者都走错路:
在jsp里面大做文章,很少写servlet和bean,结果不好维护。

象连接数据库啊,定义类啊,虽然在jsp内部可以做到,但实在不提倡。
niko7 2005-12-14
  • 打赏
  • 举报
回复
<%!
int i = 100;
private String getString()
{
return "Hello!";
}
%>

那么可以
<%
int j = this.i;
String s = this.getString();
%>

在<%! %> 中不但可以申明成员变量,还可以申明成员方法,也可以定义内部类!
记住,jsp是servlet,而servlet和普通的JavaBean没有区别!
zcjl 2005-12-14
  • 打赏
  • 举报
回复
可以,但不好的做法
可以把这些使用Javabean封装,然后在jsp中调用(如果没有使用什么框架的话)
eidolon_warrior 2005-12-14
  • 打赏
  • 举报
回复
<% %>写方法不是很好吗,连数据库当然没问题
<%! %>就不行了吧
niko7 2005-12-14
  • 打赏
  • 举报
回复
当然可以!

不过你要注意:那里是申明成员变量和成员方法的地方。

其实你写在 <%%>里的和<%%>外的 代码,都被自动编译到
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException
方法中。

而写在 <%! %> 中的东西则不在上面的方法中。

把连接数据库需要的信息用参数的方法传进去,一样好用。
funcreal 2005-12-14
  • 打赏
  • 举报
回复
代码贴上来。
climb011358 2005-12-14
  • 打赏
  • 举报
回复
简单点:<%! %>这里是方法的声明;<%%>这里是方法的执行
sdliubo 2005-12-14
  • 打赏
  • 举报
回复
在JSP程序中声明合法的变量和方法

JSP 语法
<%! declaration; [ declaration; ]+ ... %>
例子
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
描述
声明你将要在JSP程序中用到的变量和方法。你也必须这样做,不然会出错.

你可以一次性声明多个变量和方法,只要以";"结尾就行,当然这些声明在Java中要是合法的。

当你声明方法或变量时,请注意以下的一些规则:

声明必须以";"结尾(Scriptlet有同样的规则,但是 表达式就不同了).
你可以直接使用在<% @ page %>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明.
一个声明仅在一个页面中有效。如果你想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@ include %>或<jsp:include >元素包含进来。
xlyyc 2005-12-14
  • 打赏
  • 举报
回复
不可以,这个里面仅仅能对变量进行声明
huangdeji 2005-12-14
  • 打赏
  • 举报
回复
呵呵,不懂
BigKing 2005-12-14
  • 打赏
  • 举报
回复
大家帮帮忙呀!我搞了半天还是没搞懂为什么!
加载更多回复(2)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧