在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:
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的方法(我没有列出可读物和为简洁排序):
@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();
}
}发布于 2014-12-23 17:53:24
我在第一个servlet中使用了getServletContext().getRealPath(),并通过第二个servlet中的类变量传递到第二个servlet的路径。起作用了。谢谢你的帮助阿里为我指明了正确的方向。我想,由于第二个servlet实际上并没有正常初始化(我只是从第一个servlet调用它是doPost ),所以它的上下文是空的。再次感谢你的帮助!
发布于 2014-12-23 07:30:53
如果要获取相对路径的实际路径,可以使用getRealPath()方法,例如:
String realPath = getServletContext().getRealPath("/WEB-INFO/myfile.txt");如果在servlet的init()方法中使用此代码,请使用:
config.getServletContext().getRealPath("/WEB-INFO/myfile.txt");要回答你问题的第一部分,我需要更多的信息。我会在得到信息后编辑这个答案。
https://stackoverflow.com/questions/27611203
复制相似问题