《Servlet、JSP和Spring MVC初学指南》——1.3 编写基础的Servlet应用程序

简介: 其实,编写Servlet应用程序出奇简单。只需要创建一个目录结构,并把Servlet类放在某个目录下。本节将教你如何编写一个名为app01a的Servlet应用程序。最初,它会包含一个Servlet,即MyServlet,其效果是向用户发出一条问候。

本节书摘来自异步社区《Servlet、JSP和Spring MVC初学指南》一书中的第1章,第1.3节,作者:【加】Budi Kurniawan(克尼亚万) , 【美】Paul Deck著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 编写基础的Servlet应用程序

其实,编写Servlet应用程序出奇简单。只需要创建一个目录结构,并把Servlet类放在某个目录下。本节将教你如何编写一个名为app01a的Servlet应用程序。最初,它会包含一个Servlet,即MyServlet,其效果是向用户发出一条问候。

要运行Servlets,还需要一个Servlet容器。Tomcat是一个开源的Servlet容器,它是免费的,并且可以在任何能跑Java的平台上运行。如果你到现在都还没有安装Tomcat,就应该去看看附录A,并安装一个。

1.3.1 编写和编译Servlet类
确定你的机器上有了Servlet容器后,下一步就要编写和编译一个Servlet类。本例中的Servlet类是MyServlet,如清单1.1所示。按照惯例,Servlet类的名称要以Servlet作为后缀。

清单1.1 MyServlet类

package app01a;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
public class MyServlet implements Servlet {

    private transient ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig)
            throws ServletException {
        this.servletConfig = servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public String getServletInfo() {
        return "My Servlet";
    }

    @Override
    public void service(ServletRequest request,
            ServletResponse response) throws ServletException,
            IOException {
        String servletName = servletConfig.getServletName();
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.print("<html><head></head>"
                + "<body>Hello from " + servletName
                + "</body></html>");
    }

    @Override
    public void destroy() {
    }
}

看到清单1.1中的代码时,可能首先注意到的是下面这个标注:

@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
WebServlet标注类型用来声明一个Servlet。命名Servlet时,还可以暗示容器,是哪个URL调用这个Servlet。name属性是可选的,如有,通常用Servlet类的名称。重要的是urlPatterns属性,它也是可选的,但是一般都是有的。在MyServlet中,urlPatterns告诉容器,/my样式表示应该调用Servlet。

注意,URL样式必须用一个正斜杠开头。

Servlet的init方法只被调用一次,并将private transient变量ServletConfig设为传给该方法的ServletConfig对象:

private transient ServletConfig servletConfig;

@Override
public void init(ServletConfig servletConfig)
        throws ServletException {
    this.servletConfig = servletConfig;
}

如果想通过Servlet内部使用ServletConfig,只需要将被传入的ServletConfig赋给一个类变量。

Service方法发送字符串“Hello from MyServlet”给浏览器。对于每一个针对Servlet进来的HTTP请求,都会调用Service方法。

为了编译Servlet,必须将Servlet API中的所有类型都放在你的类路径下。Tomcat中带有servlet-api.jar文件,其中包含了javax.servlet的成员,以及javax.servlet.http包。这个压缩文件放在Tomcat安装目录下的lib目录中。

1.3.2 应用程序目录结构
Servlet应用程序必须在某一个目录结构下部署。图1.2展示了app01a的应用程序目录。

screenshot

图1.2 应用程序目录

这个目录结构最上面的 app01a 目录就是应用程序目录。在应用程序目录下,是WEB-INF目录。它有两个子目录:

classes。Servlet类及其他Java类必须放在这里面。类以下的目录反映了类包的结构。在图1.2中,只部署了一个类:app01a.MyServlet。
lib。Servlet应用程序所需的JAR文件要在这里部署。但Servlet API的JAR文件不需要在这里部署,因为Servlet容器已经有它的备份。在这个应用程序中,lib目录是空的。空的lib目录可以删除。
Servlet/JSP应用程序一般都有JSP页面、HTML文件、图片文件以及其他资料。这些应该放在应用程序目录下,并且经常放在子目录下。例如,所有的图片文件可以放在一个image目录下,所有的JSP页面可以放在jsp目录下,等等。

放在应用程序目录下的任何资源,用户只要输入资源URL,都可以直接访问到。如果想让某一个资源可以被Servlet访问,但不可以被用户访问,那么就要把它放在WEB-INF目录下。

现在,准备将应用程序部署到Tomcat。使用Tomcat时,一种部署方法是将应用程序目录复制到Tomcat安装目录下的webapps目录中。也可以通过在Tomcat的conf目录中编辑server.xml文件实现部署,或者单独部署一个XML文件,这样就不需要编辑server.xml了。其他的Servlet容器可能会有不同的部署规则。关于如何将Servlet/JSP应用程序部署到Tomcat的详细信息,请查阅附录A。

部署Servlet/JSP应用程序时,建议将它部署成一个WAR文件。WAR文件其实就是以.war作为扩展名的JAR文件。利用带有JDK或者类似WinZip工具的JAR软件,都可以创建WAR文件。然后,将WAR文件复制到Tomcat的webapps目录下。当开始启动Tomcat时,Tomcat就会自动解压这个war文件。部署成WAR文件在所有Servlet容器中都适用。我们将在第13章讨论更多关于部署的细节。

1.3.3 调用Servlet
要测试这个Servlet,需要启动或者重启Tomcat,并在浏览器中打开下面的URL(假设Tomcat配置为监听端口8080,这是它的默认端口):

http://localhost:8080/app01a/my
其输出结果应该类似于图1.3。

screenshot

图1.3 MyServlet的响应结果

恭喜,你已经成功编写了第一个Servlet应用程序!

相关文章
|
1月前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
21 1
|
1月前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
19 0
|
2月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
11 0
|
2月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
25天前
|
前端开发 Java 数据库连接
Spring系列文章1:Spring入门程序
Spring系列文章1:Spring入门程序
|
3月前
|
缓存 Java 数据库
优化您的Spring应用程序:缓存注解的精要指南
优化您的Spring应用程序:缓存注解的精要指南
47 0
|
2天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
13 3
|
10天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
1月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
8 0
|
1月前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
15 0