赞
踩
从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。
从狭义上来讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类。
在Servlet中通常需要:
实现Servlet有三种方式:
实现Servlet接口需要重写它的(init(),getServletConfig(),service(),getServletInfo(),destory())方法
- public class AServalet implements Servlet {
- @Override
- public void init(ServletConfig servletConfig) throws ServletException {
- }
- @Override
- public ServletConfig getServletConfig() {
- return null;
- }
- @Override
- public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
- }
- @Override
- public String getServletInfo() {
- return null;
- }
- @Override
- public void destroy() {
- }
- }

继承GenericServlet类需要重写它的service方法
- public class AServalet extends GenericServlet {
- @Override
- public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
- }
- }
继承HttpServlet类需要重新doGet和doPost方法
- public class AServalet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- }
- }
运行Servlet需要配置Servlet文件
在web目录下WEB-INF中的web.xml文件配置
- <servlet>
- //名称,随意取, 一般取名类名
- <servlet-name>Servlet02</servlet-name>
- //对应的Servlet类, 全名(包.类名)
- <servlet-class>com.fs.web01.Servlet02</servlet-class>
- </servlet>
- //指定访问路径
- <servlet-mapping>
- <servlet-name>Servlet02</servlet-name>
- //访问路径
- <url-pattern>/Servlet02</url-pattern>
- </servlet-mapping>
我的第一个Servlet应用
- public class Servlet02 extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("Hello Servlet!");
- }
- }
需要在浏览器域名后输入访问路径
name忽略: @WebServlet(name="Servlet02",urlPatterns="/Servlet02") @WebServlet(urlPatterns="/Servlet02") urlPatterns 与value 等同 @WebServlet(value="/Servlet02")
- @WebServlet(value = "/Servlet02")
- public class Servlet02 extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("Hello Servlet!");
- }
- }
接收请求 【解析请求报文中的数据:请求参数】
处理请求 【DAO和数据库交互】
完成响应 【设置响应报文】
所谓生命周期,就是说出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:
void init(ServletConfig);
void service(ServletRequest,ServletResponse);
void destroy();
1.出生:服务器会在Servlet 第一次被访问时创建Servlet ,或者是在服务器启动时创建Servlet 。 如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生 这个方法只会被调用一次。
2.服务:当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。 服务器接收到一次请求,就会调用service() 方法一次 ,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!
3.死亡:Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。
测试生命周期:
- import javax.servlet.*;
- import javax.servlet.annotation.WebServlet;
- import java.io.IOException;
- @WebServlet(value="/Servlet02")
- public class Servlet02 implements Servlet{
-
- @Override
- public void init(ServletConfig servletConfig) throws ServletException {
- System.out.println("我出生啦");
- }
-
- @Override
- public ServletConfig getServletConfig() {
- return null;
- }
-
- @Override
- public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
- System.out.println("我在这里!");
- }
-
- @Override
- public String getServletInfo() {
- return null;
- }
-
- @Override
- public void destroy() {
- System.out.println("我要寄啦!");
- }
- }

启动后
关闭后
ServletConfig接口封装了Servlet配置信息
每一个Servlet都有一个唯一对应的ServletConfig对象,代表当前Servlet的配置信息。
对象由Servlet容器创建,并传入生命周期方法init(ServletConfig config)中。可以直接获取使用。
代表当前Web应用的ServletContext对象也封装到了ServletConfig对象中,使ServletConfig对象成为了获取ServletContext对象的一座桥梁。
获取Servlet名称:getServletName()
获取全局上下文ServletContext对象:getServletContext()
获取Servlet初始化参数:getInitParameter(String) / getInitParameterNames()。
Web容器在启动时,它会为每个Web应用程序都创建一个唯一对应的ServletContext对象,意思是Servlet上下文,代表当前Web应用。
由于一个Web应用程序中的所有Servlet都共享同一个ServletContext对象,所以ServletContext对象也被称为 application 对象(Web应用程序对象)。
对象由Servlet容器在项目启动时创建,通过ServletConfig对象的getServletContext()方法获取。在项目卸载时销毁。
ServletContext对象的主要功能:
a.获取项目的上下文路径(带/的项目名): getContextPath()- @Override
- public void init(ServletConfig servletConfig) throws ServletException {
- //获取路径对象
- ServletContext servletContext = servletConfig.getServletContext();
- //获取具体路径
- String contextPath = servletContext.getContextPath();
- System.out.println(contextPath);
- }
b.获取虚拟路径所映射的本地真实路径:getRealPath(String path)
c. 作为域对象共享数据
setAttribute(key,value):以后可以在任意位置取出并使用
getAttribute(key):取出设置的value值.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。