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() 标示为 abstractGenericServlet还实现了 ServletConfig 接口,将容器初始化 Servlet 调用 init() 时传入的 ServletConfig 封装起来。真正在 service() 方法中定义了 HTTP 请求基本处理流程的时 HttpServlet,而 doGet()doPost() 中传入的参数是 HttpServletRequestHttpServletResponse,而不是通用的 ServletRequestServletResponse

@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 文件

原文地址:https://www.cnblogs.com/okadanana/p/5932265.html