2012-07-01 14 views
45

I się wtyczki RCP z wbudowanym molo następujące:Eclipse RCP + wtyczki osadzony Jetty + JSF

1) plugin.xml -> zależne, jakie dodaje się następujące:

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

2) W plugin.xml -> Rozszerzenia, dodałem punkt wewnętrzny Servlet (org.eclipse.equinox.http.registry.servlet)

class: TemperatureServlet 
alias:/temperature 

Te mperatureServlet wygląda następująco:

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

Plik Convertor.jsp wygląda tak:

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

plik faces-config.xml zawiera:

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

Moje plugin ma następująca hierarchia:

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 

W Activator klasie, metoda rozpocząć(), zacząłem serwer WWW tak:

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

do tej wtyczki Dodałem również następujące biblioteki:

  • 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 rdzeń-2,0 API 2.0.2)

Po uruchomieniu aplikacji, jeśli typ w mojej przeglądarce localhost: 8080/temperatura

Nie wie, gdzie znaleźć Convertor.jsp. Moje pytanie brzmi: jak mogę skonfigurować tę wtyczkę, aby poznać lokalizację zasobów WebContent i, co najważniejsze, jak skonfigurować wtyczkę, aby wiedzieć, jak przetwarzać JSF i wiedzieć o faces-config.xml i web.xml.

Czy mogę, na przykład, zdefiniować rozszerzenie org.eclipse.equinox.http.registry.servlets, zrobić coś takiego? klasa: javax.faces.webapp.FacesServlet alis: /*.jsp

(wszystkie pliki * .jsp do przetworzenia przez FacesServlet)?

Bardzo dziękuję i przepraszam, jeśli pytania są głupie, ale jestem nowy w tej dziedzinie wtyczek RCP, Jetty i JSF.

+3

Zgaduję, że już rozwiązałeś ten problem, bo inaczej nie zadawałbyś nowych pytań na temat JSF i tego wszystkiego . Ponadto, jeśli używasz JSF 2, powinieneś przenieść się do Facelets. Polecę Ci przeczytać [Jakie są różnice między JSP i Facelets?] (Http://stackoverflow.com/a/2197189/1065197), [Jaka jest różnica między JSF, Servlet i JSP?] (Http: //stackoverflow.com/a/2097732/1065197) i linki tam. Nie bierz tego, ponieważ jestem przeciwko tobie, zamiast tego nie mam dokładnej odpowiedzi na twoje pytanie, ale tylko dostarczam wskazówek na lepszą ścieżkę. –

+0

Ponadto, jeśli masz odpowiedź na którekolwiek z twoich pytań, możesz odpowiedzieć (i zaakceptować), aby pomóc innym osobom w tym poradniku. –

+0

Bardzo dziękuję za radę! Rozwiązałem problem, ale nie miałem czasu, aby napisać dla niego poprawną odpowiedź. Ale wkrótce wrócę z odpowiedzią. – wallE

Odpowiedz

1

Spójrz na setting a context in jetty. Możesz go zdefiniować przed uruchomieniem serwera.

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 klasa w org.eclipse.equinox.jsp.jasper.Rejestr zapewnia obsługę JSP do użytku w połączeniu z punktem rozszerzenia serwletów.

Środowisko JSPFactory może być używane w połączeniu z org.eclipse.equinox.http.registry i punktem rozszerzenia Serwlety w celu umożliwienia deklaracji użycia stron JSP przy użyciu rejestru rozszerzeń.

JSPFactory zaakceptuje parametr "ścieżka" odpowiadający ścieżce bazowej w pakiecie, aby wyszukać zasoby JSP. Ten parametr można ustawić za pomocą metody separatora ":" lub parametru xml.

np. class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" lub

Powiązane problemy