一个只有一个单独的 JSP 页面而没有任何配置好的 servlet 的 web 应用程序基本是没用的。 让我们为这个应用添加一个简单的
servlet ,同时为 pom.xml
和 web.xml
做些改动以支持这个变化。 首先,我们需要在目录 src/main/java
下创建一个名为
org.sonatype.mavenbook.web 的新的包。
$ mkdir -p src/main/java/org/sonatype/mavenbook/web $ cd src/main/java/org/sonatype/mavenbook/web
包创建好之后,切换目录至
src/main/java/org/sonatype/mavenbook/web
,创建一个名为
SimpleServlet.java
的 servlet 类,代码如下:
Example 5.5. SimpleServlet 类
package org.sonatype.mavenbook.web; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println( "SimpleServlet Executed" ); out.flush(); out.close(); } }
我们的 SimpleServlet 仅此而已,一个往响应 Writer
打印一条简单信息的
servlet 。为了把这个 servlet 添加到你的 web 应用,并且使其与请求路径匹配,需要添加如下的
servlet
和 servlet-mapping
元素至你项目的
web.xml
文件。 文件 web.xml
可以在目录
src/main/webapp/WEB-INF
中找到。
Example 5.6. 匹配 Simple Servlet
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>simple</servlet-name> <servlet-class>org.sonatype.mavenbook.web.SimpleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>simple</servlet-name> <url-pattern>/simple</url-pattern> </servlet-mapping> </web-app>
一切文件就绪,准备测试这个 servlet 。 src/main/java
下的类,以及
web.xml 已经被更新了。在启动 Jetty 插件之前,运行 mvn compile
以编译你的项目:
~/examples$ mvn compile
...
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to ~/examples/ch05/simple-webapp/target/classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[4,0] \
package javax.servlet does not exist
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[5,0] \
package javax.servlet.http does not exist
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[7,35] \
cannot find symbol
symbol: class HttpServlet
public class SimpleServlet extends HttpServlet {
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[8,22] \
cannot find symbol
symbol : class HttpServletRequest
location: class org.sonatype.mavenbook.web.SimpleServlet
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[9,22] \
cannot find symbol
symbol : class HttpServletResponse
location: class org.sonatype.mavenbook.web.SimpleServlet
~/ch05/simple-webapp/src/main/java/org/sonatype/mavenbook/web/SimpleServlet.java:[10,15] \
cannot find symbol
symbol : class ServletException
location: class org.sonatype.mavenbook.web.SimpleServlet
编译失败了,因为你的 Maven 项目没有对 Servlet API 的依赖。 在下一节,我们会为你项目的 POM 添加 Servlet API 。