2012-07-01 2 views
45

Я сделал RCP плагин со встроенным Jetty следующим образом:Eclipse RCP плагин + встроенные Jetty + JSF

1) В plugin.xml -> Зависимости, я добавил следующее:

org.eclipse.equinox.http.jetty 
org.eclipse.equinox.http.registry 
org.mortbay.jetty.server 
javax.servlet 

2) В plugin.xml -> Расширения, я добавил точку расширения сервлетов (org.eclipse.equinox.http.registry.servlet)

class: TemperatureServlet 
alias:/temperature 

Te mperatureServlet выглядит следующим образом:

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TemperatureServlet extends HttpServlet { 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

     System.out.println("doGet Called"); 

     resp.sendRedirect("Convertor.jsp"); 
    } 
} 

Файл Convertor.jsp выглядит следующим образом:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<f:view> 
<h:form> 
     <h:panelGrid columns="2"> 
      <h:outputLabel value="Celsius"></h:outputLabel> 
      <h:inputText value="#{temperatureConvertor.celsius}"></h:inputText> 
     </h:panelGrid> 
     <h:commandButton action="#{temperatureConvertor.celsiusToFahrenheit}" value="Calculate"></h:commandButton> 
     <h:commandButton action="#{temperatureConvertor.reset}" value="Reset"></h:commandButton> 
     <h:messages layout="table"></h:messages> 
    </h:form> 


    <h:panelGroup rendered="#{temperatureConvertor.initial!=true}"> 
    <h3> Result </h3> 
    <h:outputLabel value="Fahrenheit "></h:outputLabel> 
    <h:outputLabel value="#{temperatureConvertor.fahrenheit}"></h:outputLabel> 
    </h:panelGroup> 
</f:view> 
</body> 
</html> 

Файл лица-config.xml содержит:

<?xml version="1.0" encoding="UTF-8"?> 

<faces-config 
xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <managed-bean> 
     <managed-bean-name>temperatureConvertor</managed-bean-name> 
     <managed-bean-class>hellojsf.TemperatureConvertor</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 

</faces-config> 

Мой плагин следующая иерархия:

plugin-name 
---src 
------class package 
---------Activator.java 
---------Application.java 
---------ApplicationActionBarAdvisor.java 
---------ApplicationWorkbenchWindowAdvisor.java 
---------Perspective.java 
---------TemperatureConvertor.java 
---------TemperatureServlet.java 
---META-INF 
------MANIFEST.MF 
---resources 
-------WebContent 
----------WEB-INF 
-------------faces-config.xml 
-------------web.xml 
----------Convertor.jsp 
---plugin.xml 

В Активатор класс, метод начать(), я начал веб-сервер, как это:

public void start(BundleContext context) throws Exception { 
     super.start(context); 
     plugin = this; 

     Bundle bundle = Platform.getBundle("org.eclipse.equinox.http.registry"); 
     if (bundle.getState() == Bundle.RESOLVED) { 
      bundle.start(Bundle.START_TRANSIENT); 
     } 

     Dictionary settings = new Hashtable(); 
     settings.put("http.enabled", Boolean.TRUE); 
     settings.put("http.port", 8080); 
     settings.put("http.host", "0.0.0.0"); 
     settings.put("https.enabled", Boolean.FALSE); 
     settings.put("context.path", "/"); 
     settings.put("context.sessioninactiveinterval", 1800); 

     try { 
      JettyConfigurator.startServer(PLUGIN_ID + ".jetty", settings); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

К этим плагином я добавил также следующие библиотеки:

  • JSTL: javax.servlet.jsp.jstl-1.2.1-javadoc.jar; javax.servlet.jsp.jstl-апи-1.2.1-javadoc.jar
  • JSF 2.0 (Apache MyFaces JSF Core-2.0 API-2.0.2)

После того как я запустить приложение, если я типа в моем браузере localhost: 8080/temperature

Он не знает, где найти Convertor.jsp. Мой вопрос: как я могу настроить этот плагин, чтобы узнать местоположение ресурса WebContent и самое главное, как я могу настроить плагин, чтобы знать, как обрабатывать JSF и знать о файлах faces-config.xml и web.xml.

Могу ли я, например, когда я определяю расширение org.eclipse.equinox.http.registry.servlets, что-то вроде этого? класс: javax.faces.webapp.FacesServlet Alis: /*.jsp

(все файлы * .jsp быть обработаны FacesServlet)?

Спасибо вам большое и извините, если вопросы глупы, но я новичок в этой области плагинов RCP, Jetty и JSF.

+3

Я думаю, вы уже решили эту проблему, иначе вы бы не задавали новых вопросов о JSF и всех этих вещах , Кроме того, если вы используете JSF 2, вам следует перейти к Facelets. Я рекомендую вам прочитать [Каковы различия между JSP и Facelets?] (Http://stackoverflow.com/a/2197189/1065197), [В чем разница между JSF, Servlet и JSP?] (Http: //stackoverflow.com/a/2097732/1065197) и ссылки там. Не принимайте это так, как я против вас, вместо этого у меня нет точного ответа на ваш вопрос, а просто дается некоторое руководство к лучшему пути. –

+0

Кроме того, если у вас есть ответ на любой из ваших вопросов, вы можете ответить (и принять), чтобы помочь другим людям в этом руководстве. –

+0

Большое вам спасибо за советы! Вы хорошо это догадались. Я решил проблему, но у меня не было времени написать для нее правильный ответ. Но скоро я вернусь с ответом. – wallE

ответ

1

Посмотрите на setting a context in jetty. Вы можете определить его перед запуском своего сервера.

public class OneWebApp 
{ 
    public static void main(String[] args) throws Exception 
    { 
     String jetty_home = System.getProperty("jetty.home",".."); 

     Server server = new Server(8080); 

     WebAppContext webapp = new WebAppContext(); 
     webapp.setContextPath("/"); 
     webapp.setWar(jetty_home+"/webapps/test.war"); 
     server.setHandler(webapp); 

     server.start(); 
     server.join(); 
    } 
} 
1

JSP Extension Factory класс в org.eclipse.equinox.jsp.jasper.реестр предоставляет поддержку JSP для использования в сочетании с точкой расширения сервлетов.

JSPFactory может использоваться совместно с org.eclipse.equinox.http.registry и точкой расширения Servlets, чтобы разрешить использование JSP декларативно с реестром расширений.

JSPFactory примет параметр «путь», соответствующий базовому пути в пакете, для поиска ресурсов JSP. Этот параметр можно установить с помощью подхода разделителя «:» или с помощью параметра xml.

например. class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" или