2.7.2 Servlet的配置

2.7.2 Servlet的配置

编辑好的Servlet源文件并不能响应用户请求,还必须将其编译成class文件。将编译后的Firstservlet.class文件放在WEB-INF/classes路径下,如果Servlet有包,则还应该将class文件放在对应的包路径下(例如,本例的FirstServlet.class就放在WEB-INF/classes/lee路径下)。
如果需要直接采用javac命令来编译Servlet类,则必须将Servlet API接口和类添加到系统的CLASSPATH环境变量里。也就是将Tomcat 8.5安装目录下lib目录中servlet-api.jarjsp-api.ar添加到CLASSPATH环境变量中.

为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中。配置Servlet时,需要修改web.xml文件。

配置Servlet的两种方式

Servlet3开始,配置Servlet有两种方式。

  • Servlet类中使用@WebServlet注解进行配置。
  • 通过在web.xml文件中进行配置。

@WebServlet注解属性

上面开发Servlet类时使用了@WebServlet注解修饰该Servlet类,使用@WebServlet时可指定如表2.2所示的常用属性。

属性 说明
asyncSupported 指定该Servlet是否支持异步操作模式。关于Servlet的异步调用请参考2.2节
displayName 指定该Servlet的显示名
initParams 用于为该Servlet配置参数
loadOnStartup 用于将该Servlet配置成load-on-startupServlet
name 指定该Servlet的名称
urlPatterns/value 这两个属性的作用完全相同。都指定该Servlet处理的URL

如果打算使用注解来配置Servlet,有两点需要指出。

  • 不要web.xml文件的根元素(<web-app>)中指定metadata-complete="true"“。
  • 不要在web.xml文件中配置该Servlet

使用web.xml配置Servlet步骤

如果打算使用web.xml文件来配置该Servlet,则需要配置如下两个部分。

  • 配置Servlet的名字:对应web.xml文件中的<servlet>元素。
  • 配置ServletURL:对应web.xml文件中的<Servlet-mapping>元素。这一步是可选的。但如果没有为Servlet配置URL,则该Servlet不能响应用户请求。

接下来的ServletFilterListener等相关配置,都会同时介绍使用web.xml配置、使用注解配置两种方式。但实际项目中只要采用任意一种配置方式即可,不需要同时使用两种配置方式。

web.xml中配置Servlet示例

因此,配置一个能响应客户请求的Servlet,至少需要配置两个元素。关于上面的FirstServlet的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 配置Servlet的名字 -->
<servlet>
<!-- 指定Servlet的名字,
相当于指定@WebServlet的name属性 -->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet的实现类 -->
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<!-- 配置Servlet的URL -->
<servlet-mapping>
<!-- 指定Servlet的名字 -->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet映射的URL地址,
相当于指定@WebServlet的urlPatterns属性-->
<url-pattern>/aa</url-pattern>
</servlet-mapping>

如果在web.xm1文件中增加了如上所示的配置片段,则该ServletURL/aa
如果没有在web.xml文件中增加上面的配置片段,那么该Servlet类上的@WebServlet注解就会起作用,该ServletURL/firstServlet

form.jsp

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
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCtype html>
<html>
<head>
<title> 收集参数的表单页 </title>
</head>
<body>
<form id="form1" method="post" action="aa">
用户名:<br/>
<input type="text" name="name"><hr/>
性别:<br/>
男:<input type="radio" name="gender" value="男">
女:<input type="radio" name="gender" value="女"><hr/>
喜欢的颜色:<br/>
红:<input type="checkbox" name="color" value="红">
绿:<input type="checkbox" name="color" value="绿">
蓝:<input type="checkbox" name="color" value="蓝"><hr/>
来自的国家:<br/>
<select name="country">
<option value="中国">中国</option>
<option value="美国">美国</option>
<option value="俄罗斯">俄罗斯</option>
</select><hr/>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>

在表单域中输入相应的数据,然后单击“提交”按钮,效果如图2.32所

在这种情况下,ServletJSP的作用效果完全相同。