您的位置:首页 > 编程语言 > Java开发

Java学习笔记:Servlet

2017-10-24 21:22 316 查看
JavaWeb三大组件:Servlet,Filter(过滤器),Listener(监听器)
 
Servlet生命周期:

1,初始化阶段
调用init()方法
2,响应客户请求阶段
调用service()方法
3,终止阶段
调用destroy()方法

 
生命周期的各个阶段:
            实例化:Servlet容器创建Servlet类的实例对象
            初始化:Servlet容器调用Servlet的init()方法
            服务:如果请求Servlet,则容器调用service()方法
            销毁:销毁实例之前调用destroy()方法
            不可用:销毁实例并标记为垃圾处理
 
Servlet的实现方法:
实现 javax.Servlet.Servlet
接口
继承 javax.Servlet.GenericServlet

继承 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实例,并将它传给Servlet的Service方法,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.xml中Servlet的配置信息,一个初始参数有key和value两个原件。

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是实现了Servlet和ServletConfig的抽象类。
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类。
将Servlet的Service(ServletRequest,ServletResponse)参数强转为HTTPServlet的Service(HTTPServletRequest,HTTPServletResponse)
然后HttpServlet中的Service方法会检验用来发送请求的HTTP方法(通过调用request.getMethod),并调用以下方法之一:doGet、doPost、doHead、doPut、doTrace、doOptions和doDelete。因此不需要在覆盖Service方法,只用覆盖doGet或doPost等即可。
使用HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse。
 
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>
通配符要么前缀要么后缀,不能出现在中间,也不能只有通配符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息