一个简单的web应用,可是咋就不行呢?(200分)

  • 主题发起人 主题发起人 flyingbyte
  • 开始时间 开始时间
F

flyingbyte

Unregistered / Unconfirmed
GUEST, unregistred user!
先用FrontPage做了一个页面,就一个文本框、一个Submit按钮、一个Reset按钮。
方法是post,将用户的输入传递给我用delphi写的一个web程序,这个程序根据用户输入查
询数据库后返回一个页面。
问题是,我输入数据后如果敲回车,结果能出来,但如果点Submit,就会报该页无法显示,
内部服务器错。但如果我再刷新一次,结果又出来了。
web服务器:Win2k Server+IIS 5
Delphi 6
哪位大虾帮帮我吧,我搞了好久了!
 
真的没有人知道吗?
 
Delphi的Web程序有错误.
 
的Web程序是用什么控件做的?最好跟踪一下程序的运行!!
 
unit Unit1;

interface

uses
SysUtils, Classes, HTTPApp, DB, DBTables, DBWeb, DBBdeWeb;

type
TWebModule1 = class(TWebModule)
Session1: TSession;
Database1: TDatabase;
Query1: TQuery;
QueryTableProducer1: TQueryTableProducer;
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
WebModule1: TWebModule1;

implementation

{$R *.DFM}

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := Response.Content+'<P>'+'Host : '+Request.Host+'</P>';
Response.Content := Response.Content+'<P>'+'PathInfo : '+Request.PathInfo+'</P>';
Response.Content := Response.Content+'<P>'+ 'QueryFields : '+Request.QueryFields.Text+'</P>';
Response.Content := Response.Content+'<P>'+'ContentFields : '+Request.ContentFields.Text+'</P>';
Handled:=True;
end;

procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
try
QueryTableProducer1.Query.Open;
Response.Content:=QueryTableProducer1.Content;
finally
QueryTableProducer1.Query.Close;
end;
Response.Content:=Response.Content+'<P>'+'ContentFields : '+Request.ContentFields.Text+'</P>';
Response.Content:=Response.Content+'<P>'+'QueryFields:'+ Request.QueryFields.Text+'</P>';
Response.Content:=Response.Content+'<P>The End</P>';
Handled:=True;
end;

end.
 
报告你的 TWebActionItem.PathInfo 设置。
 
最少要加这几句吧.
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := '<html>';
Response.Content := Response.Content+'<head><title></title></head>';
Response.Content := Response.Content+'<body>';
Response.Content := Response.Content+'<P>'+'Host : '+Request.Host+'</P>';
Response.Content := Response.Content+'<P>'+'PathInfo : '+Request.PathInfo+'</P>';
Response.Content := Response.Content+'<P>'+ 'QueryFields : '+Request.QueryFields.Text+'</P>';
Response.Content := Response.Content+'<P>'+'ContentFields : '+Request.ContentFields.Text+'</P>';
Response.Content := Response.Content+'</body>';
Response.Content := Response.Content+'</html>';
Handled:=True;
end;
过程2参见过程1.
 
pathinfo: /query
 
LeeChange,你好。
照你说的加了那几句,还是不行。
其实最让我困惑的是为什么直接敲回车页面就可以正常显示,点Submit却不行,更不可思议
的是,点一下刷新后页面又可以显示了,而且显示出的数据确实是依据用户输入查询出来的。
唉,烦ing
 
应该有 2 个 TWebActionItem.PathInfo 。查是不是相同了。
 
第一个action是default的,没有PathInfo
第二个action的PathInfo是query
 
对此我的做法时:首先检查你的查询网页:可能你的submit按钮value是submit,但是type=button,
如果网页正确了,就跟踪后台的源程序,看传过来的内容是否取正确!
 
type确实是submit.
如果后台程序传过来的内容不正确,为何刷新一次后就可以正常显示?
 
既然是网页正确,就跟踪后台源程序拉,一般可以得出问题所在
 
这是微软的IIS的问题,在Windows Adv Server下面什么问题都没了,
而且,在Delphi的调试环境下也是正常的,Apache中也是正常的
所以,肯定是IIS的问题,建议换用Apache或者安装Windows Adv Server
 
能不能简单说一下Apache的配置。
主要是如何让它正确执行我的web程序,html已经可以显示了。
Win2k
 
现在我在Apache的 httpd.conf 配置文件里加入了“AddHandler isapi-isa .dll”一行,
访问这个DLL说我没有权限。怎么办??
 
原文:
第一个action是default的,没有PathInfo
第二个action的PathInfo是query
---------------------------------------
也就是说,第一个是 "/" 了?建议给一个明确的名称!!!!以解决你的顶贴问题。

原文:
现在我在Apache的 httpd.conf 配置文件里加入了“AddHandler isapi-isa .dll”一行,
访问这个DLL说我没有权限。怎么办??
---------------------------------------
首先 Apache 是否支持 isApi 。
其次,配置文件需要根据模块名来配置,类似(只是例子):
LoadModule isapi-isa_module modules/isapi-isa .dll
<Location /MyItems>
SetHandler isapi-isa-Handler
</Location>
 
我现在把程序改成了cgi,服务端也换成了Apache,第一个action的PathInfo改成了default
第二个action的PathInfo仍然是query。
可是
可是
问题依然:敲回车一切OK,点“查询”就无法显示该页。
聪明的你,告诉我这是怎么回事?
HTML源文件如下:

<%@ Language=VBScript %> <html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>查询程序</title>

</head>

<body>

<p align="center"><b><font size="6" color="#0000FF">查询程序</font></b></p>
<form method="POST" action="/webapp/active.exe/query" name="jieguo" target="_blank">
<p align="center"><input type="edit" name="code" size="25"><input type="submit" value="查询" name="B1"><input type="reset" value="重置" name="B2"></p>

</form>
</body>

</html>
 
很显然:action2有问题,它不能正确返回数据。你刷新实际是action1工作。
 
后退
顶部