2011-08-23 13 views
11

मैं जेटी एम्बेड कर रहा हूं, एक एकल सर्वलेट और कुछ स्थिर सामग्री की सेवा कर रहा हूं। मैंने http://download.eclipse.org/jetty/7.4.5.v20110725/dist/ से जेटी डाउनलोड की है, और ग्रहण में उपयोगकर्ता लाइब्रेरी में JETTY_HOME/lib/* और JETTY_HOME/lib/jsp/* से सभी जार जोड़े हैं; इन यूजर लाइब्रेरी को मेरी परियोजना में जोड़ा गया है। अगर मैं अपने स्थिर सामग्री फ़ोल्डर (./webapps/static/) में एक जेएसपी फ़ाइल डालता हूं और इसे http://localhost:8080/static/test.jsp पर देखता हूं, तो जावा अभिव्यक्ति का मूल्यांकन नहीं किया जाता है और मुझे फ़ाइल की पूरी सामग्री दिखाई देती है।जेटी का उपयोग कर जेएसपी फाइलों की सेवा कैसे करें?

मुझे क्या याद आ रही है?

मेरा मुख्य जावा वर्ग:

<html> 
<body> 
Time: <%= new java.util.Date() %> 
</body> 
</html> 

जार की सूची JETTY_HOME में/lib /:

$ ls -1 ./jetty-distribution-7.4.5.v20110725/lib/*.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-ajp-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-annotations-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-client-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-continuation-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-deploy-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-http-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-io-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-jmx-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-jndi-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-overlay-deployer-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-plus-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-policy-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-rewrite-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-security-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-server-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-servlet-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-servlets-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-util-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-webapp-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-websocket-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/jetty-xml-7.4.5.v20110725.jar 
./jetty-distribution-7.4.5.v20110725/lib/servlet-api-2.5.jar 

जार की सूची

import org.eclipse.jetty.server.Handler; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.handler.ContextHandler; 
import org.eclipse.jetty.server.handler.HandlerList; 
import org.eclipse.jetty.server.handler.ResourceHandler; 
import org.eclipse.jetty.server.nio.SelectChannelConnector; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     Server server = new Server(); 
     SelectChannelConnector connector = new SelectChannelConnector(); 
     connector.setPort(8080); 
     server.addConnector(connector);    

     // Create a resource handler for static content. 
     ResourceHandler staticResourceHandler = new ResourceHandler(); 
     staticResourceHandler.setResourceBase("./webapps/static/"); 
     staticResourceHandler.setDirectoriesListed(true);   
     //staticResourceHandler.setWelcomeFiles(new String[]{ "index.html", });   
     //staticResourceHandler.setCacheControl("no-store,no-cache,must-revalidate"); 

     // Create context handler for static resource handler. 
     ContextHandler staticContextHandler = new ContextHandler(); 
     staticContextHandler.setContextPath("/static");  
     staticContextHandler.setHandler(staticResourceHandler);   

     // Create servlet context handler for main servlet. 
     ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     servletContextHandler.setContextPath("/");  
     servletContextHandler.addServlet(new ServletHolder(new HelloServlet()),"/"); 

     // Create a handler list to store our static and servlet context handlers. 
     HandlerList handlers = new HandlerList(); 
     handlers.setHandlers(new Handler[] { staticContextHandler, servletContextHandler }); 

     // Add the handlers to the server and start jetty. 
     server.setHandler(handlers); 
     server.start(); 
     server.join(); 
    }   

} 

मेरे JSP फ़ाइल मैं सेवा करना चाहते JETTY_HOME/lib/jsp /:

में

अद्यतन: @ जेजे के सुझाव ने जेट्टी के साथ जेएसपी फ़ाइल को सही तरीके से कैसे पेश किया है, यह जानने में मदद की। मेरा एकमात्र मुद्दा यह है कि जेटी को ./webapps/jsp/ की निर्देशिका सामग्री सूचीबद्ध करने से कैसे रोकें। मेरे पास सबसे बुनियादी फिक्स है फिलहाल index.html या index.jsp को ./webapps/jsp/ में रखना है, लेकिन मैं एक प्रतिबंधित त्रुटि को वापस करने के लिए जेटी को कॉन्फ़िगर करने में सक्षम होना पसंद करूंगा।

import org.eclipse.jetty.server.Handler; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.handler.ContextHandler; 
import org.eclipse.jetty.server.handler.HandlerList; 
import org.eclipse.jetty.server.handler.ResourceHandler; 
import org.eclipse.jetty.server.nio.SelectChannelConnector; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     Server server = new Server(); 
     SelectChannelConnector connector = new SelectChannelConnector(); 
     connector.setHost("127.0.0.1"); 
     connector.setPort(8080); 
     server.addConnector(connector); 

     // Create a resource handler for static content. 
     ResourceHandler staticResourceHandler = new ResourceHandler(); 
     staticResourceHandler.setResourceBase("./webapps/static/"); 
     staticResourceHandler.setDirectoriesListed(true); 

     // Create context handler for static resource handler. 
     ContextHandler staticContextHandler = new ContextHandler(); 
     staticContextHandler.setContextPath("/static"); 
     staticContextHandler.setHandler(staticResourceHandler); 

     // Create WebAppContext for JSP files. 
     WebAppContext webAppContext = new WebAppContext(); 
     webAppContext.setContextPath("/jsp"); 
     webAppContext.setResourceBase("./webapps/jsp/"); 
     // ??? THIS DOES NOT STOP DIR LISTING OF ./webapps/jsp/ ??? 
     webAppContext.setInitParameter("dirAllowed", "false"); 

     // Create servlet context handler for main servlet. 
     ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     servletContextHandler.setContextPath("/"); 
     servletContextHandler.addServlet(new ServletHolder(new HelloServlet()), "/*"); 

     // Create a handler list to store our static, jsp and servlet context handlers. 
     HandlerList handlers = new HandlerList(); 
     handlers.setHandlers(new Handler[] { staticContextHandler, webAppContext, servletContextHandler }); 

     // Add the handlers to the server and start jetty. 
     server.setHandler(handlers);  
     server.start(); 
     server.join(); 
    } 

} 

उत्तर

6

मुझे लगता है कि आप कुछ महत्वपूर्ण टुकड़ा है जो बताता है कि बस एक स्थिर फ़ाइल के बजाय JSP सामग्री के रूप में सेवा फ़ाइलें पार्स करने के लिए घाट याद कर रहे हैं। मैं वास्तव में आप क्या भूल रहे हैं अपने कोड डिबग करने के लिए सक्षम किया जा रहा बिना नहीं देख सकते हैं लेकिन मैं तुम्हें एम्बेड करने के बारे में इस संदर्भ की जाँच की सिफारिश जेट्टी:

http://docs.codehaus.org/display/JETTY/Embedding+Jetty

विशेष रूप से मुझे लगता है कि कोड के इस टुकड़े के लिए प्रासंगिक हो सकता है आपकी समस्या:

// assumes that this directory contains .html and .jsp files 
// This is just a directory within your source tree, and can be exported as part of your normal .jar 
final String WEBAPPDIR = "com/xxx/yyy/webapp"; 
final Server server = new Server(httpServerPort); 
final String CONTEXTPATH = "/admin"; 

// for localhost:port/admin/index.html and whatever else is in the webapp directory 
final URL warUrl = this.class.getClassLoader().getResource(WEBAPPDIR); 
final String warUrlString = warUrl.toExternalForm(); 
server.setHandler(new WebAppContext(warUrlString, CONTEXTPATH)); 
संबंधित मुद्दे