2. 编写与设置Servlet
开发环境的准备与使用
开发环境如下:
-
Java 8
-
Tomcat 8.0
-
Eclipse Java EE
Servlet API 封装在 Tomcat 目录的 lib 子目录中的 servlet-api.jar
Servlet API 架构
public class HttpServlet extends GenericServlet {
getAllDeclaredMethods(Class<?>)
HttpServlet()
doDelete(HttpServletRequest, HttpServletResponse)
doGet(HttpServletRequest, HttpServletResponse)
doHead(HttpServletRequest, HttpServletResponse
doOptions(HttpServletRequest, HttpServletResponse)
doPost(HttpServletRequest, HttpServletResponse)
doPut(HttpServletRequest, HttpServletResponse)
doTrace(HttpServletRequest, HttpServletResponse)
getLastModified(HttpServletRequest)
maybeSetLastModified(HttpServletResponse, long)
service(HttpServletRequest, HttpServletResponse)
service(ServletRequest, ServletResponse)
}
public abstract class GenericServlet implements Servlet, ServletConfig {
GenericServlet()
destroy()
getInitParameter(String)
getInitParameterNames()
getServletConfig()
getServletContext()
getServletInfo()
getServletName()
init()
init(ServletConfig)
log(String)
log(String, Throwable)
service(ServletRequest, ServletResponse)
}
public interface Servlet {
init(ServletConfig)
destroy()
service(ServletRequest, ServletResponse)
getServletConfig()
getServletInfo()
}
public interface HttpServletRequest extends ServletRequest {
...
}
public interface HttpServletResponse extends ServletResponse {
...
}
在 Servlet 的 API 定义中, Servlet
是个接口,定义了 Servlet 生命周期的 init()
、destory()
方法,以及提供服务的 service()
方法。GenericServlet
实现了 Servlet
接口,不过它直接将 sevice()
标示为 abstract
,GenericServlet
还实现了 ServletConfig
接口,将容器初始化 Servlet
调用 init()
时传入的 ServletConfig
封装起来。真正在 service()
方法中定义了 HTTP 请求基本处理流程的时 HttpServlet
,而 doGet()
、doPost()
中传入的参数是 HttpServletRequest
、 HttpServletResponse
,而不是通用的 ServletRequest
、 ServletResponse
。
@WebServlet
@WebServlet(
name="Hello",
urlPatterns={"/hello.view"},
loadOnStartup=1
)
web.xml
在 Web 应用程序的 WEB-INF 目录中,建立一个 web.xml 文件定义 Servlet 相关信息
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cc.openhome.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloUser.view</url-pattern>
</servlet-mapping>
文件组织
Web 容器要求应用程序部署时,必须遵循某个结构
WEB-INF
|- web.xml
|- lib
| |- xxx.jar
|- classes
|- xxx.class
WEB-INF
名称固定,位于根目录下,对外界封闭(客户端无法通过 HTTP 的任何方式直接访问到 WEB-INF 中的文件或目录)
web.xml
Web 应用程序部署描述文件,位于 WEB-INF 根目录下
lib
防止 jar 包
classes
编译后的 .class 文件