当我用<%
编写代码时,可以使用javax.naming
,但是当我用<%!
编写代码时,我得到一个错误,即javax.naming
不存在。
一些例子:
<% Javax.naming.InitialContext ic = new Javax.naming.InitialContext(); %> fine
<%! void foo() { Javax.naming.InitialContext ic2 = new Javax.naming.InitialContext(); } %> error
确切的错误:
rptCountsRecon_jsp.java:22: package Javax.naming does not exist
Javax.naming.Context init = new Javax.naming.InitialContext();
我对Java有点陌生,对JSP也很陌生。
编辑:将foo方法添加到第二个示例,因为它可能有助于理解我的问题。还添加了来自Tomcat的确切错误。
编辑2:尝试将前缀添加到上下文,并得到类似的错误。
编辑3:侧面问题...当前代码给出以下错误:
try
{
javax.naming.Context init = new javax.naming.InitialContext();
Context ctx = (Context) init.lookup("java:comp/env");
String jndiName = getServletContext().getInitParameter("jndiName");
DataSource ds = (DataSource) ctx.lookup(jndiName);
Connection dbConn = ds.getConnection();
PreparedStatement pstmnt = dbConn.prepareStatement(sql);
for(int i=0; i!=binds.size(); ++i)
pstmnt.setString(i+1, binds.elementAt(i)); //binds index starts at 1 -_-
return pstmnt.executeQuery();
} catch (Exception e) {
//out.println("A naming exception occured... I don't know how to get the info of it.");
return null;
}
rptCountsRecon_jsp.java:28: unreported exception java.sql.SQLException; must be caught or declared to be thrown
Connection dbConn = ds.getConnection();
最佳答案
首先,这种类型的代码应该在servlet中,而不是JSP中。
声明(<%!
):
<%!
javax.naming.InitialContext ic2 = new javax.naming.InitialContext();
%>
ic2
是成员变量。不能执行ic2 = new javax.naming.InitialContext();
的原因是因为构造函数抛出javax.naming.NamingException
。想象一下,如下所示:
public class JspServlet {
//there is no way to handle that exception here
javax.naming.InitialContext ic2 = new javax.naming.InitialContext();
//...
小脚本(
<%
):<%
javax.naming.InitialContext ic = new javax.naming.InitialContext();
%>
之所以可以在那里(在scriplet中)进行操作,是因为该scriplet中的所有内容都在生成的JSP服务方法的
try
块内。想象一下,如下所示:
public class JspServlet {
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
try {
javax.naming.InitialContext ic = new javax.naming.InitialContext();
} catch (Exception e) {
//...
}
我认为,如果您阅读有关JSP生命周期的更多信息,这将更有意义。
关于java - JSP Java代码说<%!中使用 “javax.naming”不存在!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8761373/