Eclipse RCP plugin + embedded Jetty + JSF

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.

+45
jsp jsf jetty eclipse-rcp embedded-jetty
Jul 01 2018-12-12T00:
source share
2 answers

See setting the context in the berth . You can define it before starting your 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
May 10 '13 at 16:33
source share

A JSP Extension Factory class in org.eclipse.equinox.jsp.jasper.registry provides JSP support for use in conjunction with add-on servlets.

JSPFactory can be used in conjunction with org.eclipse.equinox.http.registry and the Servlets extension point to allow the use of JSP declaratively with the extension registry.

JSPFactory will accept the path parameter corresponding to the base path in the package to search for JSP resources. This parameter can be set using the ":" separator approach or using the xml parameter.

eg. class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory: / A / PATH" or

+1
Aug 6 '14 at 14:24
source share



All Articles