2012-07-01 10 views
45

ho fatto un plugin RCP con incorporato Jetty come segue:Eclipse RCP plug + incorporato Jetty + JSF

1) In plugin.xml -> Dipendenze, ho aggiunto il seguente:

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

2) In plugin.xml -> estensioni, ho aggiunto un punto di estensione Servlet (org.eclipse.equinox.http.registry.servlet)

class: TemperatureServlet 
alias:/temperature 

Il Te mperatureServlet assomiglia a questo:

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"); 
    } 
} 

Il file Convertor.jsp assomiglia a questo:

<%@ 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> 

Il file faces-config.xml contiene:

<?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> 

mio plugin ha la seguente gerarchia:

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 

In Attivatore classe, metodo iniziare(), ho avviato il server web come questo:

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(); 
     } 
    } 

Per questo plugin ho aggiunto anche le seguenti librerie:

  • JSTL: javax.servlet.jsp.jstl-1.2.1-javadoc.jar; javax.servlet.jsp.jstl-api-1.2.1-javadoc.jar
  • JSF 2.0 (Apache MyFaces JSF core-2.0 API 2.0.2)

Dopo che ho avviare l'applicazione, se di tipo I nel mio browser localhost: 8080/temperatura

Non sa dove trovare Convertor.jsp. La mia domanda è: come posso configurare questo plug-in per conoscere la posizione della risorsa WebContent e il più importante, come posso configurare il plugin per sapere come elaborare JSF e per sapere di faces-config.xml e web.xml.

Posso, ad esempio, quando definisco l'estensione org.eclipse.equinox.http.registry.servlets, fare qualcosa del genere? classe: javax.faces.webapp.FacesServlet Alis: /*.jsp

(tutti i file * .jsp per essere elaborati dal FacesServlet)?

Grazie mille e scusa se le domande sono sciocche, ma sono nuovo in questa area di plugin RCP, Jetty e JSF.

+3

Immagino che tu abbia già risolto questo problema altrimenti non avresti fatto nuove domande su JSF e tutto quel materiale . Inoltre, se usi JSF 2, dovresti passare a Facelets. Ti consiglierò di leggere [Quali sono le differenze tra JSP e Facelets?] (Http://stackoverflow.com/a/2197189/1065197), [Qual è la differenza tra JSF, Servlet e JSP?] (Http: //stackoverflow.com/a/2097732/1065197) e i collegamenti lì. Non prenderlo come sono contro di te, invece non ho la risposta esatta per la tua domanda, ma solo fornendo una guida per un percorso migliore. –

+0

Inoltre, se hai la risposta a una qualsiasi delle tue domande, puoi rispondere (e accettarle) per aiutare altre persone in questa guida. –

+0

Grazie mille per il tuo consiglio! Hai indovinato. Ho risolto il problema, ma non ho avuto il tempo di scrivere una risposta adeguata per questo. Ma presto tornerò con la risposta. – wallE

risposta

1

Dai uno sguardo allo setting a context in jetty. Puoi definirlo prima di avviare il tuo server.

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

Una classe JSP Extension Factory in org.eclipse.equinox.jsp.jasper.registro fornisce supporto JSP da utilizzare in combinazione con il punto di estensione servlet.

JSPFactory può essere utilizzato insieme a org.eclipse.equinox.http.registry e al punto di estensione di Servlet per consentire l'uso di JSP in modo dichiarativo con il registro di estensione.

JSPFactory accetterà un parametro "percorso" corrispondente al percorso di base nel pacchetto per cercare le risorse JSP. Questo parametro può essere impostato utilizzando l'approccio separatore ":" o il parametro xml.

ad es. class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" o