PAS部署:部署应用报错: There is no web component by the name of default here

在PAS 6.5/7.0环境中部署应用时遇到严重错误,异常信息指出缺少名为'default'的web组件。为了解决此问题,需要编辑WEB-INF下的web.xml文件,添加一个默认servlet的定义,包括'servlet-name'和'servlet-class'等参数。完成修改后,重新部署应用即可解决此异常。

【问题描述】

PAS 6.5/7.0部署应用,后台显示异常,异常信息如下:

[SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=56 _ThreadName=admin-listener(4)] [timeMillis: 1590571729791] [levelValue: 1000] [[部署应用程序 [XXXXX] 时发生异常]]

[SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=56 _ThreadName=admin-listener(4)] [timeMillis: 1590571729868] [levelValue: 1000] [[ Exception during lifecycle processing

java.lang.RuntimeException: There is no web component by the name of default here.
....

【解决方案】

编辑应用WEB-INF下的web.xml文件,增加名称为default的servlet定义,例如如下内容:

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

这个错误信息: ``` [dcc32 Error] MainForm.pas(1013): E2250 There is no overloaded version of 'Write' that can be called with these arguments ``` 说明你正在调用 `TStream.Write` 或 `TWinSocketStream.Write` 方法时,传入的参数与所有 `Write` 的重载版本都不匹配。 --- ## 🔍 原因分析 Delphi 中 `Write` 方法的签名在不同版本或不同类中可能略有不同,尤其是在使用 `TWinSocketStream` 时,它的 `Write` 方法定义如下: ```delphi function Write(const Buffer; Count: Integer): Integer; override; ``` 它接受两个参数: - `const Buffer`:任意类型的缓冲区(如 `TBytes`, `array of Byte`, `PByte`, `string` 等),但需要正确类型转换。 - `Count: Integer`:要写入的字节数。 如果你传入的不是兼容类型(例如 `string` 没有转换为 `PChar` 或 `TBytes`),或者没有正确指定长度,就会出现这个错误。 --- ## ✅ 示例:正确的使用方式 ### ✅ 示例 1:使用 `TBytes` 发送数据 ```delphi var Bytes: TBytes; begin Bytes := TEncoding.UTF8.GetBytes('Hello, Server'); SocketStream.Write(Bytes[0], Length(Bytes)); end; ``` - `Bytes[0]`:将 `TBytes` 转换为 `PByte` 类型(即缓冲区指针)。 - `Length(Bytes)`:要发送的字节数。 --- ### ✅ 示例 2:发送 `Word` 类型(低位在前) ```delphi function WordToBytes_LowFirst(Value: Word): TBytes; begin SetLength(Result, 2); Result[0] := Value and $FF; Result[1] := (Value shr 8) and $FF; end; var crc: Word; crcBytes: TBytes; begin crc := CRC16(data); crcBytes := WordToBytes_LowFirst(crc); SocketStream.Write(crcBytes[0], Length(crcBytes)); // 正确写法 end; ``` --- ### ❌ 错误示例(导致 E2250) ```delphi SocketStream.Write('Hello'); // ❌ 错误!Write 只接受缓冲区指针和长度 ``` 或者: ```delphi SocketStream.Write(Bytes, Length(Bytes)); // ❌ 错误!第一个参数应该是缓冲区的指针 ``` --- ## 🧠 小贴士:如何避免 E2250 错误 - `Write(Buffer, Count)` 中的 `Buffer` 必须是一个指针(如 `PByte(Bytes^)` 或 `Bytes[0]`)。 - 如果你用的是字符串,必须先转换为字节数组或使用 `PChar`: ```delphi SocketStream.Write(PChar('Hello')^, Length('Hello')); ``` --- ## ✅ 完整示例:通过 TClientSocket 发送数据 ```delphi procedure TForm1.SendData; var Data: string; Bytes: TBytes; begin Data := 'Hello, Server'; Bytes := TEncoding.UTF8.GetBytes(Data); if Assigned(ClientSocket1.Socket.Stream) then begin ClientSocket1.Socket.Stream.Write(Bytes[0], Length(Bytes)); end; end; ``` --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值