java 程序内嵌WEB服务

来源:互联网 发布:摇一摇截图软件大全 编辑:程序博客网 时间:2024/04/30 02:20

1.使用tomcat嵌入式
链接:http://blog.csdn.net/tomyjohn/article/details/6450225
2.使用mina框架模拟:

启动方法:start() {    HttpRequestDecoder.defaultEncoding = "UTF-8";    HttpResponseEncoder.defaultEncoding = "UTF-8";    acceptor = new NioSocketAcceptor();    acceptor.getFilterChain().addLast("protocolFilter",new ProtocolCodecFilter(new HttpServerProtocolCodecFactory()));    acceptor.setHandler(new HttpServerHandler());    acceptor.bind(new InetSocketAddress("0.0.0.0",port));    SocketSessionConfig config = acceptor.getSessionConfig();      config.setReadBufferSize(1024*1024);//1M    config.setIdleTime(IdleStatus.BOTH_IDLE,30*60*1000);//限制时间30分钟}
public class HttpServerProtocolCodecFactory extends DemuxingProtocolCodecFactory {    public HttpServerProtocolCodecFactory() {        super.addMessageDecoder(HttpRequestDecoder.class);        super.addMessageEncoder(HttpResponseMessage.class,HttpResponseEncoder.class);    }}  
public class HttpRequestDecoder extends MessageDecoderAdapter {    @Override    public MessageDecoderResult decodable(IoSession session, IoBuffer in) {        try {            return messageComplete(in) ? MessageDecoderResult.OK : MessageDecoderResult.NEED_DATA;        } catch (Exception ex) {            ex.printStackTrace();        }        return MessageDecoderResult.NOT_OK;    }    @Override    public MessageDecoderResult decode(IoSession session, IoBuffer in,ProtocolDecoderOutput out) throws Exception {        HttpRequestMessage request = decodeBody(in);        if (request == null) {            return MessageDecoderResult.NEED_DATA;        }        String clientIP = ((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress();          request.setIp(clientIP);        out.write(request);        return MessageDecoderResult.OK;    }}
public class HttpResponseEncoder implements MessageEncoder<HttpResponseMessage> {@Override    public void encode(IoSession session, HttpResponseMessage msg , ProtocolEncoderOutput out) throws Exception {    }}
public class HttpServerHandler extends IoHandlerAdapter{    public void messageReceived(IoSession session, Object message) {           HttpRequestMessage request = (HttpRequestMessage) message;          HttpResponseMessage response = new HttpResponseMessage();    }}
public class HttpRequestMessage {    /**     * HTTP请求的主要属性及内容     */    private Map<String, String[]> headers = null;    private String ip;    public Map<String, String[]> getHeaders() {        return headers;    }    public void setHeaders(Map<String, String[]> headers) {        this.headers = headers;    }    public String getIp() {        return ip;    }    public void setIp(String ip) {        this.ip = ip;    }    /**     * 获取HTTP请求的Context信息     */    public String getContext() {        String[] context = headers.get("Context");        return context == null ? "" : context[0];    }    /**     * 根据属性名称获得属性值数组第一个值,用于在url中传递的参数     */    public String getParameter(String name) {        String[] param = headers.get("@".concat(name));        return (param == null || param.length == 0) ? "" : param[0];    }    /**     * 根据属性名称获得属性值,用于在url中传递的参数     */    public String[] getParameters(String name) {        String[] param = headers.get("@".concat(name));        return param == null ? new String[] {} : param;    }    public Map<String,String> getParameters() {        Map<String,String> result = new HashMap<String, String>();        for (String key : headers.keySet()){            if (key.contains("@")){                String[] temp = headers.get(key);                key = key.substring(1,key.length());                result.put(key,temp[0]);            }        }        return result;    }    /**     * 根据属性名称获得属性值,用于请求的特征参数     */    public String[] getHeader(String name) {        return headers.get(name);    }    //public String getPostValue() {    //  String[] param = headers.get("$value");    //  return param == null ? "" : param[0];    //}    @Override    public String toString() {        StringBuilder str = new StringBuilder();        for (Entry<String, String[]> e : headers.entrySet()) {            str.append(e.getKey() + " : " + arrayToString(e.getValue(), ',') + "\n");        }        return str.toString();    }    /**     * 静态方法,用来把一个字符串数组拼接成一个字符串     *      * @param s要拼接的字符串数组     * @param sep数据元素之间的烦恼歌负     * @return 拼接成的字符串     */    public static String arrayToString(String[] s, char sep) {        if (s == null || s.length == 0) {            return "";        }        StringBuffer buf = new StringBuffer();        if (s != null) {            for (int i = 0; i < s.length; i++) {                if (i > 0) {                    buf.append(sep);                }                buf.append(s[i]);            }        }        return buf.toString();    }}
public class HttpResponseMessage {    /** HTTP response codes */    public static final int HTTP_STATUS_SUCCESS = 200;    public static final int HTTP_STATUS_NOT_FOUND = 404;    /** Map<String, String> */    private final Map<String, String> headers = new HashMap<String, String>();    /** Storage for body of HTTP response. */    private final ByteArrayOutputStream body = new ByteArrayOutputStream(1024);    private int responseCode = HTTP_STATUS_NOT_FOUND;    Map<String, Object> datas = new HashMap<String,Object>();    public HttpResponseMessage() {        headers.put("Server", "HttpServer (Mina 2.0)");        headers.put("Cache-Control", "private");        headers.put("Content-Type", "text/html; charset=UTF-8");        headers.put("Connection", "keep-alive");        headers.put("Keep-Alive", "200");        headers.put("Date", new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(new Date()));        headers.put("Last-Modified", new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(new Date()));        headers.put("Access-Control-Allow-Origin","*");    }    public Map<String, String> getHeaders() {        return headers;    }    public void setContentType(String contentType) {        headers.put("Content-Type", contentType);    }    public void setResponseCode(int responseCode) {        this.responseCode = responseCode;    }    public int getResponseCode() {        return this.responseCode;    }    public void appendBody(byte[] buffer, int start, int len) {        try {            body.write(buffer,start,len);        } catch (Exception ex) {            ex.printStackTrace();        }    }    public void appendBody(byte[] b) {        try {            body.write(b);        } catch (Exception ex) {            ex.printStackTrace();        }    }    public void appendBody(String s) {        try {            body.write(s.getBytes());        } catch (IOException ex) {            ex.printStackTrace();        }    }    public IoBuffer getBody() {        return IoBuffer.wrap(body.toByteArray());    }    public int getBodyLength() {        return body.size();    }}
0 0
原创粉丝点击