Reputation: 3033
Using Embedded Jetty I am trying to get a very simple servlet to forward to JSP page once the servlet doGet() has executed. However instead of reaching the JSP it simply recursively forwards to the same doGet() which is calling the forward.
Im very new to this stuff but its like it either cant find the JSP and instead maps to the only servlet that it can find or else I'm not registering the JSP or something. please help.
My code is as follows...
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();
}
}
}
}
My JSP located at .\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>
My 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>
Upvotes: 1
Views: 3283
Reputation: 33161
It looks like you've mapped HelloServlet
so that it handles almost every request. When you try to forward the request from HelloServlet
to /result.jsp
, Jetty matches the path /result.jsp
to /*
and so forwards the request right back to HelloServlet
(which forwards it to /result.jsp
and so on recursively).
You should make your servlet mapping more restrictive (e.g. /hello
instead of /*
).
Furthermore, since your .jsp file is in WEB-INF, you should be forwarding to /WEB-INF/result.jsp
.
Upvotes: 3