Java 用于检索(显示)网页的JSP Servlet

Java 用于检索(显示)网页的JSP Servlet,java,jsp,servlets,Java,Jsp,Servlets,我正在JSP页面中编写一个servlet来显示请求的网页。我已经做了相当多的“谷歌搜索”,大多数人建议使用BufferedReader。下面是从JSP页面获取请求url的代码,servlet显示该页面 然而,当运行这个时,servlet中的内容变得空白。有人能告诉我我在这段代码中犯了什么错误吗 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException

我正在JSP页面中编写一个servlet来显示请求的网页。我已经做了相当多的“谷歌搜索”,大多数人建议使用BufferedReader。下面是从JSP页面获取请求url的代码,servlet显示该页面

然而,当运行这个时,servlet中的内容变得空白。有人能告诉我我在这段代码中犯了什么错误吗

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

        String server = request.getParameter("browsebox");

        URL url = new URL(server);
        URLConnection yc = url.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                yc.getInputStream(), "UTF-8"));
        String inputLine;
        StringBuilder a = new StringBuilder();
        while ((inputLine = in.readLine()) != null)
            a.append(inputLine);
        in.close();

       PrintWriter out = response.getWriter();
        out.println(a);
        // String output= a.toString();
        //System.out.println(output);
    }

你非常非常接近。但为什么要在控制台上打印目标网页,而不是将其发送回客户端?首先,请尝试以下方法:

response.getWriter().println(a);

一旦你解决了这个问题,想想你如何避免先把整个目标网页加载到
字符串中,然后再把它发送回去。如何逐行或逐字节读取目标网页并立即发送?不仅客户端会更早收到部分响应,而且您将节省大量内存。

您非常非常接近。但为什么要在控制台上打印目标网页,而不是将其发送回客户端?首先,请尝试以下方法:

response.getWriter().println(a);

一旦你解决了这个问题,想想你如何避免先把整个目标网页加载到
字符串中,然后再把它发送回去。如何逐行或逐字节读取目标网页并立即发送?不仅客户端将更早地收到部分响应,而且您将节省大量内存。

您需要从响应对象获取PrintWriter对象

PrintWriter writer = response.getWriter();
writer.println(<value>);
PrintWriter=response.getWriter();
writer.println();

您需要从响应对象获取PrintWriter对象

PrintWriter writer = response.getWriter();
writer.println(<value>);
PrintWriter=response.getWriter();
writer.println();
在添加

PrintWriter out=response.getWriter();
out.println(a);
它应该会起作用。 但如果它不起作用,试试看

PrintWriter out=response.getWriter();
out.println(a);`
out.flush();
加上

PrintWriter out=response.getWriter();
out.println(a);
它应该会起作用。 但如果它不起作用,试试看

PrintWriter out=response.getWriter();
out.println(a);`
out.flush();

谢谢你的回复。我已经评论了我的最后一行你的建议补充。但仍然没有产出。结果仍然是空的:(@user1382329:在将
println()
变量发送到servlet响应之前,是否可以调试或打印
a
变量的内容?system.out.println(a);在控制台上没有输出。我显式传递url例如。“”进入url,但仍然无法获得任何输出。@user1382329-是否看到错误?如果是,是什么?检查是否通过协议传递url?例如
http://stackoverflow.com
我没有看到任何错误报告(在控制台中)。我将变为空白(白色)运行servlet后返回页面。是的,我确实通过协议传递了url。谢谢你的回复。我已经对你的建议添加的最后一行进行了评论。但是仍然没有输出。结果仍然是完全空白:(@user1382329:在
println()之前,你能调试或打印
a
变量的内容吗?)
it to servlet response?system.out.println(a);在控制台上没有输出。我显式地将url(例如“”)传递到url中,但仍然无法获得任何输出。@user1382329-是否看到错误?如果是,是什么?检查是否传递了带有协议的url?例如
http://stackoverflow.com
我没有看到任何错误报告(在控制台中)。在运行servlet之后,我得到一个空白(白色)页面。是的,我确实通过协议传递了url。