У меня проблема. Я хочу использовать OSGi для веб-сайта. Я довольно новичок в OSGi, но я прочитал основы и хочу использовать фреймворк Equinox. Для этого я прочитал Краткое руководство от http://eclipse.org/equinox/ и купил и прочитал книгу «OSGi и равноденствие - создание высоко модульных систем Java»OSGi в веб-контейнере - запрошенный ресурс недоступен (файл JSP)
Но вернемся к моей проблеме. Я загрузил bridge.war с сайта equinox и createt первым пакетом с сервлетом. Активатор выглядеть следующим образом:
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
httpServiceTracker = new HttpServiceTracker(context);
httpServiceTracker.open();
}
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
httpServiceTracker.close();
httpServiceTracker = null;
}
private class HttpServiceTracker extends ServiceTracker {
public HttpServiceTracker(BundleContext context) {
super(context, HttpService.class.getName(), null);
}
public Object addingService(ServiceReference reference) {
HttpService httpService = (HttpService) context.getService(reference);
try {
httpService.registerServlet("/index", new StartServlet(), null, null); //$NON-NLS-1$
} catch (Exception e) {
e.printStackTrace();
}
return httpService;
}
public void removedService(ServiceReference reference, Object service) {
HttpService httpService = (HttpService) service;
httpService.unregister("/index"); //$NON-NLS-1$
super.removedService(reference, service);
}
}
И мой Servlet выглядеть следующим образом:
защищен недействительным doGet (HttpServletRequest запрос, HttpServletResponse ответ) бросает ServletException, IOException { performTask (запрос, ответ); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
performTask(request, response);
}
private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
RequestDispatcher RequestDispatcherview = request.getRequestDispatcher("test.jsp");
RequestDispatcherview.forward(request, response);
}
СПЯ Файл находится в папке/WebContent/который находится в Bundle. Если я разворачивать сверток в bridge.war и попытаться открыть сайт в браузере, я всегда получаю следующее:
Я не знаю, как я могу настроить мой сервлет или мой Activator, что они найдут файл jsp. Я попытался переместить JSP-файл в bridge.war, но это не помогает мне предотвратить эту проблему.
Я думаю, мне нужно зарегистрировать файл jsp где угодно (возможно, с httpService.registerResources(arg0, arg1, arg2);
), но я не знаю, как я это делаю правильно.
Надеюсь, вы можете мне помочь.
Вы зарегистрировали свой сервлет в контексте «/ index», разве у вас нет «индекса» в вашем URL-адресе? –
Если я открою http: // localhost: 8080/bridge/index, сервлет будет активирован, а в сервлете я попытаюсь отправить запрос на test.jsp, но сервлет не сможет найти файл jsp. – Baalthasarr
Как обстоит дело, разверните веб-приложение в контейнере OSGi. Либо создайте собственную настройку пакетов, либо используйте контейнер OSGi, такой как Apache Karaf. –