2012-07-01 31 views
45

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.

+3

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. –

+0

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. –

+0

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

Trả lời

1

Hãy xem setting a context in jetty. Bạn có thể xác định nó trước khi bắt đầu máy chủ của bạn.

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

A JSP Extension Factory lớp trong org.eclipse.equinox.jsp.jasper.registry cung cấp hỗ trợ JSP để sử dụng kết hợp với điểm mở rộng servlet.

JSPFactory có thể được sử dụng kết hợp với org.eclipse.equinox.http.registry và điểm mở rộng Servlets để cho phép sử dụng JSP theo cách khai báo với phần mở rộng đăng ký.

JSPFactory sẽ chấp nhận tham số "đường dẫn" tương ứng với đường dẫn cơ sở trong gói để tra cứu tài nguyên JSP. Tham số này có thể được thiết lập bằng cách sử dụng phương pháp phân tách ":" hoặc theo tham số xml.

ví dụ: class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" hoặc

Các vấn đề liên quan