简单服务器开发(四)结合XML部署服务器端口号

日期工具类:

package com.zda.httpserver.util;import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期工具类
 * @author zda
 * @version 1.0
 * @since   1.0
 *
 */
public class DateUtil {
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

    private DateUtil() {
    }
    /**
     * 获取系统当前时间
     * @return String [yyyy-MM-dd HH:mm:ss SSS]
     */
    public static String getCurrentTime() {
        return dateFormat.format(new Date());
    }
}

日志记录器:

package com.zda.httpserver.util;import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日志记录器
 * @author zda
 * @version 1.0
 * @since   1.0
 *
 */
public class Logger {
    //工具类的方法往往是静态的,不需要创建对象
    //工具类的构造方法往往也是私有的,但不是必须的
    private Logger() {
    }    

    /**
     * 普通日志记录器
     * @param msg
     */
    public static void log(String msg) {
        //输出到控制台
        System.out.println("[INFO]" + DateUtil.getCurrentTime() + msg);

    }

}

xml文档

<!-- server.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<server>
    <service>
        <connector port="8080"></connector>
    </service>
</server>

解析xml文档

package com.zda.httpserver.core;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.*;

/**
 * 解析conf文件夹中的server.xml文件
 * @author zda
 * @version 1.0
 * @since   1.0
 *
 */
public class ServerParser {
    /**
     * 获取服务器的端口号
     * @return int port
     */
    public static int getPort() {
        //设置服务器默认端口号:8080
        int port = 8080;
        try {
            //创建解析器
            SAXReader saxReader = new SAXReader();
            //通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树
            Document document = saxReader.read("conf/server.xml");
            //获取connector节点元素的路径:server -> service -> connector
            //获取connector节点元素的xpath路径:/server/service/connector
            //获取connector节点元素的xpath路径:server//connector
            //获取connector节点元素的xpath路径://connector
            Element connectorElt = (Element) document.selectSingleNode("//connector");
            //获取port属性的值
            port = Integer.parseInt(connectorElt.attributeValue("port"));

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return port;
    }
}

程序入口:

package com.zda.httpserver.core;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import com.zda.httpserver.util.Logger;

/**
 * httpserver主入口
 * @author zda
 * @version 1.0
 * @since   1.0
 *
 */
public class BootStrap {

    public static void main(String[] args) {
        // 程序入口
        start();
    }
    /**
     * 主程序入口
     */
    public static void start() {
        ServerSocket serverSocket = null;
        Socket clientSocket = null;
        BufferedReader br = null;
        try {
            Logger.log("httpserver start");
            //获取当前时间
            long start = System.currentTimeMillis();
            //获取系统端口号
            int port = ServerParser.getPort();
            Logger.log("httpserver-port: " + port);
            //创建服务器套接字,并且绑定端口号:8080
            serverSocket = new ServerSocket(port);
            //获取结束时间
            long end = System.currentTimeMillis();
            Logger.log("httpserver started: " + (end-start) + " ms");
            while(true){
                //开始监听网络,此时程序处于等待状态,等待接收客户端的消息
                clientSocket = serverSocket.accept();
                //接收客户端消息
                br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String temp = null;
                while((temp = br.readLine()) != null){
                    System.out.println(temp);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //关闭资源
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(clientSocket != null){
                try {
                    clientSocket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(serverSocket != null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

}

浏览器访问:

http://localhost:8080/abc?username=123 &password=456

输出结果:

原文地址:https://www.cnblogs.com/zhaideang/p/12299934.html

时间: 2024-10-09 20:20:06

简单服务器开发(四)结合XML部署服务器端口号的相关文章

简单服务器开发(三)Socket 编程

Socket 的英文原义是“孔”或“插座”.通常也称作"套接字",用于描述 IP 地址和端口,可以用来实现不同计算机之间的通信.在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.第一步:服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,

Node简单服务器开发

运用的知识:http,fs,get,post 接口定义:/user?act=reg$user=aaa&pass=bbb后台返回格式:{"ok":false,"msg":"原因"}/user?act=login$user=aaa&pass=bbb后台返回格式:{"ok":true,"msg":"原因"} 前端访问:对文件的访问:http://localhost:8080/1

简单服务器开发(五)多线程服务器

处理客户端请求: package com.zda.httpserver.core; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import com.zda.httpserver.util.Logger; /** * 处理客户端请求 * @author zda * @version 1.0 * @since

JBPM(四)——把流程部署到服务器上

当我们的业务流程被设计开发完毕之后,会有许多相关的文件"散落"在工程中,其中包括: 定义流程的JPDL文件 根据图形化流程定义同步生成的流程图片文件(PNG格式) 业务流程中用于人机交互的表单页面文件 事件监听器等用户自定义代码的Java类文件 其他流程资源文件,例如小图标.css样式表.脚本文件.属性文件等 jbpm4支持将流程定义及其相关资源打包一个JAR(Java归档)格式的文件,部署到服务器上(其实就是服务所连接的JBPM数据库中),然后流程定义就可以被执行了. 一.如何将流程

linux后台服务器开发环境部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

linux后台服务器开发环境部署配置 引言 背景 随着公司互联网业务的不断增多,开发环境变得越来越复杂,为了便于统一服务器端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3(Linux version 2.6.32-279.el6.x86_64) gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) 本次配置 Nginx 1.5.8 Apache 2.4.7 php 5.3.26 目的 构造WEB前端技术架构,web前端的部署结构技术完全完成.

一步一步开发Game服务器(四)地图线程

时隔这么久 才再一次的回归正题继续讲解游戏服务器开发. 开始讲解前有一个问题需要修正.之前讲的线程和定时器线程的时候是分开的. 但是真正地图线程与之前的线程模型是有区别的. 为什么会有区别呢?一个地图肯定有执行线程,但是每一个地图都有不同的时间任务.比如检测玩家身上的buffer,检测玩家的状态值.这种情况下如何处理呢?很明显就需要定时器线程. 我的处理方式是创建一个线程的时候根据需求创建对应的 timerthread 直接上代码其他不BB 1 using System; 2 using Sys

pcDuino的linux移植四简单驱动开发

开发环境系统:ubuntu 10.04.4单板:pcDuino(全志A10)编译器:arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 搭建开发环境详见ubuntu 10.04.4开发环境配置. 目标1.配置 编译linux-3.0.62内核,串口正常输出2.配置内核,支持nfs挂载,启动文件系统3.最简单内核驱动开发 这个是在pcDuino linux移植一.二.三的基础上写的,重点介绍内核驱动开发,其它具体移植过程不再

基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件[转]

上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfire插件.一步步很详细的介绍到简单插件开发,带Servlet的插件的开发.带JSP页面插件的开发,以及怎么样将开发好的插件打包.部署到openfire服务器. 如果你没有看上一篇文章的话,请你还是看看.http://www.cnblogs.com/hoojo/archive/2013/03/07/2947502.html 因为这篇文章是基于上篇文章讲叙的基础上完成插件开发.而且

介绍一款强大的服务器开发工具(JRebel)

它的好处如下: 1. 当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署 好的应用程序上,从而跳过了构建和部署的过程 2. 可以很大的提升程序员开发效率,每年可以省去部署用的时间花费高达5.25个星期. 计算:5.25个星期是啥概念,我们换算一下,减去法定节假日,一年顶多42个星期,约等于1/8的时间都浪费了.如果我们从事服务器开发10年不用JRebe的话,那么我们大概有1年的时间是浪费在了部署重启这个无意义的事情上,是不是感到很震惊呢!! -------- 好了不