Я использую SQLite в качестве базы данных, и меня немного смущает, как я могу настроить путь к нему.По сути, у меня есть статическая строка в одном из моих классов (которая после инициализации превращается в нечто подобное):
private static String DATABASE = "db/my.db";
Папка db
расположена непосредственно под WebContent
, поэтому, чтобы получитьдоступ к нему, мне нужно использовать метод ServletContext
getRealPath
.Чтобы использовать это, мне нужен доступ к сервлету, и, поскольку я не уверен, какой сервлет будет вызываться первым, мне нужно выполнить проверку всех моих запросов, чтобы увидеть, установлена ли база данных, иесли это не так, то установите его.Я думаю, что должен быть лучший способ сделать это.На данный момент я создал абстрактный класс, который наследуется от HttpServlet, добавляет 2 метода, getImpl
и postImpl
(оба абстрактных), и мои doGet
и doPost
в настоящее время реализованы следующим образом:
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")
);
}
}
То, как я сейчас что-то делаю, не так.Конечно, должен быть лучший способ.