Java学习笔记:Servlet
2017-10-24 21:22
316 查看
JavaWeb三大组件:Servlet,Filter(过滤器),Listener(监听器)
Servlet生命周期:
生命周期的各个阶段:
实例化: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封装了关于这个请求的信息。
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两个原件。
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:
新增的方法:
HttpServletResponse:
随服务器开启时创建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>
通配符要么前缀要么后缀,不能出现在中间,也不能只有通配符。
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>
通配符要么前缀要么后缀,不能出现在中间,也不能只有通配符。
相关文章推荐
- Servlet学习笔记(一)javaWeb应用基本
- Java开发学习笔记之五:Servlet编程API
- 21天学通Java学习笔记-Day14(Tomcar-Servlet-JSP)
- java 从零开始,学习笔记之基础入门<servlet_文件下载>(二十七)
- java学习笔记—Servlet技术(11)
- Java与Flex学习笔记(8)----Flex带进度条的多文件上传(基于Servlet)
- Java开发学习笔记之八:servlet之间的协作
- Java for Web学习笔记(六):Servlet(4)HttpServletResponse
- Java for Web学习笔记(八):Servlet(6)doGet()和doPost()是线程还是队列
- Java Web 学习笔记3——Model 2. Servlet的引入
- 【Java学习笔记】—— Servlet的转发与重定向
- Java学习笔记·Servlet互相传递参数简单实例
- Java Web学习笔记——Servlet
- Java开发学习笔记之七:servlet-控制会话
- Java servlet学习笔记
- 学习笔记--javaWeb-servlet学习1
- Java开发学习笔记之十:servlet事件
- JavaWEB.Servlet(学习笔记)
- [学习笔记]jsp+javaBean+Servlet 的设计模式MVC 的实例
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<servlet_文件下载>(二十七)