A Simple NIO-based HTTP/HTTPS Server Example
INTRODUCTION
============
This directory contains a simple HTTP/HTTPS server. HTTP/HTTPS are two
common network protocols that provide for data transfer, and are more
fully described in RFC 2616 and RFC 2818 (Available at
http://www.ietf.org ). HTTPS is essentially HTTP after the connection
has been secured with SSL/TLS. TLS is the successor to SSL, and is
described in RFC 2246.
This server was written to demonstrate some of the functionality new to
the Java 2 platform. The demo is not meant to be a full tutorial, and
assumes the reader has some familiarity with the subject matter.
In particular, it shows:
New I/O (java.nio, java.nio.channels, java.util.regex, java.nio.charset)
Introduced in version 1.4 of the platform, NIO was designed to
overcome some of the scalability limitations found in the
existing blocking java.net.* API's, and to address other
concepts such as Regular Expression parsing and Character
Sets.
This server demonstrates:
ByteBuffer
Blocking and Non-Blocking I/O
SocketChannel
ServerSocketChannel
Selector
CharacterSet
Pattern matching using Regular Expressions
JSSE (javax.net.ssl)
Introduced in version 1.4 of the platform, JSSE provides
network security using SSL/TLS for java.net.Socket-based
traffic. In version 1.5, the SSLEngine API was introduced
which separates the SSL/TLS functionality from the underlying
I/O model. By making this separation, applications can adapt
I/O and compute strategies to best fit their circumstances.
This server demonstrates:
Using SSLEngine to create a HTTPS server
Creating simple key material for use with HTTPS
Concurrency Library (java.util.concurrent)
Introduced in version 1.5 of the platform, the concurrency
library provides a mechanism which decouples task submission
from the mechanics of how each task will be run.
This server demonstrates:
A ThreadPool with a fixed number of threads, which is
based on the number of available processors.
SETUP
=====
The server must be built on version 1.5 (or later) of the platform.
Invoking the following should be sufficient:
% mkdir build
% javac -source 1.5 -target 1.5 -d build *.java
The following creates the document root:
% mkdir root
All documents should be placed in this directory.
For HTTPS, the server authenticates itself to clients by using simple
Public Key Infrastructure (PKI) credentials in the form of
X509Certificates. You must create the server's credentials before
attempting to run the server in "-secure" mode. The server is
currently hardcoded to look for its credentials in a file called
"testkeys".
In this example, we'll create credentials for a fictional widget web
site owned by the ubiquitous "Xyzzy, Inc.". When you run this in your
own environment, replace "widgets.xyzzy.com" with the hostname of your
server.
The easiest way to create the SSL/TLS credentials is to use the
java keytool, by doing the following:
(<CR> represents your end-of-line key)
% keytool -genkey -keyalg rsa -keystore testkeys -alias widgets
Enter keystore password: passphrase
What is your first and last name?
[Unknown]: widgets.xyzzy.com<CR>
What is the name of your organizational unit?
[Unknown]: Consumer Widgets Group<CR>
What is the name of your organization?
[Unknown]: Xyzzy, Inc.<CR>
What is the name of your City or Locality?
[Unknown]: Arcata<CR>
What is the name of your State or Province?
[Unknown]: CA<CR>
What is the two-letter country code for this unit?
[Unknown]: US<CR>
Is CN=widgets.xyzzy.com, OU=Consumer Widgets Group, O="Xyzzy, Inc.",
L=Arcata, ST=CA, C=US correct?
[no]: yes<CR>
Enter key password for <mykey>
(RETURN if same as keystore password): <CR>
This directory also contain a very simple URL reader (URLDumper), which
connects to a specified URL and places all output into a specified file.
SERVER EXECUTION
================
% java -classpath build Server N1
Usage: Server <type> [options]
type:
B1 Blocking/Single-threaded Server
BN Blocking/Multi-threaded Server
BP Blocking/Pooled-thread Server
N1 Nonblocking/Single-threaded Server
N2 Nonblocking/Dual-threaded Server
options:
-port port port number
default: 8000
-backlog backlog backlog
default: 1024
-secure encrypt with SSL/TLS
default is insecure
"http://" URLs should be used with insecure mode, and
"https://" for secure mode.
The "B*" servers use classic blocking I/O: in other words, calls to
read()/write() will not return until the I/O operation has completed. The
"N*" servers use non-blocking mode and Selectors to determine which
Channels are ready to perform I/O.
B1: A single-threaded server which completely services each
connection before moving to the next.
B2: A multi-threaded server which creates a new thread for each
connection. This is not efficient for large numbers of
connections.
BP: A multi-threaded server which creates a pool of threads for use
by the server. The Thread pool decides how to schedule those
threads.
N1: A single-threaded server. All accept() and read()/write()
operations are performed by a single thread, but only after
being selected for those operations by a Selector.
N2: A dual-threaded server which performs accept()s in one thread, and
services requests in a second. Both threads use select().
CLIENT EXECUTION
================
You can test the server using any standard browser such as Internet
Explorer or Mozilla, but since the browser will not trust the
credentials you just created, you may need to accept the credentials
via the browser's pop-up dialog box.
Alternatively, to use the certificates using the simple included JSSE
client URLDumper, export the server certificate into a new truststore,
and then run the application using the new truststore.
% keytool -export -keystore testkeys -alias widgets -file widgets.cer
Enter keystore password: passphrase<CR>
Certificate stored in file <widgets.cer>
% keytool -import -keystore trustCerts -alias widgetServer \
-file widgets.cer
Enter keystore password: passphrase<CR>
Owner: CN=widgets.xyzzy.com, OU=Consumer, O="xyzzy, inc.", L=Arcata,
ST=CA, C=US
Issuer: CN=widgets.xyzzy.com, OU=Consumer, O="xyzzy, inc.",
L=Arcata, ST=CA, C=US
Serial number: 4086cc7a
Valid from: Wed Apr 21 12:33:14 PDT 2004 until: Tue Jul 20 12:33:14
PDT 2004
Certificate fingerprints:
MD5: 39:71:42:CD:BF:0D:A9:8C:FB:8B:4A:CD:F8:6D:19:1F
SHA1: 69:5D:38:E9:F4:6C:E5:A7:4C:EA:45:8E:FB:3E:F3:9A:84:01:6F:22
Trust this certificate? [no]: yes<CR>
Certificate was added to keystore
% java -classpath build -Djavax.net.ssl.trustStore=trustCerts \
-Djavax.net.ssl.TrustStorePassword=passphrase \
URLDumper https://widgets.xyzzy.com:8000/ outputFile
NOTE: The server must be run with "-secure" in order to receive
"https://" URLs.
WARNING: This is just a simple example for code exposition, you should
spend more time understanding PKI security concerns.
SOURCE CODE OVERVIEW
====================
The main class is Server, which handles program startup, and is
subclassed by the "B*" and "N*" server classes.
Following a successful accept(), the "B*" variants each create a
RequestServicer object to perform the actual request/reply operations. The
primary differences between the different "B*" servers is how the
RequestServicer is actually run:
B1
没有合适的资源?快使用搜索试试~ 我知道了~
鼎捷ERP Tiptop T100/GP Webservice开发详细步骤 完整例子有4GL源代码 结合安卓开发实现APP功能
共368个文件
java:89个
exe:66个
dll:44个
需积分: 0 44 下载量 133 浏览量
2023-04-28
15:38:05
上传
评论 1
收藏 134.85MB RAR 举报
温馨提示
1、客制好接口程序,编译自己写的程序(以下有登陆的接口的例子) 2、在aws_ttsr v2_ser vice.4gl里添加服务名称 3、在aws_ttsr v2的link里添加新写的端口程序 4、在aws_ttcfg2(集成服务SERVER端设置作业)里维护 5、关闭aws服务 6、重启服务 7、打开网页 8、找到刚才添加的服务名称,就表示成功
资源推荐
资源详情
资源评论
收起资源包目录
鼎捷ERP Tiptop T100/GP Webservice开发详细步骤 完整例子有4GL源代码 结合安卓开发实现APP功能 (368个子文件)
aws_post_asft620.4gl 11KB
aws_login_check2.4gl 7KB
aws_get_barcsft620new.4gl 6KB
aws_get_asft620detail.4gl 4KB
aws_get_asft620.4gl 2KB
jmxremote.access 4KB
APPOK.apk 24.75MB
ASSEMBLY_EXCEPTION 1KB
ASSEMBLY_EXCEPTION 1KB
memory.bat 2KB
Run.bat 46B
fontconfig.bfc 4KB
AccessBridgeCalls.c 45KB
cacerts 151KB
blacklisted.certs 2KB
jvm.cfg 2KB
classlist 82KB
tzdb.dat 105KB
currency.data 4KB
jvm.dll 8.34MB
awt.dll 1.43MB
msvcr120.dll 941KB
msvcr120.dll 941KB
fontmanager.dll 735KB
mlib_image.dll 658KB
msvcp120.dll 645KB
freetype.dll 564KB
lcms.dll 230KB
splashscreen.dll 195KB
jdwp.dll 191KB
jli.dll 185KB
jli.dll 185KB
jpeg.dll 153KB
WindowsAccessBridge-64.dll 153KB
java.dll 151KB
instrument.dll 148KB
hprof.dll 148KB
JavaAccessBridge-64.dll 139KB
sunec.dll 127KB
rxtxSerial.dll 127KB
net.dll 89KB
rxtxParallel.dll 83KB
unpack.dll 72KB
zip.dll 72KB
j2pkcs11.dll 61KB
nio.dll 54KB
sawindbg.dll 43KB
verify.dll 42KB
sunmscapi.dll 31KB
management.dll 30KB
jsound.dll 29KB
jsoundds.dll 25KB
java_crw_demo.dll 24KB
dt_shmem.dll 23KB
dt_socket.dll 19KB
w2k_lsa_auth.dll 18KB
attach.dll 16KB
jaas_nt.dll 15KB
j2pcsc.dll 13KB
npt.dll 13KB
jsdt.dll 12KB
JAWTAccessBridge-64.dll 9KB
jawt.dll 8KB
java.exe 211KB
javaw.exe 211KB
java.exe 211KB
javaw.exe 211KB
unpack200.exe 191KB
unpack200.exe 191KB
jabswitch.exe 28KB
jabswitch.exe 28KB
klist.exe 11KB
servertool.exe 11KB
policytool.exe 11KB
rmiregistry.exe 11KB
orbd.exe 11KB
rmid.exe 11KB
pack200.exe 11KB
ktab.exe 11KB
keytool.exe 11KB
jjs.exe 11KB
tnameserv.exe 11KB
java-rmi.exe 11KB
kinit.exe 11KB
clhsdb.exe 11KB
rmic.exe 11KB
klist.exe 11KB
jcmd.exe 11KB
servertool.exe 11KB
jstat.exe 11KB
jrunscript.exe 11KB
policytool.exe 11KB
rmiregistry.exe 11KB
orbd.exe 11KB
appletviewer.exe 11KB
schemagen.exe 11KB
jstack.exe 11KB
javap.exe 11KB
jdb.exe 11KB
xjc.exe 11KB
共 368 条
- 1
- 2
- 3
- 4
资源评论
weijia3624
- 粉丝: 892
- 资源: 730
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- springboot设计.docx
- 【php毕业设计】校园微博系统-源码(完整前后端+mysql+说明文档+LW).zip
- java智慧园区管理系统源码数据库 MySQL源码类型 WebForm
- 高校本科、专科招生和毕业数据(2008-2022年).dta
- 全新线程池函数,包含资源管理器
- MATLAB使用粒子群算法求解Griewank函数的极小值点
- 云计算-Openstack介绍-架构与理论
- (全新整理)高校本科、专科招生和毕业数据(2008-2022年)
- 【php毕业设计】班级管理系统源码(完整前后端+mysql+说明文档).zip
- 毕业设计项目介绍:深度学习模型在移动端(安卓)的实现.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功