2011-12-21 14 views
1

私は組み込みjettyサーブレットに何らかの処理をさせ、次に結果ページを生成するJSPに制御を渡します。サーブレットからJSPへの埋め込みjetty

サーブレットは正しくマップされて呼び出されますが、JSPを見つけることができません。私は埋め込み桟橋を使用しているので、私はweb.xmlを持っていないし、戦争もしていない。たぶん、これは、桟橋は私のJSPや何かを探す場所を知らないということです。この場合、どのように私はeclipse/jettyにこれを見つけるべきかを伝えることができます。

N.B.私は通常のMavenプロジェクトを使用しているので、自分自身でWEB-INFフォルダを作成しなければなりませんでした。何が間違っているのかを知る手がかりになるかもしれない!

import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 
import org.springframework.core.io.ClassPathResource; 

public class RunHelloServlet { 

public static void main(String[] args) throws Exception { 
    Server server = new Server(8080); 

    ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 

    contextHandler.setContextPath("."); 
    server.setHandler(contextHandler); 

    contextHandler.addServlet(new ServletHolder(new HelloServlet()), "/hello"); 

    server.start(); 
    server.join(); 
} 

public static class HelloServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public HelloServlet() { 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
     String par1 = request.getParameter("par1"); 
     request.setAttribute("key", par1); 

     // logic 

     try { 
      RequestDispatcher r = request.getRequestDispatcher("/result.jsp"); 
      request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response); 
     } 
     catch (ServletException e1) { 
      e1.printStackTrace(); 
     } 

    } 
} 

}

マイPOM、次のようである...

<project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.hp.it.kmcs.search</groupId> 
    <artifactId>JettyTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>JettyTest</name> 
    <url>http://maven.apache.org</url> 

<properties> 
    <jettyVersion>7.2.0.v20101020</jettyVersion> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>org.eclipse.jetty.aggregate</groupId> 
     <artifactId>jetty-all-server</artifactId> 
     <version>7.6.0.RC1</version> 
     <type>jar</type> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.1.0.RELEASE</version> 
     <type>jar</type> 
     <scope>compile</scope> 
    </dependency> 
    </dependencies> 

    <build> 
<plugins> 
    <plugin> 
    <!-- This plugin is needed for the servlet example --> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>${jettyVersion}</version> 
    </plugin> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
     <execution><goals><goal>java</goal></goals></execution> 
    </executions> 
    <configuration> 
     <mainClass>com.hp.it.kmcs.JettyTest.RunHelloServlet</mainClass> 
    </configuration> 
    </plugin> 
</plugins> 

答えて

1

私はこれをsetWarと正しいjarを使って動作させました。このコードを使用すると、jspを直接(localhost:8080/result.jsp)アドレス指定し、サーブレット(localhost:8080/hello).forwardコマンドを使用してjspに転送することができます。これは私のJSPでいくつかの動的コンテンツを提供することができます。

コード次のように...(NB:組み込み桟橋=>何のweb.xmlが必要とされない)

import java.io.File; 
import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.eclipse.jetty.server.Handler; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.handler.DefaultHandler; 
import org.eclipse.jetty.server.handler.HandlerList; 
import org.eclipse.jetty.servlet.ServletHolder; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class RunHelloServlet { 

public static void main(String[] args) throws Exception { 

    System.setProperty("DEBUG", "true"); 
    Server server = new Server(8080); 

    WebAppContext webappcontext = new WebAppContext(); 
    webappcontext.setContextPath("/"); 

    File warPath = new File("C:/dev/workspace/JettyTest", "src/main/webapp"); 
    webappcontext.setWar(warPath.getAbsolutePath()); 
    HandlerList handlers = new HandlerList(); 
    webappcontext.addServlet(new ServletHolder(new HelloServlet()), "/hello"); 

    handlers.setHandlers(new Handler[] { webappcontext, new DefaultHandler() }); 
    server.setHandler(handlers); 
    server.start(); 
} 

public static class HelloServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public HelloServlet() { 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 

     // logic 

     try { 
      request.getRequestDispatcher("/result.jsp").forward(request, response); 
     } 
     catch (Throwable e1) { 
      e1.printStackTrace(); 
     } 

    } 
} 
} 

のpom.xml ...

<project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.hp.it.kmcs.search</groupId> 
    <artifactId>JettyTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>JettyTest</name> 
    <url>http://maven.apache.org</url> 

<properties> 
    <jettyVersion>7.2.0.v20101020</jettyVersion> 
</properties> 
<dependencies> 

    <dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-server</artifactId> 
    <version>7.6.0.RC1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-util</artifactId> 
    <version>7.6.0.RC1</version> 
    <type>jar</type> 
    <classifier>config</classifier> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jsp-2.1-glassfish</artifactId> 
    <version>2.1.v20100127</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.jdt.core.compiler</groupId> 
    <artifactId>ecj</artifactId> 
    <version>3.5.1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>servlet-api-2.5</artifactId> 
    <version>6.1.14</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-webapp</artifactId> 
    <version>7.6.0.RC0</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    </dependency> 
</dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <!-- This plugin is needed for the servlet example --> 
     <groupId>org.mortbay.jetty</groupId> 
     <artifactId>jetty-maven-plugin</artifactId> 
     <version>${jettyVersion}</version> 
     </plugin> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.1</version> 
     <executions> 
      <execution><goals><goal>java</goal></goals></execution> 
     </executions> 
     <configuration> 
      <mainClass>com.hp.it.kmcs.JettyTest.RunHelloServlet</mainClass> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

ありがとう - これは、私が関連する問題への答えを見つけ出すのを助けました。私にとって、ジェネリックなServletContextHandlerからWebAppContextへの切り替えは、それを解決しました。私はResourceBaseをWebアプリケーションのパスに設定しています。 –

0

は、このようなあなた埋め込むアプリコンソールショーINFOを行います。

INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /servletpath, did not find org.apache.jasper.servlet.JspServlet 

埋め込みJettyでは、デフォルトでJSPサポートが有効になっていません。詳細は、hereを参照してください。 HTH。

+0

コンソール出力は次のように文句を言わないdoesntの。私は作業中に何かを壊していましたが、それを手こずっている間に、今は正確なコンソール出力を得ることができません。 –

+0

JSPサポートについては、あまり言い表せません。あなたがすでに –

+0

コンソールを使用している桟橋集計瓶を使用することができますと言って終了します...... 2011-12-22 14:12:17.262:情報:oejs.Server:jetty-7.6.0.RC1 2011-12-22 14:12:17.370:情報:oejsh.ContextHandler:開始oejsServletContextHandler {/、ファイル:/ C:/ dev/workspace/JettyTest /} 2011-12-22 14:12:17.425:情報: oejs.AbstractConnector:Started [email protected]:8080 STARTING –

関連する問題