gpt4 book ai didi

java - 为我的 servlet 使用配置 sqlite 数据库路径的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 04:01:48 25 4
gpt4 key购买 nike

我使用 SQLite 作为我的数据库,我对如何配置它的路径有点困惑。基本上,我的一个类中有一个静态字符串(初始化后变成这样的东西):

private static String DATABASE = "db/my.db";

文件夹 db 直接位于 WebContent 下,因此,要访问它,我需要使用 ServletContextgetRealPath 方法。要使用它,我需要访问一个 servlet,并且由于我不确定哪个 servlet 将是第一个被调用的,我需要检查我的所有请求以查看是否已设置数据库,并且如果还没有,则设置它。我认为应该有更好的方法来做到这一点。目前,我创建了一个继承自 HttpServlet 的抽象类,添加了 2 个方法,一个 getImpl 和一个 postImpl (都是抽象的),还有我的 doGetdoPost 目前是这样实现的:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
App.checkDatabase(this);
try {
getImpl(request,response);
} catch(Exception e) {
throw new RuntimeException(e);
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
App.checkDatabase(this);
try {
postImpl(request,response);
} catch(Exception e) {
throw new RuntimeException(e);
}

我的checkDatabase方法是这样实现的:

public static void checkDatabase(HttpServlet servlet)
{
if(App.DATABASE == null) {
App.DATABASE = "jdbc:sqlite:"+servlet.getServletContext().getRealPath(
servlet.getServletContext().getInitParameter("DATABASE")
);
}
}

我现在做事的方式感觉不对。肯定有更好的方法。

最佳答案

您想使用 ServletContextListener Hook webapp 的启动并初始化应用程序范围的参数。这是一个启动示例,假设您确实已将路径定义为 <context-param><context-name>DATABASE :

public class Config implements ServletContextListener {

public void contextInitialized(ServletContextEvent event) {
String database = event.getServletContext().getInitParameter("DATABASE");
// ...
}

// ...

}

然后您将其映射到 web.xml 中如下:

<listener>
<listener-class>com.example.Config</listener-class>
</listener>

如有必要,您可以将上下文变量存储在 ServletContext 中这样任何 servlet 都可以依次访问它。

event.getServletContext().setAttribute("database", database);

...

Database database = (Database) getServletContext().getAttribute("database");

正如 Pascal 在他的回答中暗示的那样,您希望为此在每个 JNDI 下使用。在这种情况下,您可以将 JNDI 名称存储为 <context-param>并获取/初始化 DataSource (间接地)在 ServletContextListener那样。

有关更多提示,您可以找到 this basic example有用。

关于java - 为我的 servlet 使用配置 sqlite 数据库路径的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2999376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com