在您看到的用于servlet-context.xml
在 Spring MVC Web 应用程序中配置的所有示例中,所需的任何数据源都在此文件中配置为 bean,可能使用容器中定义的连接池。例如,在我servlet-context.xml
的 for my中,org.springframework.web.servlet.DispatcherServlet
我初始化了我的数据源:
<jee:jndi-lookup id="dataSource"
jndi-name="java:comp/env/jdbc/ora1"
expected-type="javax.sql.DataSource"
resource-ref="true" />
如果在数据库由于某种原因关闭的情况下,Web 应用程序在初始化阶段出错并将 Java 堆栈跟踪的一码半抛出到浏览器中,如下所示:
javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1214) at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:615)
... 等等。
我有两个问题:
- 是否可以捕获此错误并显示对用户更友好的内容?我个人对此表示怀疑,因为 servlet 无法超越这个
init()
阶段。 在 servlet 上下文中初始化数据源并在需要连接时从 @Controller 动态执行是否有效?与更传统的方法一样,例如:
public static DataSource getJndiDataSource() throws NamingException { Context initialContext = new InitialContext(); DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1"); return ds; }
感谢您的任何回复!