tôi đã thực hiện một plugin RCP với nhúng Jetty như sau:Eclipse RCP Plugin + nhúng Jetty + JSF
1) Trong plugin.xml -> Dependencies, tôi đã thêm như sau:
org.eclipse.equinox.http.jetty
org.eclipse.equinox.http.registry
org.mortbay.jetty.server
javax.servlet
2) Trong plugin.xml -> Extensions, tôi đã thêm một điểm mở rộng Servlet (org.eclipse.equinox.http.registry.servlet)
class: TemperatureServlet
alias:/temperature
Các Te mperatureServlet trông như thế này:
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");
}
}
File Convertor.jsp trông như thế này:
<%@ 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>
Các tập tin faces-config.xml chứa:
<?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 của tôi có phân cấp sau:
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
Trong Activator lớp, phương pháp bắt đầu(), tôi đã bắt đầu các máy chủ web như thế này:
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();
}
}
Để plugin này tôi đã thêm cũng là thư viện sau:
- 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)
Sau khi tôi khởi động ứng dụng, nếu tôi gõ trong trình duyệt của tôi localhost: 8080/temperature
Nó không biết nơi để tìm Convertor.jsp. Câu hỏi của tôi là: làm thế nào tôi có thể cấu hình plugin này để biết vị trí tài nguyên WebContent và quan trọng nhất, làm cách nào tôi có thể cấu hình plugin để biết cách xử lý JSF và biết về faces-config.xml và web.xml.
Ví dụ: khi tôi xác định tiện ích mở rộng org.eclipse.equinox.http.registry.servlets, hãy làm điều gì đó như thế này? lớp học: javax.faces.webapp.FacesServlet alis: /*.jsp
(tất cả các tệp * .jsp sẽ được xử lý bởi FacesServlet)?
Cảm ơn bạn rất nhiều và xin lỗi nếu các câu hỏi là ngớ ngẩn, nhưng tôi mới trong lĩnh vực này của các plugin RCP, Jetty và JSF.
Tôi đoán bạn đã giải quyết được vấn đề này hoặc nếu không bạn sẽ không hỏi những câu hỏi mới về JSF và tất cả những thứ đó . Ngoài ra, nếu bạn sử dụng JSF 2, thì bạn nên chuyển sang Facelets. Tôi sẽ khuyên bạn nên đọc [Sự khác nhau giữa JSP và Facelets là gì?] (Http://stackoverflow.com/a/2197189/1065197), [Sự khác nhau giữa JSF, Servlet và JSP là gì?] (Http: //stackoverflow.com/a/2097732/1065197) và các liên kết ở đó. Đừng lấy nó như tôi chống lại bạn, thay vào đó tôi không có câu trả lời chính xác cho câu hỏi của bạn nhưng chỉ cung cấp một số hướng dẫn cho một con đường tốt hơn. –
Ngoài ra, nếu bạn có câu trả lời cho bất kỳ câu hỏi nào của mình, bạn có thể trả lời (và chấp nhận) chúng để giúp những người khác trong hướng dẫn này. –
Cảm ơn bạn rất nhiều vì đã tư vấn cho bạn! Tôi giải quyết vấn đề, nhưng tôi không có thời gian để viết một câu trả lời thích hợp cho nó. Nhưng chẳng mấy chốc tôi sẽ quay lại với câu trả lời. – wallE