转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/java-servlet/853.html
创建一个webApp详细步骤如下:
1. 在我们的tomcat目录下的webapps 下创建一个自定义目录,作为我们webapp的整个项目目录;这里Himi命名为MyWebApp;
2.然后在 MyWebApp下继续创建一个“WEB-INF”文件夹(必须有),在WEB-INF下创建一个名字为”web.xml”文件(必须有),并且在WEB-INF继续放置一个名为“lib”文件夹(必须有) ,lib下主要用于放置第三方jar包,tomcat自动为我们加载;最后仍旧在WEB-INF中创建一个名为“classes”文件夹(必须有),整个classes文件夹主要用于放置我们编译好的servlet文件;
目录如下图:
3. 第二步中新建的web.xml只需要写入如下内容即可:
1
2
3
4
5
6
7
8
9
10
|
&
lt
;
?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?
&
gt
;
&
lt
;
web
-
app
xmlns
=
"http://java.sun.com/xml/ns/javaee"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version
=
"3.0"
metadata
-
complete
=
"true"
&
gt
;
&
lt
;
/
web
-
app
&
gt
;
|
4. 设置tomcat自动为我们监控目录是否有变化,有变化就自动为我们重新加载,设置方法:
在tomcat目录下,conf/context.xml 打开后将 <Context> 标签加入一个属性,如下:
1
|
&
lt
;
Context
reloadable
=
"true"
&
gt
;
|
5.编写我们第一个Servlet:
IDE 新建一个 Java Project,然后在此项目中加入servlet jar包,此jar包为:
xxx(你的tomcat目录)/lib/servlet-api.jar
6. 新建一个类,继承HttpServlet 并且重写doGet, doPost两个函数,如下:
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
|
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
HelloServlet
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@
Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
// TODO Auto-generated method stub
super
.
doGet
(
req
,
resp
)
;
}
@
Override
protected
void
doPost
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
// TODO Auto-generated method stub
super
.
doPost
(
req
,
resp
)
;
}
}
|
OK, doGet和doPost 都有两个参数:
1). HttpServletRequest 表示客户端传过来的一个请求,然后被Tomcat包装成对象;
2). HttpServletResponse 表示对客户端的一个应答,将数据发送给客户端;
这里假设我们客户端使用get方式访问服务器,那么我们稍微修改下get函数如下:
1
2
3
4
5
6
7
8
9
|
@
Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
PrintWriter
pw
=
resp
.
getWriter
(
)
;
//得到一个输出流
//写给Client端一个简单网页信息
pw
.
println
(
"<html><head></head><body>Server:Hello Client~</body></html>"
)
;
pw
.
flush
(
)
;
pw
.
close
(
)
;
}
|
7. 这里我们虽然编写了一个Servlet,但是无法使用必须通过Tomcat使用,所以我们将刚刚编写的Servlet类找到其对应编译后的.class文件,然后放置我们在tomcat目录下自定义的MyWebApp/WEB-INF/classes文件夹下;
8.修改web.xml让tomcat知道当客户端访问server时候知道什么时候调用使用我们的servlet,将web.xml内容修改如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
&
lt
;
?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?
&
gt
;
&
lt
;
web
-
app
xmlns
=
"http://java.sun.com/xml/ns/javaee"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version
=
"3.0"
metadata
-
complete
=
"true"
&
gt
;
&
lt
;
servlet
&
gt
;
&
lt
;
servlet
-
name
&
gt
;
servlethimi
&
lt
;
/
servlet
-
name
&
gt
;
&
lt
;
servlet
-
class
&
gt
;
HelloServlet
&
lt
;
/
servlet
-
class
&
gt
;
&
lt
;
/
servlet
&
gt
;
&
lt
;
servlet
-
mapping
&
gt
;
&
lt
;
servlet
-
name
&
gt
;
servlethimi
&
lt
;
/
servlet
-
name
&
gt
;
&
lt
;
url
-
pattern
&
gt
;
/
himi
&
lt
;
/
url
-
pattern
&
gt
;
&
lt
;
/
servlet
-
mapping
&
gt
;
&
lt
;
servlet
-
mapping
&
gt
;
&
lt
;
servlet
-
name
&
gt
;
servlethimi
&
lt
;
/
servlet
-
name
&
gt
;
&
lt
;
url
-
pattern
&
gt
;
/
xiaominghimi
&
lt
;
/
url
-
pattern
&
gt
;
&
lt
;
/
servlet
-
mapping
&
gt
;
&
lt
;
/
web
-
app
&
gt
;
|
这里大概解释一下:
1) <servlet-name> 标签是给你的servlet起个名字,整个名字是给tomcat来看的;
2) <servlet-class> 对应你编译后的servlet的类名;
3) <url-pattern> 整个标签主要是告诉tomcat,Client端访问我这个servlet而使用的字段是什么;
这里注意两点:
a) <url-pattern>标签内容要以”/”开头;
b) 每个servlet可以对应很多个访问字段,比如这里我有两个 <servlet-mapping>对应两个访问字段”/himi”,”/xiaominghimi”
到此我们第一个简单的WebApp就完成了,然后我们测试一下;
首先启动tomcat ,打开终端 startup.sh
然后打开你的safari 在地址栏敲入:
http://localhost:8080/MyWebApp/xiaominghimi
或者:
http://localhost:8080/MyWebApp/himi
都可以正常得到如下内容:
整个网页的源码如下:
1
|
&
lt
;
html
&
gt
;
&
lt
;
head
&
gt
;
&
lt
;
/
head
&
gt
;
&
lt
;
body
&
gt
;
Server
:
Hello
Client
~
&
lt
;
/
body
&
gt
;
&
lt
;
/
html
&
gt
;
|
OK,数据获取正常;