转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/java-servlet/862.html
关于Jetty 简单来说就是一个servlet的容器,如同tomcat 等,至于详细的介绍请大家自行baidu~google
那么本篇主要介绍jetty server的环境搭建以及简单交互示例:
1. 我们下载Jetty :
http://dist.codehaus.org/jetty/ (Himi这里下载的是 jetty-hightide-8.1.3 )
2 . 打开我们的IDE,Himi这里是eclipse,然后新建一个Java项目 “FirstJettyServer”
3. 配置新建的项目加入必要的jar包,如下图:(这些jar包都可以再刚下载的 jetty中找到)
4. 创建我们的JettyServer 类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import
org
.
eclipse
.
jetty
.
server
.
Server
;
import
org
.
eclipse
.
jetty
.
servlet
.
ServletContextHandler
;
import
org
.
eclipse
.
jetty
.
servlet
.
ServletHolder
;
import
servlet
.
FirstServlet
;
/**
* @author Himi
*/
public
class
ServletServer
{
public
static
void
main
(
String
[
]
args
)
throws
Exception
{
Server
server
=
new
Server
(
8080
)
;
ServletContextHandler
context
=
new
ServletContextHandler
(
ServletContextHandler
.
SESSIONS
)
;
context
.
setContextPath
(
"/"
)
;
server
.
setHandler
(
context
)
;
context
.
addServlet
(
new
ServletHolder
(
new
FirstServlet
(
)
)
,
"/himi"
)
;
context
.
addServlet
(
new
ServletHolder
(
new
FirstServlet
(
"Hello FirstServlet!"
)
)
,
"/xiaominghimi"
)
;
server
.
start
(
)
;
server
.
join
(
)
;
}
}
|
首先new一个Server并且指定端口,然后我们创建一个ServletContextServer类,用来初始化web应用程序的Context,并且指定Servlet和Servlet匹配的url。因为在Jetty中运行一些的Servlet,需要创建Context,然后让创建的Servlet运行在Context中;
而FirstServlet类是个servlet,通过 ServletContextServer 的 addServlet()函数进行添加;
addServlet 函数有两个参数:
1. ServletHolder 对象; 2. 客户端访问的字段
下面是我们的Servlet,这里Himi将类名起为“FirstServlet”,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package
servlet
;
import
java
.
io
.
IOException
;
import
javax
.
servlet
.
ServletException
;
import
javax
.
servlet
.
http
.
HttpServlet
;
import
javax
.
servlet
.
http
.
HttpServletRequest
;
import
javax
.
servlet
.
http
.
HttpServletResponse
;
/**
* @author Himi
*/
public
class
FirstServlet
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
msg
=
"Hello World!"
;
public
FirstServlet
(
)
{
}
public
FirstServlet
(
String
msg
)
{
this
.
msg
=
msg
;
}
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
String
name
=
request
.
getParameter
(
"name"
)
;
String
password
=
request
.
getParameter
(
"password"
)
;
response
.
setCharacterEncoding
(
"UTF-8"
)
;
response
.
setContentType
(
"text/html"
)
;
response
.
setStatus
(
HttpServletResponse
.
SC_OK
)
;
response
.
getWriter
(
)
.
println
(
"<h1>"
+
msg
+
"</h1>"
)
;
response
.
getWriter
(
)
.
println
(
"测试中文</br>session="
+
request
.
getSession
(
true
)
.
getId
(
)
+
"</br>"
)
;
if
(
name
!=
null
)
response
.
getWriter
(
)
.
println
(
"名字:"
+
name
+
"</br>"
)
;
if
(
password
!=
null
)
response
.
getWriter
(
)
.
println
(
" 密码:"
+
password
+
"</br>"
)
;
}
}
|
本类中我们重写doGet函数,关于这个函数不再赘述;
主要看doGet函数中的内容:
一个是:首先我定义了两个字符串,其值是从Http Client端获取过来的,并且重新写给客户端进行显示。
另外一个是由于有中文write给Client端,所以我设置了HttpServletResponse 中 CharacterEncod 为“UTF-8”
注意这个设置编码要再写给Client之前设置!
然后测试下我们的JettyServer端,我们运行ServletServer.java 启动Jetty ;如果正常启动你将看到控制台打印如下信息:
1
2
|
2012
-
05
-
25
12
:
18
:
59.223
:
INFO
:
oejs
.
Server
:
jetty
-
8.1.3.v20120416
2012
-
05
-
25
12
:
18
:
59.553
:
INFO
:
oejs
.
AbstractConnector
:
Started
SelectChannelConnector
@
0.0.0.0
:
8080
|
启动成功后,我们来测试我们书写的第一个FirstServlet 这个Servlet。
1.打开你的safari 或者其他浏览器,然后观察如下图的地址和返回的数据显示:
当然除了基本的访问外,Himi还在我们的FirstServlet中可以接收Client端的两个参数,所以继续观察:
注意:
1. 虽然网址前都有个Tomcat标志,但是当前Himi访问的是我们的Jetty Server的8080端口,而tomcat我是关闭着的;
2. 对于Himi使用 “/xiaominghimi” 跟 “/himi” 进行访问我们的Servlet其实访问的是同一个Servlet,只是Himi为了掩饰服务器端一个是无参数构造,另外一个是有参数构造而已;
3. localhost 等同于 127.0.0.1 ,都是访问本地,测试而用;
4.一般在浏览器中输入网址访问都是 GET方式