Skip to content

1. 示例

Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。

package servlets;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/user")
public class User extends HttpServlet{

    private String msg;

    @Override
    public void init() throws ServletException {
        msg = "Who are you ?";
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter pw = resp.getWriter();
        pw.write("#" + msg);
    }
}

注意:只有设置了返回内容的类型后,其字符集设置才会生效,否则仍会导致乱码。

1.1 Servlet 部署

默认情况下,Servlet 应用程序位于路径 /webapps/ROOT 下,且类文件放在 /webapps/ROOT/WEB-INF/classes 中。

如果您有一个完全合格的类名称 com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中。

URL的映射配置有两种方式,一种是使用@WebServlet(/user)注解,上述代码中已使用;一种是配置web.xml

<web-app>  
    <servlet>
        <servlet-name>User</servlet-name>
        <servlet-class>servlets.User</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>User</servlet-name>
        <url-pattern>/user</url-pattern>
    </servlet-mapping>
</web-app>

注意:这两种方式不能重复配置,即配置了两种方式指向了同一个URL,这样做会导致Tomcat启动失败。

至此部署完成,启动Tomcat:

\bin\startup.bat(在 Windows 上)或 /bin/startup.sh(在 Linux/Solaris 等上)。

访问:http://localhost:8080/user