0

我有一个 JSP 页面,它有一个表单,它在提交时调用一个 servlet,它从数据库中获取更多数据。在获取所有需要的数据后,我需要用所有数据构建一个 URL,并从另一个处理数据并返回字符串响应的站点调用 JSP 页面。然后我必须解析响应并在 UI 上显示适当的消息。

我尝试使用 HTTPUrlConnection 从数据访问层调用 JSP 页面,但我得到了HTTP 505 error.

try{ 
    URL url = new URL(mainURL+urlSB.toString()); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("GET");
    connection.setDoOutput(true);
    connection.connect();
    InputStreamReader isr = new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")); 
    BufferedReader br = new BufferedReader(isr); 
    String htmlText = ""; 
    String nextLine = ""; 
    while ((nextLine = br.readLine()) != null){ 
        htmlText = htmlText + nextLine; 
    } 
    System.out.println(htmlText);
}catch(MalformedURLException murle){ 
    System.err.println("MalformedURLException: "+ murle.getMessage()); 
}catch(IOException ioe){ 
    System.err.println("IOException: "+ ioe.getMessage()); 
}

然后我得到了 servlet 的 URL 并使用了request.getRequestDispatcher(url).include(request, response),我得到了javax.servlet.ServletException: File "/http:/xxxx:8090/test/create.jsp" not found

我已确认的另一个站点正在运行。我无权访问其他站点,因此无法对其进行调试。

任何人都可以解释什么是错的或我错过了什么?

4

1 回答 1

2

ServletRequest#getRequestDispatcher()不采用 URL,例如,http://example.com而仅采用相对的网络内容路径,例如/WEB-INF/example.jsp.

改用HttpServletResponse#sendRedirect()

response.sendRedirect(url);

然而,这显示了整个资源。当您使用RequestDispatcher#include()时,您似乎想要包含它的输出(但这在这种情况下几乎没有意义,但除此之外)。另一种方法是<c:import>在您的 JSP 中使用。因此,在您的 servlet 中:

request.setAttribute("url", url);
request.getRequestDispatcher("/WEB-INF/your.jsp").forward(request, response);

并在/WEB-INF/your.jsp

<c:import url="${url}" />
于 2012-09-04T12:51:57.173 回答