Java 嵌入式Jetty转发对JSP的servlet响应

Java 嵌入式Jetty转发对JSP的servlet响应,java,servlets,jetty,forwarding,embedded-jetty,Java,Servlets,Jetty,Forwarding,Embedded Jetty,使用嵌入式Jetty,我试图获得一个非常简单的servlet,在servlet doGet()执行后转发到JSP页面。但是,它不是到达JSP,而是递归地转发到调用转发的同一个doGet() 我对这个东西很陌生,但它要么找不到JSP,而是映射到它能找到的唯一servlet,要么我没有注册JSP或其他东西。请帮忙 我的代码如下 import java.io.IOException; import javax.servlet.ServletException; import javax.servlet

使用嵌入式Jetty,我试图获得一个非常简单的servlet,在servlet doGet()执行后转发到JSP页面。但是,它不是到达JSP,而是递归地转发到调用转发的同一个doGet()

我对这个东西很陌生,但它要么找不到JSP,而是映射到它能找到的唯一servlet,要么我没有注册JSP或其他东西。请帮忙

我的代码如下

import java.io.IOException;
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;

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()), "/*");
    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);
        try {
            request.getRequestDispatcher("/result.jsp").forward(request, response);
        }
        catch (ServletException e1) {
            e1.printStackTrace();
        }

    }
}
}
我的JSP位于。\src\main\webapp\WEB-INF\result.JSP

<%@ page language="javascript" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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>

</body>
</html>

在此处插入标题
我的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.aggregate</groupId>
        <artifactId>jetty-all-server</artifactId>
        <version>7.6.0.RC1</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>

4.0.0
com.hp.it.kmcs.search
JettyTest
0.0.1-快照
罐子
JettyTest
http://maven.apache.org
7.2.0.v20101020
org.eclipse.jetty.aggregate
jetty所有服务器
7.6.0.1
罐子
编译
org.mortbay.jetty
jetty maven插件
${jettyVersion}
org.codehaus.mojo
execmaven插件
1.1
JAVA
com.hp.it.kmcs.JettyTest.RunHelloServlet

看起来您已经映射了
HelloServlet
,这样它几乎可以处理所有请求。当您尝试将请求从
HelloServlet
转发到
/result.jsp
时,Jetty将路径
/result.jsp
匹配到
/*
,然后将请求直接转发回
HelloServlet
(该路径递归地转发到
/result.jsp

您应该使servlet映射更加严格(例如,
/hello
而不是
/*


此外,由于您的.jsp文件位于WEB-INF中,您应该转发到
/WEB-INF/result.jsp

我看到您有一个pom.xml。我相信这是Maven说的对吧?无论如何,如果你有一个web.xml,你也应该发布它。不,我没有使用任何过滤器,或者至少我不知道有任何过滤器。我没有任何web.xml,但有一种印象,就是对于jetty,我不一定需要oneno web.xml。我的印象是(可能是错误的)嵌入式码头我可能不需要一个。servlet启动并最初接受请求,这使我相信我的假设是正确的。然而,随着事情变得越来越复杂,可能需要这样做吗?多亏了这个映射似乎能起作用。它不再递归运行,但似乎找不到jsp文件。浏览器显示找不到/WEB-INF/result.jsp。不太清楚为什么。@robsbobs,我从未处理过从
main
运行Jetty服务器的问题。正如在对您的问题的评论中所指出的,大多数Java web应用程序都有一个
web.xml
文件来处理映射,并部署到已经运行的web服务器上。但是,我怀疑您可能需要告诉Jetty在哪里可以找到WEB-INF目录。也许它甚至没有加载。你可能是对的。我会调查的。这就是答案。