gpt4 book ai didi

java - 嵌入式 Jetty 将 servlet 响应转发到 JSP

转载 作者:行者123 更新时间:2023-12-02 08:03:20 26 4
gpt4 key购买 nike

使用嵌入式 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>

最佳答案

看起来您已经映射了 HelloServlet,以便它处理几乎每个请求。当您尝试将请求从 HelloServlet 转发到 /result.jsp 时,Jetty 将路径 /result.jsp 匹配到 /* ,因此将请求直接转发回 HelloServlet (后者将其递归转发到 /result.jsp 等)。

您应该使 servlet 映射更具限制性(例如 /hello 而不是 /*)。

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

关于java - 嵌入式 Jetty 将 servlet 响应转发到 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8564055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com