Java学习笔记:Servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nidhoggz/article/details/78334893

JavaWeb三大组件:Servlet,Filter(过滤器),Listener(监听器)

 

Servlet生命周期:

1,初始化阶段

调用init()方法

2,响应客户请求阶段

调用service()方法

3,终止阶段

调用destroy()方法

 

生命周期的各个阶段:

            实例化:Servlet容器创建Servlet类的实例对象

            初始化:Servlet容器调用Servlet的init()方法

            服务:如果请求Servlet,则容器调用service()方法

            销毁:销毁实例之前调用destroy()方法

            不可用:销毁实例并标记为垃圾处理

 

Servlet的实现方法:

  1. 实现 javax.Servlet.Servlet 接口
  2. 继承 javax.Servlet.GenericServlet
  3. 继承 avax.Servlet.HTTPServlet

 

Servlet中的方法绝大多数不是由我们来调用,而是由Tomcat调用,Servlet的对象也不由我们来实现。

1void        init(ServletConfigconfig) :

创建Servlet的实例后对其进行初始化。实现ServletConfig接口的对象作为参数进行传递。init方法在浏览器请求servlet或webserver启动时加载运行。这个方法只调用一次。

2.void        service(ServletRequestreq, ServletResponse res) :

响应客户端发出的请求。Service()方法接受ServletRequest接口和ServletResponse接口的对象来处理请求和发送响应。这个方法调用多次。

3.void        destroy():

如果不需要处理的请求,则释放Servlet实例。这个方法只调用一次。

 

Servlet是线程不安全的

Servlet中不要创建成员变量,创建局部变量即可。

可以创建无状态成员。

可以创建成员变量,但要是只读的。

 

ServletRequest:

对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给ServletService方法,ServletRequest封装了关于这个请求的信息。

int

getContentLength()

返回请求主体的字节数,如果不知道字节长度,就会返回-1

java.lang.String

getContentType()

返回请求主体的MIME类型,如果不知道类型会返回null

java.lang.String

getParameter(java.lang.String name)

返回请求指定参数的值,通常用于返回HTML表单域中的值

java.lang.String

getProtocol()

返回这个HTTP请求的协议名称和版本

 

ServletResponse:

表示一个Servlet响应,在调用Servlet中的Service()方法前,Servlet容器会先创建一个ServletResponse,并将它作为第二个参数传入Service()方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

通常使用getWriter方法,它返回来一个可以向客户端发送文本的java.io.PrintWriter,默认情况是使用ISO-8859-1编码,大多数情况是将他作为HTML发送的。

 

ServletConfig

Servlet容器初始化Servlet时,Servlet容器会给init()方法传入一个ServletConfig

一个ServletConfig对象对应一段web.xmlServlet的配置信息,一个初始参数有keyvalue两个原件。

java.lang.String

getInitParameter(java.lang.String name)

通过名称获取指定初始化参数的值

java.util.Enumeration<java.lang.String>

getInitParameterNames()

获取所有初始化参数的名称

ServletContext

getServletContext()

获取Servlet上下文对象

java.lang.String

getServletName()

获取的是<Servlet-name>的内容

 

web.xml中配置初始化参数

<servlet>内部的初始化参数

<servlet>…

<init-param>

<param-name>参数名</param-name>

<param-value>参数值</param-value>

</init-param>

…</servlet>

公共的初始化参数

<context-param>

<param-name>context-name</param-name>

<param-value>context-value</param-value>

</context-param>

 

ServletContext:

Java Web 四大域对象:

ServletContext  PageContext ServletRequest  HTTPSession

一个项目只有一个ServletContext对象。

可以通过多个Servlet中获得这个唯一的对象,使用它可以给多个Servlet传递数据,这个对象在Tomcat启动时创建,在Tomcat关闭时才会销毁。

通过context获取资源路径

绝对路径:this.getServletContext().getRealPath("/index.jsp");

相对路径:this.getServletContext().getResourcePaths("/WEB-INF");

获取流:this.getServletContext().getResourceAsStream("/index.jsp");

通过context获得公共的初始化参数:

this.getServletContext().getInitParameter("context-name");

 

GenericServlet:

GenericServlet是实现了ServletServletConfig的抽象类。

GenericServlet通过将ServletConfig赋给init方法中的类级变量ServletConfig来保存ServletConfig

publicvoid init(ServletConfig servletConfig)throws ServletException{

this.servletConfig = servletConfig;

this.init();

}

publicvoid init() throws ServletException{

 

}

可以通过覆盖没有参数的init方法来编写初始化代码,ServletConfig则仍然作为GenericServlet实例保存。

 

HTTPServlet:

HttpServlet类覆盖了javax.servlet.GenericServlet类。

ServletService(ServletRequest,ServletResponse)参数强转为HTTPServletService(HTTPServletRequest,HTTPServletResponse)

然后HttpServlet中的Service方法会检验用来发送请求的HTTP方法(通过调用request.getMethod),并调用以下方法之一:doGetdoPostdoHeaddoPutdoTracedoOptionsdoDelete。因此不需要在覆盖Service方法,只用覆盖doGetdoPost等即可。

使用HttpServletRequestHttpServletResponse,而不是ServletRequestServletResponse

 

HttpServletRequest

新增的方法:

java.lang.String

getContextPath()

返回表示请求上下文的请求URI部分

Cookie[]

getCookies()

返回一个Cookie对象数组

java.lang.String

getHeader(java.lang.String name)

返回指定HTTP标题的值

java.lang.String

getMethod()

返回生成这个请求的HTTP方法名称

java.lang.String

getQuertyString()

返回请求URL中的查询字符串

HttpSession

getSession()

返回与这个请求有关的会话对象,如果没有,将创建一个新的会话对象

HttpSession

getSession(boolean create)

返回与这个请求相关的会话对象,如果有,并且create参数为True,将创建一个新的会话对象

 

HttpServletResponse

void

addCookie(Cookie cookie)

给这个响应对象添加一个cookie

void

addHeader(java.lang.String name,java.lang.String value)

给这个响应对象添加一个header

void

sendRedirect(java.lang.String location)

发送一条响应码,将浏览器跳转到指定的位置

 

随服务器开启时创建Servlet

<load-on-startup>0</load-on-startup>

根据数字进行排序分先后

 

<url-pattern><servlet-mapping>的子元素,用来指定Servlet的访问路径,即URL,必须以“/”开头。

可以给出多个<url-pattern>,可以使用通配符 *

<url-pattern>/Servlet/*</url-pattern>

<url-pattern>*.do</url-pattern>

<url-pattern>/*</url-pattern>

通配符要么前缀要么后缀,不能出现在中间,也不能只有通配符。

猜你喜欢

转载自blog.csdn.net/Nidhoggz/article/details/78334893
今日推荐