server_server2005 - CSDN
  • 对于企业网络中的基本核心架构的组成,精选了网络环境的管理、用户管理、共享文件系统的调试和管理,以及DHCP、DNS、Active Directory这几个常用的基础服务,并且对于全新出现的Server Core主机的部署与管理进行了...
  • >>> docker pull ubuntu >>> docker run -v /home/pi/share:/root/share -p 8888:8888 -p 3100:3100 -itd ubuntu:latest >>... docker exec -it xxxx /bin/bash ...# 安装zs...
    >>> docker pull ubuntu
    >>> docker run -v /home/pi/share:/root/share -p 8888:8888 -p 3100:3100 -itd ubuntu:latest
    >>> docker exec -it xxxx /bin/bash
    
    • 安装zsh、oh-my-zsh

    # 安装zsh
    >>> apt install zsh
    # 修改默认sh
    >>> chsh -s /bin/zsh
    # 安装git
    >>> apt install git
    # 安装curl
    >>> apt install curl
    # 安装oh-my-zsh
    >>> sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
    # 重启
    >>> reboot now
    
    • 安装vim修改配置

    >>> apt install vim
    >>> vim .vimrc
    set nocompatible "去掉vi的一致性"
    set number "显示行号"
    set guioptions-=r " 隐藏滚动条"    
    set guioptions-=L
    set guioptions-=b
    set showtabline=0 "隐藏顶部标签栏"
    set guifont=Monaco:h13 "设置字体"        
    syntax on   "开启语法高亮"
    set background=dark     "设置背景色"
    set nowrap  "设置不折行"
    set fileformat=unix "设置以unix的格式保存文件"
    set cindent     "设置C样式的缩进格式"
    set tabstop=4   "设置table长度"
    set shiftwidth=4        "同上"
    set showmatch   "显示匹配的括号"
    set scrolloff=5     "距离顶部和底部5行"
    set laststatus=2    "命令行为两行"
    set fenc=utf-8      "文件编码"
    set backspace=2
    set mouse=a     "启用鼠标"
    set selection=exclusive
    set selectmode=mouse,key
    set matchtime=5
    set ignorecase      "忽略大小写"
    set incsearch
    set hlsearch        "高亮搜索项"
    set noexpandtab     "不允许扩展table"
    set autoread
    set cursorline      "突出显示当前行"
    set cursorcolumn        "突出显示当前列"
    set ts=4
    set expandtab
    set autoindent
    
    • 安装中文

    >>> apt install language-pack-zh-hans
    >>> vim /var/lib/locales/supported.d/local
    en_US.UTF-8 UTF-8
    zh_CN.UTF-8 UTF-8
    zh_CN.GBK GBK
    zh_CN GB2312
    >>> locale-gen
    >>> apt-get install fonts-droid-fallback ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming
    >>> vim .zshrc
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    >>> source .zshrc
    
    • 安装ss、proxyxxxxxx

    • 安装Python与包

    >>> apt install python3, python3-dev
    >>> python3 -m pip install --upgrade pip
    # >>> apt install python3-pip
    # 安装lxml时需要下面两个包,否则会报错
    >>> apt install libxml2-dev libxslt1-dev
    # 安装matplotlib时需要下面的包,否则会报错
    >>> apt install libfreetype6-dev
    >>> pip3 install pandas numpy matplotlib lxml xlrd xlsxwriter requests bs4 impyla sqlalchemy apscheduler pymysql py3amf
    

    注:
    sqlalchemy依赖impyla,否则会报错:

    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/dist-packages/apscheduler/executors/base.py", line 125, in run_job
        retval = job.func(*job.args, **job.kwargs)
      File "crawl_dw_so_customerinfo.py", line 64, in main
        engine = data.create_engine()
      File "crawl_dw_so_customerinfo.py", line 15, in create_engine
        engine = sqlalchemy.create_engine('impala://{}:{}/{}'.format(self.ip, self.port, self.database))
      File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/__init__.py", line 435, in create_engine
        return strategy.create(*args, **kwargs)
      File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/strategies.py", line 61, in create
        entrypoint = u._get_entrypoint()
      File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/url.py", line 172, in _get_entrypoint
        cls = registry.load(name)
      File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/util/langhelpers.py", line 240, in load
        "Can't load plugin: %s:%s" % (self.group, name)
    sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:impala
    

    如果无法安装impyla,错误中有:

    xxxxxxxxxx: fatal error: Python.h: No such file or directory
    

    则先安装python3-dev
    如果要使用pyhanlp,则需要安装OpenJDK

    apt install openjdk-8-jre
    pip3 install pyhanlp
    
    • 设置时区

    Ubuntu server默认没有设置时区,会导致无法使用apscheduler进行定时运行程序,安装tzdata设置时区:

    >>> apt install tzdata
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      tzdata
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 190 kB of archives.
    After this operation, 3,106 kB of additional disk space will be used.
    Get:1 http://ports.ubuntu.com/ubuntu-ports bionic-updates/main armhf tzdata all 2019b-0ubuntu0.18.04 [190 kB]
    Fetched 190 kB in 2s (102 kB/s)                    
    debconf: delaying package configuration, since apt-utils is not installed
    Selecting previously unselected package tzdata.
    (Reading database ... 21572 files and directories currently installed.)
    Preparing to unpack .../tzdata_2019b-0ubuntu0.18.04_all.deb ...
    Unpacking tzdata (2019b-0ubuntu0.18.04) ...
    Setting up tzdata (2019b-0ubuntu0.18.04) ...
    debconf: unable to initialize frontend: Dialog
    debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
    debconf: falling back to frontend: Readline
    Configuring tzdata
    ------------------
    
    Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located.
    
      1. Africa  2. America  3. Antarctica  4. Australia  5. Arctic Ocean  6. Asia  7. Atlantic Ocean  8. Europe  9. Indian Ocean  10. Pacific Ocean  11. System V timezones  12. US  13. None of the above
    Geographic area: 6
    
    Please select the city or region corresponding to your time zone.
    
      1. Aden      9. Baghdad   17. Chita       25. Dushanbe          33. Irkutsk    41. Kashgar       49. Macau         57. Omsk        65. Rangoon        73. Taipei    81. Ujung Pandang  89. Yekaterinburg
      2. Almaty    10. Bahrain  18. Choibalsan  26. Famagusta         34. Istanbul   42. Katmandu      50. Magadan       58. Oral        66. Riyadh         74. Tashkent  82. Ulaanbaatar    90. Yerevan
      3. Amman     11. Baku     19. Chongqing   27. Gaza              35. Jakarta    43. Khandyga      51. Makassar      59. Phnom Penh  67. Sakhalin       75. Tbilisi   83. Urumqi
      4. Anadyr    12. Bangkok  20. Colombo     28. Harbin            36. Jayapura   44. Kolkata       52. Manila        60. Pontianak   68. Samarkand      76. Tehran    84. Ust-Nera
      5. Aqtau     13. Barnaul  21. Damascus    29. Hebron            37. Jerusalem  45. Krasnoyarsk   53. Muscat        61. Pyongyang   69. Seoul          77. Tel Aviv  85. Vientiane
      6. Aqtobe    14. Beirut   22. Dhaka       30. Ho Chi Minh City  38. Kabul      46. Kuala Lumpur  54. Nicosia       62. Qatar       70. Shanghai       78. Thimphu   86. Vladivostok
      7. Ashgabat  15. Bishkek  23. Dili        31. Hong Kong         39. Kamchatka  47. Kuching       55. Novokuznetsk  63. Qostanay    71. Singapore      79. Tokyo     87. Yakutsk
      8. Atyrau    16. Brunei   24. Dubai       32. Hovd              40. Karachi    48. Kuwait        56. Novosibirsk   64. Qyzylorda   72. Srednekolymsk  80. Tomsk     88. Yangon
    Time zone: 70
    
    
    Current default time zone: 'Asia/Shanghai'
    Local time is now:      Tue Sep 24 17:06:40 CST 2019.
    Universal Time is now:  Tue Sep 24 09:06:40 UTC 2019.
    Run 'dpkg-reconfigure tzdata' if you wish to change it.
    

    2019-09-28 更新

    • 设置双网卡并开机自动执行

    >>> ip route add 10.0.0.0/8 via 10.x.x.x
    >>> route delete default gw 10.x.x.x enp3s0
    

    机器重新启动后无法生效,通过将上面的命令添加至rc.local开机自动运行

    >>> sudo cp /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
    >>> sudo vim /etc/rc.local
    #!/bin/sh -e
    
    ip route add 10.0.0.0/8 via 10.x.x.x
    route delete default gw 10.x.x.x enp3s0
    
    exit 0
    >>> sudo chmod a+x /etc/rc.local
    >>> sudo systemctl enable rc-local
    >>> sudo reboot now
    # 启动
    >>> sudo systemctl start rc-local.service
    # 查看启动日志
    >>> sudo systemctl status rc-local.service
    

    参考

    如果在’sudo systemctl enable rc-local’后出现:

    The unit files have no installation config (WantedBy, RequiredBy, Also, Alias
    settings in the [Install] section, and DefaultInstance for template units).
    This means they are not meant to be enabled using systemctl.
    Possible reasons for having this kind of units are:
    1) A unit may be statically enabled by being symlinked from another unit's
       .wants/ or .requires/ directory.
    2) A unit's purpose may be to act as a helper for some other unit which has
       a requirement dependency on it.
    3) A unit may be started when needed via activation (socket, path, timer,
       D-Bus, udev, scripted systemctl call, ...).
    4) In case of template units, the unit is meant to be enabled with some
       instance name specified.
    

    >>> sudo vim /etc/systemd/system/rc-local.service
    ...
    [Install]
    WantedBy=multi-user.target
    

    参考

    如果每次重启后报错:

    ● rc-local.service - /etc/rc.local Compatibility
       Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
      Drop-In: /usr/lib/systemd/system/rc-local.service.d
               └─debian.conf
       Active: failed (Result: exit-code) since Sat 2019-12-21 03:25:33 UTC; 3min 3s ago
         Docs: man:systemd-rc-local-generator(8)
      Process: 1249 ExecStart=/etc/rc.local start (code=exited, status=2)
    
    Dec 21 03:25:33 ubuntu systemd[1]: Starting /etc/rc.local Compatibility...
    Dec 21 03:25:33 ubuntu rc.local[1249]: Error: Nexthop has invalid gateway.
    Dec 21 03:25:33 ubuntu systemd[1]: rc-local.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
    Dec 21 03:25:33 ubuntu systemd[1]: rc-local.service: Failed with result 'exit-code'.
    Dec 21 03:25:33 ubuntu systemd[1]: Failed to start /etc/rc.local Compatibility.
    

    则可能是由于网络还没启动完全就执行那两条命令,因而用sleep延迟一会儿再执行.

    >>> sudo vim /etc/rc.local
    #!/bin/sh -e
    
    sleep 1
    ip route add 10.0.0.0/8 via 10.8.15.1
    route delete default gw 10.8.15.1 eth1
    
    exit 0
    

    2019-10-02更新

    • 使用中科大源

    >>> vim /etc/apt/sources.list
    # 将 http://ports.ubuntu.com/ 全部替换为 http://mirrors.ustc.edu.cn/
    

    2019-11-18更新

    • 配置双网卡

    # 显示所有网卡
    >>> ifconfig -a
    # 启用xxxx网卡
    >>> sudo ifconfig xxxx up
    # 网卡配置
    >>> sudo vim /etc/netplan/50-cloud-init.yaml
    network:
        ethernets:
            eth0:
                addresses:
                - 192.168.1.202/24
                gateway4: 192.168.1.1
                nameservers:
                    addresses: [8.8.8.8, 8.8.4.4]
                optional: true
            eth1:
                addresses:
                - 10.8.15.52/24
                optional: true
        version: 2
    # 使其生效
    >>> sudo netplan apply
    

    参考:https://www.hi-linux.com/posts/49513.html

    • 设置ssh root用户登录
    >>> sudo passwd root
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    >>> sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    >>> sudo service ssh restart
    

    参考

    • 修改username、hostname
    # 使用root账号登录
    >>> vim /etc/hostname
    >>> usermod -l <newname> -d /home/<newname> -m <oldname>
    >>> sudo reboot now
    

    参考

    • 安装docker (以下方法会安装edge版,而非stable版,不建议使用)

    安装

    >>> curl -sSL https://get.docker.com | sh
    

    配置权限

    >>> cat /etc/group | grep docker # 查找 docker 组,确认其是否存在
    >>> groups # 列出自己的用户组,确认自己在不在 docker 组中
    # 如果 docker 组不存在,则添加之:
    >>> sudo groupadd docker
    # 将当前用户添加到 docker 组
    >>> sudo gpasswd -a ${USER} docker
    # 重启机器
    >>> sudo reboot now
    

    2019-12-29更新

    Kerberos认证依赖库

    impala使用Kerberos认证,则需要安装库

    >>> apt install libsasl2-dev libsasl2-2 libsasl2-modules-gssapi-mit
    >>> pip3 install thrift_sasl==0.2.1
    

    若thift_sasl不为0.2.1版,则有可能报错:

    AttributeError: 'TSocket' object has no attribute 'isOpen'
    

    参考:
    https://github.com/cloudera/impyla/issues/268#issuecomment-522853969
    https://github.com/cloudera/impyla/issues/149#issuecomment-398270409


    2020-01-06更新

    安装jupyterhub

    >>> apt install nodejs
    >>> apt install npm
    >>> apt install libffi-dev
    >>> npm install -g configurable-http-proxy
    >>> pip3 install notebook
    >>> python3 -m pip install jupyterhub
    >>> pip3 install --upgrade cython
    >>> pip3 install --upgrade jupyterthemes
    >>> jt -t oceans16 -f fira -fs 13 -cellw 90% -ofs 11 -dfs 11 -T
    >>> cd /etc
    >>> mkdir jupyterhub
    >>> cd jupyterhub
    >>> jupyterhub --generate-config
    >>> adduser gaoxiang
    >>> chgrp -R gaoxiang notebook
    >>> chown -R gaoxiang notebook
    

    参考:https://blog.cequn.wang/2018/03/10/%E8%85%BE%E8%AE%AF%E4%BA%91-jupyter-notebook%E5%92%8Cjupyterhub/


    2020-01-13更新

    pip切换源、更新pip包

    使用apt install python3-pip安装的pip3无法使用

    pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    

    因而需要重新安装
    因而需要升级至最新版本

    # >>> python3 -m pip install --upgrade pip
    # >>> apt-get remove python3-pip
    # >>> apt autoremove
    >>> pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pip
    

    更新全部pip包

    >>> pip3 freeze --local | grep -v '^-e' | cut -d = -f 1  | xargs -n1 pip3 install -U
    

    如果升级后thrift_sasl自动变为0.3.0,则需要降为0.2.1版

    >>> pip3 install thrift_sasl==0.2.1
    

    2020-04-26更新

    thrift-sasl 0.4.0+版已经修复问题,不再需要指定安装0.2.1版本!

    >>> pip3 install thrift_sasl
    

    参考:https://github.com/cloudera/impyla/issues/268#issuecomment-578007708


    2020-05-07更新


    2020-06-11更新

    • 使用中科大源

    方式1:

    >>> vim /etc/apt/sources.list
    # 将 http://ports.ubuntu.com/ 全部替换为 http://mirrors.ustc.edu.cn/
    

    方式2(树莓派)

    >>> sudo sed -i 's/ports.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    

    2020-06-16更新

    • zsh下docker命令自动补全

    >>> vim ~/.zshrc
    plugins=(git docker docker-compose)
    >>> source $ZSH/oh-my-zsh.sh
    

    2020-07-01更新

    om my zsh没有正常启动

    如果出现oh my zsh没用启动则:

    >>> sudo vim ~/.zshrc
    # 结尾添加
    source $ZSH/oh-my-zsh.sh
    >>> source ~/.zshrc
    

    2020-08-01更新

    安装docker-compose

    树莓派安装

    https://blog.csdn.net/MacwinWin/article/details/107726017

    Linux服务器安装

    官方给的地址下载docker-compose在下载速度非常慢,尤其是阿里云ECS上

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   638  100   638    0     0    492      0  0:00:01  0:00:01 --:--:--   492
      0 11.6M    0  118k    0     0   1290      0  2:38:19  0:01:34  2:36:45     0
    

    所以要换成国内链接,注意版本号要改成最新的

    >>> curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   423  100   423    0     0     72      0  0:00:05  0:00:05 --:--:--   117
    100 11.6M  100 11.6M    0     0  1341k      0  0:00:08  0:00:08 --:--:-- 4709k
    >>> sudo chmod +x /usr/local/bin/docker-compose
    >>> sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    展开全文
  • 一、使用SUN公司在JDK6中提供的新包com.sun.net.httpserver   JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持... Server API来实现,程序员必须自己实现HttpHandler接口,H

    一、使用SUN公司在JDK6中提供的新包com.sun.net.httpserver 


      JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现,程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求,在这里,我们把一个Http请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange传给HttpHandler实现类的回调方法. 
    实现Http Server 


      实现Http Server比较简单,我就不我做解释,只要看下面的代码就能明白。 
    实现Https Server 


      HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,SSL 使用证书来进行验证。对于需要使用 SSL 来保证通信安全的客户端和服务器,都必须创建证书。JSSE 使用的证书要用与 J2SE 一起发布的 Java keytool 来创建。用下列命令来为 HTTP 服务器创建一个 RSA 证书。 
    prompt> keytool -genkey -keystore serverkeys -keyalg rsa -alias qusay 
    这个命令会产生一个由别名 qusay 引用的证书,并将其保存在一个名为 serverkeys 的文件中。产生证书的时候,这个工具会提示我们输入一些信息。 

    下面代码演示了怎样创建自己的Http Server 和Https Server: 

     

    Java代码  收藏代码
    1. import java.io.IOException;   
    2. import java.io.InputStream;   
    3. import java.io.OutputStream;   
    4. import java.net.InetSocketAddress;   
    5. import com.sun.net.httpserver.HttpExchange;   
    6. import com.sun.net.httpserver.HttpHandler;   
    7. import com.sun.net.httpserver.HttpServer;   
    8. public class MyHTTPServer {   
    9.   public static void main(String[] args)   
    10.   {   
    11.     try {   
    12.       //实现HTTP SERVER   
    13.       HttpServer hs = HttpServer.create(new InetSocketAddress(8888),0);// 设置HttpServer的端口为80   
    14.       hs.createContext("/hujun"new MyHandler());// 用MyHandler类内处理到/的请求   
    15.       hs.setExecutor(null); // creates a default executor   
    16.       hs.start();   
    17.   
    18.       //实现HTTPS SERVER   
    19.       HttpsServer hss = HttpsServer.create(new InetSocketAddress(443),0);  //设置HTTPS端口这443   
    20.       KeyStore ks = KeyStore.getInstance("JKS");   //建立证书库   
    21.       ks.load(new FileInputStream("证书名" ), "密码");  //载入证书   
    22.       KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");  //建立一个密钥管理工厂   
    23.       kmf.init(ks, "密码");  //初始工厂   
    24.       SSLContext sslContext = SSLContext.getInstance("SSLv3");  //建立证书实体   
    25.       sslContext.init(kmf.getKeyManagers(), nullnull);   //初始化证书   
    26.       HttpsConfigurator conf = new HttpsConfigurator(sslContext);  //在https配置   
    27.       hss.setHttpsConfigurator(conf);   //在https server载入配置   
    28.       hss.setExecutor(null); // creates a default executor     
    29.       hss.createContext("/"new MyHandler());// 用MyHandler类内处理到/的请求   
    30.       hss.start();   
    31.     } catch (Exception e){   
    32.       e.printStackTrace();   
    33.     }   
    34.   }   
    35. }   
    36.   
    37. class MyHandler implements HttpHandler {   
    38.   public void handle(HttpExchange t) throws IOException {   
    39.     InputStream is = t.getRequestBody();   
    40.     String response = "<font color='#ff0000'>come on baby</font>";   
    41.     t.sendResponseHeaders(200, response.length());   
    42.     OutputStream os = t.getResponseBody();   
    43.     os.write(response.getBytes());   
    44.     os.close();   
    45.   }   
    46. }   

     

     

     

     

     

    二、使用Jetty 


      Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 


      需要最少的包: 
      commons-logging.jar 
      javax.servlet.jar 
      org.mortbay.jetty.jar 
      org.mortbay.jmx.jar 

    下面直接看代码,以嵌入模式启动Jetty,目前貌似不支持HTTPS 

     

    Java代码  收藏代码
    1. import org.mortbay.http.HttpContext;   
    2. import org.mortbay.http.HttpServer;   
    3. import org.mortbay.http.SocketListener;   
    4. import org.mortbay.http.handler.ResourceHandler;   
    5. public class JettySample {   
    6.   public static void main(String[] args) throws Exception   
    7.   {   
    8.     //创建Jetty HttpServer对象   
    9.     HttpServer server = new HttpServer();   
    10.     //在端口8080上给HttpServer对象绑上一个listener,使之能够接收HTTP请求   
    11.     SocketListener listener = new SocketListener();   
    12.     listener.setPort(8080);   
    13.     server.addListener(listener);   
    14.      
    15.     //创建一个HttpContext,处理HTTP请求。   
    16.     HttpContext context = new HttpContext();   
    17.     //用setContextPath把Context映射到(/web)URL上。   
    18.     context.setContextPath("/web");   
    19.     //setResourceBase方法设置文档目录以提供资源   
    20.     context.setResourceBase("C:\\j2sdk1.4.1_05");   
    21.     //添加资源处理器到HttpContext,使之能够提供文件系统中的文件   
    22.     context.addHandler(new ResourceHandler());   
    23.     server.addContext(context);   
    24.     //启动服务器   
    25.     server.start();   
    26.   }   
    27. }   
     

     

    Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。 

     

     

     

     

    三、使用tomcat embedded 


      Tomcat5中的Embeded版本,为大家在应用中集成完整的Web服务提供了尽可能大的空间,不仅使开发者容易获得对标准HTTP的处理,还有SSL的通讯处理,使开发者很容易就可以对原有非Web系统进行扩展以支持瘦客户端应用,通向Web大门的钥匙已经放在这里,剩下的就是看你怎样来发挥了。下面是示例代码: 

     

    Java代码  收藏代码
    1. package tomcat;   
    2. import java.io.File;   
    3. import java.net.InetAddress;   
    4. import org.apache.catalina.Context;   
    5. import org.apache.catalina.Engine;   
    6. import org.apache.catalina.Host;   
    7. import org.apache.catalina.connector.Connector;   
    8. import org.apache.catalina.startup.Embedded;   
    9. public class EmbeddedTomcat {   
    10.   public static void main(String args[]) {   
    11.    try {   
    12.      // Create an embedded server   
    13.      Embedded embedded = new Embedded();   
    14.      String path = new File(".").getCanonicalPath();   
    15.      embedded.setCatalinaHome(path);   
    16.      // Create an engine   
    17.      Engine engine = embedded.createEngine();   
    18.      // Create a default virtual host   
    19.      Host host = embedded.createHost("localhost", path + "/webapps");   
    20.      engine.addChild(host);   
    21.      engine.setDefaultHost(host.getName());   
    22.      // Create the ROOT context   
    23.      Context rootCxt = embedded.createContext("", path + "/webapps/ROOT");   
    24.      rootCxt.setPrivileged(true);   
    25.      host.addChild(rootCxt);   
    26.      // Install the assembled container hierarchy   
    27.      embedded.addEngine(engine);   
    28.      // Assemble and install a default HTTP connector   
    29.      embedded.addConnector(embedded.createConnector(InetAddress.getByName("127.0.0.1"), 8080false));   
    30.      // Start the embedded server   
    31.      embedded.start();   
    32.    }catch( Exception e ) {   
    33.      e.printStackTrace();   
    34.       }   
    35.   }   
    36. }  
    展开全文
  • 本课程是基于 Windows Server 2012 R2 平台,通过这一系列的课程,我们将从小部署开始,为大家介绍 Windows 2012 R2 部署不同的阶段,批量部署的优化思路和实现,全新部署和升级部署的准备和工具,并结合视频教程的...
  • 课程概述 这部教程是windows网络编程课程的第二部分课程:基于udp/ip协议的网络模型 ... 网络编程是互联基石,是程序猿基础必备技能,咱们这部UDP/IP课程为大家介绍有关于UDP/IP基本理论知识的分析,以及5个...
  • AndServer初探

    2019-01-04 17:21:25
    AndServer初探 详细了解请戳这里 AndServer的github地址【https://github.com/yanzhenjie/AndServer】 AndServer文档地址【https://www.yanzhenjie.com/AndServer/】 AndServer的相关博客地址...

    AndServer初探

    详细了解请戳这里

    一度为快

    特殊的需求

    • 需求
      • 是否让Android应用成为一台服务器
    • 好处
      • 如果一个应用是Android应用,假设这时候需要外部有个服务来控制这台设备的某些内容或数据的传输,这时候如果用服务器来作为媒介和数据交换中心,不是不可以,这样做的话带来的问题是数据的延迟性和成本的代价;假设不通过第三方的服务器直接和Android应用直接通讯,这样不仅可以减少数据传输中时间,还可以减少开发的复杂度,最终的目的是尽可能快的进行数据的交换,完成两个应用的交互
    • Android上使用什么来完成Http服务器
      • ApacheHttpCore是一个优秀的Http底层框架,支持构建服务器,也支持构建客户端(有的Android版本弃用了ApacheHttpClient相关的API,用的话记得进行引用)

    AndServer是什么

    • AndServer是Android平台的Web Server和Web FrameWork,它基于编译时注解提供了类似Spring注解和功能,通过给类和方法加上合适的注解,使得这些方法可以以接口的形式暴露给http请求者。

    AndServer的特性

    • 使用注解开发接口
    • 全局使用请求拦截器,可以使用注解,全局多个
    • 全局异常处理器,可以使用注解,全局唯一
    • 全局消息转换器,可以使用注解,全局唯一

    AndServer的架构

    • Linux Kernel(linux核心) -> Socket(长连接) -> HttpParser(Http解析) -> FrameWork(框架) -> Handler(处理机)

    Android的应用架构

    • Dispatcher(分发器) -> Interceptor(拦截器) -> HanderAdapter(处理适配器) -> Handler(处理机) -> ViewReslover(视图解析器)

    注解

    注解 用途
    Controller 控制器,给类进行注解

    如果需要要返回指定的页面,则需要Controller配合视图解析器InternalResourceViewResolver才行,如果需要返回json、xml或自定义mediaType内容到页面,则需要在对应的方法上加@ResponseBody注解
    RestController 控制器,给类进行注解

    RestController注解相当于是@Controller+@ResponseBody注解的结合

    如果只使用RestController注解,则该类的方法中无法返回jsp页面(或者是html),配置视图解析器InternalResourceViewResolver不起作用,返回的内容就是return的内容
    RequestMapping 可以用在类上,也可以用在方法上

    注意:使用时所在类必须有Controller或者是RestController方法才有意义

    RequestMapping可以规定接口的请求路径、请求方法、参数校验、请求头校验、Accept和ContentType等重要规则
    RequestParam 只能用在方法参数上,用来获取客户端传来的参数
    PathVariable 只能用在方法参数上,用来获取客户端的path参数
    QueryParam 只能用在方法参数上,不支持MultipartFile,仅用来获取Url中的参数
    FormPart 只能用在方法参数上,仅用在获取Form中的参数
    ResponseBody 注解ResponseBody使用在Controller注解类下的方法上,相当于使用了注解RestController给类一样,直接将返回值作为响应发送给客户端
    RequestBody 客户端可以把一段json或者一个文本整体写到请求的Body中发送给服务端,服务端的处理方式有两种,第一种是拿到RequestBody对象,由开 发者自行转换为目标对象,第二种是使用RequestBody注解结合MessageConverter自动转化为目标对象
    CookieValue 方便获取客户端提交的Cookie的值
    RequestHeader 方便获取客户端的Header值
    Addition 用在方法上,增加一些额外的信息,方便在HandlerInterceptor(拦截器)中处理一些业务,例如标记方法登录后才可以访问@Addition(“needlogin”)
    Interceptor Interceptor是拦截器的意思标记某个类是HandlerIntercept的子类,并且作为拦截器参与;可以添加多个类,所有添加了Interceptor注解的类都将参与程序运行
    Converter Converter是转换器的意思,标记某个类是MessageConverter的子类,并作为消息转换器参与;可以添加多个类,但是只有其中一个参与运行,先扫描到哪个就先执行哪个,因此最好是一个类添加Converter注解
    Resolver Resolver是解决者的意思,用来标记某个类是ExceptionResolver的子类,并作为异常解决者参与;Resolver可以添加多个类,但是只有其中一个添加了Resolver注解类参与程序运行,看哪个先被扫描到就先执行哪个,建议只添加一个Resolver注解
    WebSite 用来标记某个类是WebSite的子类,并作为静态网站参与;WebSite可以注解多个类,所有添加了WebSite注解的类都将参与程序的运行

    类和接口

    名称 用途
    MultipartFile 表示客户端表单中上传的文件
    MessageConverter MessageConverter需要结合Converter注解进行使用,首先要一个类实现MessageConverter接口,然后在该类上加上Converter注解即可使用,不需要其它的配置
    HandlerInterceptor 用来拦截客户端对服务端所有的接口的请求,如果是不存在的接口HandlerInterceptor是不会进行处理的,HandlerInterceptor需要结合Interceptor注解使用,首先一个类实现HandlerIterator接口,然后在该类上加上Interceptor注解即可使用,不需要其它配置
    ExceptionResolver 用来处理发生的异常,默认情况下会输出异常到Message到客户端,ExceptionResolver需要结合Resolver注解使用,首先要一个类实现ExceptionResolver接口,然后在该类上加上Resolver注解即可使用,不需要其它的配置
    ResponseBody ResponseBody是响应包,Controller和RestController中的方法返回值最终都会被转化为ResponseBody发送
    RequestBody 客户端可以把一段json或者一个文件整体写到请求的Body中发送给服务端,服务端处理的方式有两种,第一种是使用RequestBody自动转化为目标对象,第二种拿到RequestBody,由开发者转化为目标对象;因此RequestBody最终呈现的形式是通过流,所以客户端可以把任何内容放到RequestBody的请求包中发送到服务器端,服务端可以把RequestBody再转为任何自己想要的数据类型
    Cookie Cookie可以用来辨别用户的身份,一般会加密后发送给客户端,客户端会保存在磁盘上
    Addition Addition类的属性对应的是Addition注解的参数;它和Interceptor配合来进行使用

    网站

    名称 用途
    AssetsWebsite Website需要结合Website注解使用,首先需要一个类继承Website类,然后在该类上加上Website注解即可使用,不需要其他配置
    StorageWebsite Website需要结合Website注解使用,首先需要一个类继承Website类,然后在该类上加上Website注解即可使用,不需要其他配置
    FileBrowser FileBrowser可以以列表的形式展开开发者指定目录的文件和目录,并可以点击下载列表中的文件和查看列表中的目录和内容

    缓存

    名称 用途
    ETag 被添加了Controller注解或者RestController注解的类实现
    LastModified 被添加了Controller注解或者RestController注解的类实现。
    展开全文
  • SQL Server 2017下载安装教程 第一步:打开浏览器,在浏览的搜索框中我们输入“SQL Server”。如图,会匹配出中文两条微软官方下载页面(一个页面内容是英文、一个页面内容是中文)。这里我们以中文的为例。 第二步...

    SQL Server 2017下载安装教程
    SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS)
    第一步:打开浏览器,在浏览的搜索框中我们输入“SQL Server”。如图,会匹配出中文两条微软官方下载页面(一个页面内容是英文、一个页面内容是中文)。这里我们以中文的为例。
    在这里插入图片描述
    第二步:点击进入下载页面后,可以看到如图所示页面,我们不要着急点击下载,因为这些SQL Server只能试用180天(大家从介绍中可以看到)。
    在这里插入图片描述
    第三步:我们将网页下滑,可以看到“还可以下载免费的专用版本”字样,我们选择下方“Developer”版本进行下载,点击下方“立即下载”按钮。
    在这里插入图片描述
    第四步:下载完成后,会得到如图所示.exe文件。我们点击运行该.exe文件。
    在这里插入图片描述
    第五步:会弹出如图所示窗口,让我们选择安装类型,选择“基本”
    在这里插入图片描述
    第六步:我们将语言选择为“中文(简体)”,然后点击下方“接受”按钮。
    在这里插入图片描述
    第七步:我们指定SQL Server的安装位置,然后点击右下角“安装”按钮。在这里插入图片描述
    第八步:如图,会自动进行下载,下载完成后会自动进行安装。

    注:时间会稍微长一点,我们需要耐心等待。在这里插入图片描述
    第九步:至此,SQL Server2017安装成功。

    我们可以看到并没有结束,它还让我们安装“SSMS”,这里我们点击“安装SSMS"。

    注:SSMS即SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。
    在这里插入图片描述
    第十步:会弹出如下所示下载页面。如图,我们点击进行下载。在这里插入图片描述
    第十一步:下载完成后,我们双击运行,在弹出的窗口中选择”安装“按钮,接着,我们等待安装即可。
    在这里插入图片描述
    --------------------------2020.2.27更新----------------------------------------
    可以使用navicat可视化工具连接
    注:SSMS是SQLServer自己提供的客户端登录工具,Navicat是第三方客户端连接工具,不管哪种,都需要自己下载
    navicat官网ow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyODU5ODY0,size_16,color_FFFFFF,t_70)
    首次登录使用window验证连接
    在这里插入图片描述

    展开全文
  • SQL Server 数据库学习

    2018-08-31 20:47:02
    一、认识数据库 1、数据库的基本概念 2、数据库常用对象 3、数据库的组成 ...数据库主要由文件和文件组组成。数据库中所有的数据和对象都被存储在文件中。...(1)选择一个数据库——展开 表——...
  • SQL Server基础(一)

    2018-08-10 11:03:05
    sql SERVER 和.net结合的和很好 绝大多数数据库,都需要数据库服务器才能运行 表间关联,外键 SQL Server数据库中不同数据类型的含义 数据类型 含义 int 每个数值占用 4字节,-2,147,483,648到2,147,...
  • live-server的使用

    2018-01-08 22:48:24
    本地开发常常需要搭建临时的服务,第一时间我们会想到用http-server。...现在live-server实现了三个插件的所有功能,并且很简单就能启动一个看起来很专业的本地服务 NPM全局安装 npm install -g live-server
  • 目录 错误界面 解决方案 第一,设置mysql时区。 第二,同步mysql驱动。 前进的道路充满荆棘。 错误界面 IDEA连接mysql,地址,用户名,密码,数据库名,全都配置好了,点测试连接,咔!...网...
  • 彻底卸载SQL Server

    2019-02-21 17:02:02
    很多人在面对SQL Server出现的一些无法解决的问题时,会选择卸载重装,但是SQL Server卸载不干净的话,后续安装过程会出现很多问题,因此安全干净的卸载软件是很重要的步骤。 1、在运行中输入services.msc,然后...
  • 由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer,从而直接【分离/附加】或者【备份/还原】数据库,在不同版本之间存放。往往就会遇到版本不兼容的问题。前几天遇到了从我本机2008R2上备份的一个...
  • 在我们安装SQL Server之前需要先检查下电脑配置。请点击“系统配置检查器”进行检查。 出现“已通过”的提示则可以进行安装。点击确定进行安装(这里有的人的电脑在“重新启动计算机”会显示不通过。方法
  • 先选择服务器如何选择SQL Server 2012 选择自己要的版本,这里笔者选的是中文企业版,下载地址附上,复制到迅雷下载即可 注意这里的是64位版,如果32位机器去网站上找x86的版本,笔者还是建议换成64位的系统吧 ed...
  • SQL server2008下载安装

    2018-05-08 15:13:47
    SQL server2008 下载安装 目录 一丶SQL server简介 二丶SQL server下载 三丶SQL server安装 四丶SQL server安装过程中的问题以及解决方法 一丶SQL server简介 &nbsp;&nbsp;&nbsp;&...
  •  如果你不小心安装的是sql server 2014 express版本,或者是别的express版本,那你就比较头疼了,而且后期麻烦事也挺多,特别是安装了tfs,总有一天会突然出现这个问题:TF30042:数据库已满,为什么呢?...
  • SQL Server 2017下载内容分为两部分SQL Server 2017 Developer和SQLserver Mamngement Studio 第一部分: 1.官网下载SQL Server 2017 Developer ...
  • “The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.”,在web开发的过程中,看到这一段错误提示,不管是在入门阶段还是已经是web...
  • live-server的安装

    2019-12-03 17:18:00
    一、关于live-server的介绍 live-server插件实现了——修改文件浏览器自动刷新;浏览器自动打开项目;本地开发搭建临时的服务。 二、关于live-server的安装 1:安装node.js 在官网http://nodejs.cn/download/ ...
1 2 3 4 5 ... 20
收藏数 3,754,231
精华内容 1,501,692
关键字:

server