高手帮忙看下这个servlet,在线等,马上结帐!

warden325 2007-11-24 09:11:46
编译通过了,然后放进去后发现只实现了前半个功能,各位达人能否帮忙改一下,小弟在此感激不尽!

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PublicAsk extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
long lastmodify=new File("fz.jpg").lastModified();

String addrFrom = request.getParameter("addrFrom");
String addrTo = request.getParameter("addrTo");
String msg = addrFrom + " " + addrTo;
BufferedWriter out = new BufferedWriter(new FileWriter("addr.txt"));
out.write(msg);
out.close();//这一段都没问题

int count = 0;
PrintWriter output = response.getWriter();
while(count < 10){
long l=new File("fz.jpg").lastModified()-lastmodify;
if(l!=0)break;
output.println("waiting...");//页面上没显示,不知道提示是不是这样输出的?
count++;
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
}
if(count == 10){
output.println("Timeout!");
try {
Thread.sleep(300);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
request.getRequestDispatcher("/public.jsp").forward(request, response);//超时返回
}
else{
request.getRequestDispatcher("/showmap.jsp").forward(request,response);//没超时跳转一个显示图片的网页
}
}
}
...全文
94 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
warden325 2007-11-24
  • 打赏
  • 举报
回复
谢谢……已结帐……
microsealkey 2007-11-24
  • 打赏
  • 举报
回复
一般来说应该是相对路径,比如“../../fz.jpg”。
你将getAbsolutePath()打出来看看,就知道应该增加多少个../
或者你可以直接写绝对路径"d:/tomcat/webapps/fz.jpg"
warden325 2007-11-24
  • 打赏
  • 举报
回复
我是小白么……最后一个问题谁帮忙回答下我好结帐啊……

如果是在WEBAPPS主目录下的图片这两句应该在fz.jsp前面加个“/”是吧?

long lastmodify=new File("fz.jpg").lastModified();

long l=new File("fz.jpg").lastModified()-lastmodify;
warden325 2007-11-24
  • 打赏
  • 举报
回复
如果是在WEBAPPS主目录下的图片这两句应该在前面加个“/”是吧?

long lastmodify=new File("fz.jpg").lastModified();

long l=new File("fz.jpg").lastModified()-lastmodify;
warden325 2007-11-24
  • 打赏
  • 举报
回复
额……可以了……谢谢^^
我结帐了……
warden325 2007-11-24
  • 打赏
  • 举报
回复
页面还是没有跳到SHOWMAP.JSP……奇怪……
cf0072 2007-11-24
  • 打赏
  • 举报
回复
好长的代码啊
warden325 2007-11-24
  • 打赏
  • 举报
回复
如果是在WEBAPPS主目录下的图片这两句应该在前面加个“/”是吧?

long lastmodify=new File("fz.jpg").lastModified();

long l=new File("fz.jpg").lastModified()-lastmodify;
warden325 2007-11-24
  • 打赏
  • 举报
回复
额……非常感谢MICROSEALKEY……对JSP自己纯粹是小白……老板非要我4天时间赶一个出来……
最好早上这个模块就能成功……然后给你结帐……

能否帮忙看下这段代码……希望现在没什么问题了……
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PublicAsk extends HttpServlet{
public void doGet(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}

public void doPost(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
long lastmodify=new File("fz.jpg").lastModified();

request.setCharacterEncoding("gb2312");
String addrFrom = new String(request.getParameter

("addrFrom").getBytes("iso-8859-1"),"gbk");
String addrTo = new String(request.getParameter

("addrTo").getBytes("iso-8859-1"),"gbk");
// String addrFrom = request.getParameter("addrFrom");
// String addrTo = request.getParameter("addrTo");
String msg = addrFrom + " " + addrTo;
BufferedWriter out = new BufferedWriter(new FileWriter

("d:/addr.txt"));
out.write(msg);
out.close();

int count = 0;
response.setContentType("text/html;charset=GB2312");
PrintWriter output = response.getWriter();
while(count < 20){
long l=new File("fz.jpg").lastModified()-

lastmodify;
if(l!=0)break;
count++;
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
}
if(count == 20){
output.println("<html>");
output.println("<head>");
output.println("<title>TestPage</title>");
output.println("</head>");
output.println("<body>");
output.println("<h1>Timeout!<a

href=\"public.jsp\">Back</a></h1>");
output.println("</body>");
output.println("</html>");
}
else{
request.getRequestDispatcher

("/showmap.jsp").forward(request,response);
}
}
}
warden325 2007-11-24
  • 打赏
  • 举报
回复
问题不断更新中……现在是一下WAITING和TIMEOUT同时显示了……
microsealkey 2007-11-24
  • 打赏
  • 举报
回复
一般来讲,如果你要显示output提示信息,就不能再forward().
一般的做法,是把提示信息放在jsp中:用request.setAttribute()存储内容,用标签(比如<c:out>,或者el表达式)取出来。
warden325 2007-11-24
  • 打赏
  • 举报
回复
额……现在?是不会显示了……不过保存结果还是?--

而且那些WAITING/TIMEOUT还是不会显示……
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PublicAsk extends HttpServlet{
public void doGet(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}

public void doPost(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
long lastmodify=new File("fz.jpg").lastModified();

request.setCharacterEncoding("gb2312");
String addrFrom = new String(request.getParameter

("addrFrom").getBytes("iso-8859-1"),"gbk");
String addrTo = new String(request.getParameter

("addrTo").getBytes("iso-8859-1"),"gbk");
// String addrFrom = request.getParameter("addrFrom");
// String addrTo = request.getParameter("addrTo");
String msg = addrFrom + " " + addrTo;
BufferedWriter out = new BufferedWriter(new FileWriter

("d:/addr.txt"));
out.write(msg);
out.close();

int count = 0;
response.setContentType("text/html;charset=GB2312");
PrintWriter output = response.getWriter();
output.println("<html>");
output.println("<head>");
output.println("<title>TestPage</title>");
output.println("</head>");
output.println("<body>");
output.println("<h1>waiting...</h1>");
output.println("</body>");
output.println("</html>");
while(count < 10){
long l=new File("fz.jpg").lastModified()-

lastmodify;
if(l!=0)break;
// output.println("waiting...");
count++;
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
}
if(count == 10){
output.println("<html>");
output.println("<head>");
output.println("<title>TestPage</title>");
output.println("</head>");
output.println("<body>");
output.println("<h1>Timeout!</h1>");
output.println("</body>");
output.println("</html>");
try {
Thread.sleep(300);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
request.getRequestDispatcher

("/public.jsp").forward(request, response);
}
else{
request.getRequestDispatcher

("/showmap.jsp").forward(request,response);
}
}
}


microsealkey 2007-11-24
  • 打赏
  • 举报
回复
jsp页面前面一般需要增加<%@ page pageEncoding="GB2312"%>
microsealkey 2007-11-24
  • 打赏
  • 举报
回复
根目录?前面加一个"/"即可。
中文问题稍微复杂一点,你可以试试request.setCharacterEncoding("gb2312")方法
warden325 2007-11-24
  • 打赏
  • 举报
回复
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PublicAsk extends HttpServlet{
public void doGet(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}

public void doPost(HttpServletRequest request,

HttpServletResponse response)
throws ServletException, IOException {
long lastmodify=new File("fz.jpg").lastModified();

String addrFrom = request.getParameter("addrFrom");
String addrTo = request.getParameter("addrTo");
String msg = addrFrom + " " + addrTo;
BufferedWriter out = new BufferedWriter(new FileWriter

("d:/addr.txt"));
out.write(msg);
out.close();

int count = 0;
response.setContentType("text/html");
PrintWriter output = response.getWriter();
output.println("<html>");
output.println("<head>");
output.println("<title>TestPage</title>");
output.println("</head>");
output.println("<body>");
output.println("<h1>waiting...</h1>");
output.println("</body>");
output.println("</html>");
while(count < 10){
long l=new File("fz.jpg").lastModified()-

lastmodify;
if(l!=0)break;
// output.println("waiting...");
count++;
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
}
if(count == 10){
output.println("<html>");
output.println("<head>");
output.println("<title>TestPage</title>");
output.println("</head>");
output.println("<body>");
output.println("<h1>Timeout!</h1>");
output.println("</body>");
output.println("</html>");
try {
Thread.sleep(300);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
request.getRequestDispatcher

("/public.jsp").forward(request, response);
}
else{
request.getRequestDispatcher

("/showmap.jsp").forward(request,response);
}
}
}

现在写成这样……但是一点提交,跳转到public页面,然后里面的静态文本全部变成“??”了……怎么回事……
warden325 2007-11-24
  • 打赏
  • 举报
回复
额……刚才的问题原来是TOMCAT服务器没刷新所以一直只显示前半个接口……

谢谢上面两位达人……

现在的问题是上面的那个addr.txt如果想放在根目录那应该怎么写?像我那么写似乎不会创建这个文件……同样还有那个fz.jpg文件如果在根目录应该怎么读入……

这个东西被我七搞八搞现在页面输出全部变成??了……

我现在效果不要求很好……只要求能够从表单中读入用户输入的两个串(中文似乎就变乱码了?这个不懂要怎么解决……)……然后检查fz.jpg有没有被更新……如果被更新就将那张图片显示出来……

达人们有没有比较好的建议或者参考代码?

感激不尽……
swoky 2007-11-24
  • 打赏
  • 举报
回复
output.println("waiting...");//页面上没显示,不知道提示是不是这样输出的?

这样肯定是不会输出的,output.println("");不是即时的
要等这个servlet执行完后页面才会有反应的,而你的执行完后又跳到另外一个地方去了,那就看不到了
microsealkey 2007-11-24
  • 打赏
  • 举报
回复
如果你想在页面上显示,那应该在showmap.jsp中写相应代码,否则没法知道你的
output.println("waiting...");
output.println("Timeout!");
应该显示在什么地方。

另外,如果你不打算forward,则应该有output.flush();output.close();这样的语句。
这会将你上面的println()直接返回给客户端。注意,这不算是一个完整的页面。因为没有<html><body>等标准元素。

最后,你的代码估计达不到需要的效果。可能的结果是,一次性返回多个"waiting..."给客户端,而不是逐个返回。
从我的估计来看,也需要使用ajax才能达到你想要的效果。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧