首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servlet在doGet或doPost以外的方法中使用println时显示空白页。

Servlet在doGet或doPost以外的方法中使用println时显示空白页。
EN

Stack Overflow用户
提问于 2014-12-22 22:10:09
回答 2查看 431关注 0票数 0

在doGet或doPost以外的方法中使用println时,我的动态web应用程序显示了一个空白页面。默认页面可以很好地加载。它是一个表单,它的输入传递给启动servlet的doPost,然后它的请求,响应被传递给第二个servlet的doPost。然后,同样的请求,响应被传递给一个输出方法,而不是使用println来显示输出。但是我得到了一个空白页而不是输出。我知道调用输出方法是因为我在最初尝试使用BufferedWriter写入输出文件时遇到了错误,但这是行不通的。这是我第一次尝试使用Java动态web应用程序并使用println,虽然我对PHP、ASP.Net和桌面应用程序中的几种语言有过中级经验。

第二个servlet的doPost方法调用读入、排序和outputSort方法。readnums方法读取程序要使用的文本文件。我在相对路径上遇到了问题(我想这就是为什么我不能让BufferedWriter在outputSort中工作)。输入文本文件的路径是“/WebContent/WEB/myfile.txt”。一旦web应用部署到托管站点上,我会对此有问题吗?冒着问两个问题的风险,如何正确地指定应用程序的相对路径?我一直在谷歌上搜索,但似乎找不到一个可行的解决方案。当我尝试使用getServletContext().getRealPath()时,在该行的outputSort方法中会出现一个错误。我还没试着把它用在读书机的方法上。我有一个网站,我可以热链接输入文件,如果这是一个可行的选择。你会怎么做?

如果能对此提供任何帮助,我们将不胜感激。提前谢谢。

从默认jsp调用的初始servlet:

代码语言:javascript
复制
package com.LAEWeb;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public  class Startup extends HttpServlet {

    private static final long serialVersionUID = 1L;


    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        req.getRequestDispatcher("/WEB-INF/Startup.jsp").forward(req,resp);

    }

    @Override
    public void doPost(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException, IOException {


        String sorts = req.getParameter("sorts");

        String action = req.getParameter("action");


        if ("Powerball".equals(action)) {

            Powerball p = new Powerball();

            p.sortInputText = sorts;

            p.doPost (req, resp);
        }

         else if ("Mega Millions".equals(action)) {

            // Invoke SecondServlet's job here.
        }

    }
}

第二个servlet的方法(我没有列出可读物和为简洁排序):

代码语言:javascript
复制
  @Override
  public void doPost(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException, IOException {


        if (PB_operation == "sorts") {

            readnums();

            if (!errorMessage.isEmpty())  {

                resp.setContentType("text/html");
                PrintWriter out = resp.getWriter();

                try  {

                  out.println("<html>");
                  out.println("<body>");
                  out.println("<h2>Input file not found</h2>");
                  out.println("</body>");
                  out.println("</html>");

                 } finally {

                  out.close();
                 }

                return;


            }

            else {

                sort();

                outputSort(req, resp);


            }

        }

  }


void outputSort (HttpServletRequest req,
        HttpServletResponse resp) throws ServletException, IOException  {

    String  Temp;
    int i;

    resp.setContentType("text/html");
    PrintWriter out = resp.getWriter();

    try  {

    out.println("<!DOCTYPE html>");

    out.println("<html>");

    out.println("<head>");

    out.println ("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");

    out.println("<title>LAEWeb</title>");

    out.println("</head>");

    out.println("<body>");

    out.println("<a href=\"/Startup.jsp\">Return to previous page </a>");

    out.println("<h2>The Powerball sorted totals for the range selected</h2>");

    out.println("<pre>");

    out.println("Rank     Numbers     Totals        Power ball     Totals");
    out.println ("");
    out.println ("");

    for (i = 1; i <= NUMLIMIT; i++)  {

        Temp = "<p>" +  Integer.toString(i) + "   ";

        if (i < 10)

            Temp += " ";

        Temp +=  Integer.toString(sortnums[i][1]) + "     ";
        Temp +=  Integer.toString(sortnums[i][2]) + "     ";

        if (i <= XLIMIT) {

            Temp +=  Integer.toString(sortxball[i][1]) + "     ";
            Temp +=  Integer.toString(sortxball[i][2]) + "     ";

        }

        out.println (Temp);

    }

    out.println("</pre>");

    out.println("</body>");

    out.println("</html>");

    } finally  {

    out.close();

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-23 17:53:24

我在第一个servlet中使用了getServletContext().getRealPath(),并通过第二个servlet中的类变量传递到第二个servlet的路径。起作用了。谢谢你的帮助阿里为我指明了正确的方向。我想,由于第二个servlet实际上并没有正常初始化(我只是从第一个servlet调用它是doPost ),所以它的上下文是空的。再次感谢你的帮助!

票数 -1
EN

Stack Overflow用户

发布于 2014-12-23 07:30:53

如果要获取相对路径的实际路径,可以使用getRealPath()方法,例如:

代码语言:javascript
复制
String realPath = getServletContext().getRealPath("/WEB-INFO/myfile.txt");

如果在servlet的init()方法中使用此代码,请使用:

代码语言:javascript
复制
config.getServletContext().getRealPath("/WEB-INFO/myfile.txt");

要回答你问题的第一部分,我需要更多的信息。我会在得到信息后编辑这个答案。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27611203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档