📄 dispatchsocket.java
字号:
package cn.netjava.feeserver.servletcontainer;
import java.net.*;
import java.io.*;
import cn.netjava.feeserver.cfgbean.*;
/**
*
* 计费查询服务器:将客户端的Sokcet对象包装为请求,应答对象
* @author www.NetJava.cn
*
*/
public class DispatchSocket extends Thread{
/**
* 构造器
* @param socket:将要处理的socket对象
*/
public DispatchSocket( Socket socket){
this.socket=socket;
//多线程运行
this.start();
}
//多线程运行的实行
public void run(){
warpSocket();
}
public void warpSocket(){
java.io.OutputStream ops=null;
java.io.InputStream ips=null;
Response response=null;
try{
ops=socket.getOutputStream();
ips=socket.getInputStream();
response=new Response(ops);
Request request=new Request(ips);
//提取客户端请求的业务名字
CfgServlet cfgServlet=
WebAppCfgManager.ins().getWebApp().getCfgServlet(request.getUrlPattern());
//提取配置对象
String servletClass=cfgServlet.getServletClass();
//载入服务组件
NetJavaServletInterface nji=(NetJavaServletInterface)Class.forName(servletClass).newInstance();
//将配置对象传入给组件模板
nji.setCfgServlet(cfgServlet);
//模板字类具体实现的业务处理方面
nji.service(request, response);
closeSocket(socket,ops);
}catch(Exception ef){
response.setContent(getDefaultHelp(ef.getMessage()));
closeSocket(socket,ops);
LogManager.error("warpSocket error :"+socket.toString()+ " error :"+ef);
}
}
/**
* 关闭socket和输出流
* @param socket
* @param ops
*/
private void closeSocket(Socket socket,OutputStream ops){
try{
ops.flush();
ops.close();
socket.close();
}catch(Exception ef){}
}
private String getDefaultHelp(String msg){
StringBuffer stb=new StringBuffer();
stb.append("<br><hr>");
stb.append("<br>话费查询服务器出错了,请通知管理员 mail: nteJava.cn@gmail.com");
stb.append("<br><hr>");
stb.append("<br>出错信息如下(供技术设计用):<hr>");
stb.append("<br>"+msg);
return stb.toString();
}
private Socket socket;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -