I created an RCP plugin with embedded Jetty as follows:
1) In plugin.xml -> Dependencies I added the following:
org.eclipse.equinox.http.jetty org.eclipse.equinox.http.registry org.mortbay.jetty.server javax.servlet
2) In plugin.xml -> Extensions I added a Servlet extension point ( org.eclipse.equinox.http.registry.servlet )
class: TemperatureServlet alias:/temperature
TemperatureServlet is as follows:
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"); } }
The Convertor.jsp file is as follows:
<%@ 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>
The faces-config.xml file contains:
<?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>
My plugin has the following hierarchy:
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 the Activator class, the start () method, I started the web server as follows:
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(); } }
I also added the following libraries to this plugin:
- 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)
After starting the application, if I find in my browser local: 8080 / temperature
He does not know where to find Convertor.jsp. My question is: how can I configure this plugin to find out the location of the WebContent resource and most importantly how to configure the plugin to learn how to handle JSF and know about faces-config.xml and web.xml files.
Can I, for example, when I define the extension org.eclipse.equinox.http.registry.servlets, something like this? class: javax.faces.webapp.FacesServlet alis: / *. jsp
(all * .jsp files should be processed by FacesServlet)?
Thanks a lot and sorry if the questions are stupid, but I'm new to this area of RCP, Jetty and JSF plugins.