Eclipse RCP插件+嵌入式Jetty + JSF [英] Eclipse RCP plugin + embedded Jetty + JSF
问题描述
我制作了带有嵌入式Jetty的RCP插件,如下所示:
1)在plugin.xml->依赖项中,我添加了以下内容:
org.eclipse.equinox.http.jetty
org.eclipse.equinox.http.registry
org.mortbay.jetty.server
javax.servlet
2)在plugin.xml->扩展中,我添加了一个Servlet扩展点( org.eclipse.equinox.http.registry.servlet )
class: TemperatureServlet
alias:/temperature
TemperatureServlet 看起来像这样:
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>
faces-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
在 Activator 类的方法 start ()中,我已经这样启动了Web服务器:
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-api-1.2.1-javadoc.jar
- JSF 2.0(Apache MyFaces JSF Core-2.0 API 2.0.2)
启动应用程序后,如果输入浏览器 本地主机:8080/温度
它不知道在哪里可以找到Convertor.jsp. 我的问题是:如何配置此插件以了解WebContent的资源位置,最重要的是,如何配置该插件以了解如何处理JSF以及对faces-config.xml和web.xml的了解. >
例如,当我定义扩展名org.eclipse.equinox.http.registry.servlets时,可以做这样的事情吗? 类:javax.faces.webapp.FacesServlet alis:/*.jsp
(要由FacesServlet处理的所有文件* .jsp)?
非常感谢,如果问题很愚蠢,对不起,但是我是RCP插件Jetty和JSF领域的新手.
A
例如class ="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH"或 I made an RCP plugin with embedded Jetty as following: 1) In plugin.xml -> Dependencies, I have added the following: 2) In plugin.xml -> Extensions, I have added a Servlet extension point (org.eclipse.equinox.http.registry.servlet) The TemperatureServlet looks like this: The file Convertor.jsp looks like this: The file faces-config.xml contains: My plugin has the following hierarchy: In Activator class, method start(), I have started the web server like this: To this plugin I have added also the following libraries: After I launch the application, if I type in my browser
localhost:8080/temperature It doesn't know where to find Convertor.jsp.
My question is: how can I configure this plugin to know the resource location WebContent and the most important, how can I configure the plugin to know how to process JSFs and to know about the faces-config.xml and web.xml. Can I, for example, when I define the extension org.eclipse.equinox.http.registry.servlets, do something like this?
class: javax.faces.webapp.FacesServlet
alis: /*.jsp (all the files *.jsp to be processed by the FacesServlet)? Thank you very much and sorry if the questions are silly, but I am new in this area of RCP plugins, Jetty and JSF. A JSP Extension Factory class in org.eclipse.equinox.jsp.jasper.registry provides JSP support for use in conjunction with the servlets extension point. The JSPFactory can be used in conjunction with org.eclipse.equinox.http.registry and the Servlets extension point to allow the use of JSPs declaratively with the extension registry. JSPFactory will accept a "path" parameter corresponding to the base path in the bundle to look up JSP resources. This parameter can be set using the ":" separator approach or by xml parameter. e.g. class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" or 这篇关于Eclipse RCP插件+嵌入式Jetty + JSF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!org.eclipse.equinox.http.jetty
org.eclipse.equinox.http.registry
org.mortbay.jetty.server
javax.servlet
class: TemperatureServlet
alias:/temperature
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");
}
}
<%@ 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>
<?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();
}
}