servlet基本使用与入门

servlet(server applet) 概念

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
(1)servlet (server applet),运行在服务端的小程序
(2)servlet 就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则

servlet 与CGI(Common Gateway Interface,公共网关接口)比较:

1.性能明显更好。
2.Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
3. Servlet 是独立于平台的,因为它们是用 Java 编写的。
4. 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
5. Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

快速入门

1 定义一个类,实现servlet接口

public class ServletDemo 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 {
    System.out.println("Hello world");
}

@Override
public String getServletInfo() {
    return null;
}

@Override
public void destroy() {

}

}

2 配置web.xml

<servlet>
       <servlet-name>FristServlet</servlet-name>
       <servlet-class>com.hello.com.FristServlet</servlet-class>
</servlet>
<!--映射Servlet -- >
<servlet-mapping>  
       <servlet-name>FristServlet</servlet-name>  
       <url-pattern>/test</url-pattern>  
   </servlet-mapping>  
</web-app>

servlet 执行原理

在这里插入图片描述

1 浏览器向服务器发出GET请求
2 服务器上的Tomcat接收到该url,根据该url判断为Servlet请求,此时Tomcat将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)
3 Tomcat根据url找到目标Servlet,且创建一个线程
4 Tomcat将刚才创建的请求对象和响应对象传递给该线程
5 Tomcat调用Servlet的service()方法
6.service()方法根据请求类型(本示例为GET请求)调用doGet()(本示例调用doGet())或doPost()方法
7.doGet()执行完后,将结果返回给Tomcat
8 线程被销毁或被放在线程池中

servlet 的生命周期

1 创建 : 执行 init 方法,只执行一次,用于加载资源
什么时候被创建?
默认情况是第一次访问时候,servlet被创建。
可以配置执行servlet执行的创建时机。
在<servlet>标签下配置
 <load-on-startup>标签下配置
 1 . 第一次访问的时候创建  
       <load-on-startup> 的值为负数
 2. 在服务器启动时,创建
      <load-on-startup> 的值为 0 或者正整数。
servlet的init方法,只执行一次,说明servlet 在内存中只存在一个对象,servlet是单例对象
1 多个用户同时访问,可能存在线程安全问题。
  解决方法:尽量不要在servlet 中定义成员变量,即使定义了成员变量,也不要对其修改。
2 提供服务:执行service 方法,调用一次执行一次

每次访问servlet方法时候都会调用一次

3 销毁:执行destroy 方法,只执行一次()

1 servlet被销毁的时候执行.服务器关闭时候,servlet被销毁。
2 只有 服务器正常关闭时候执行
3 destroy 方法 在servlet被销毁之前执行。一般用于释放资源

servlet 3.0

好处:
支持注解配置,可以不需要web.xml
使用步骤
  1. 创建 web项目,选择 servlet3.0以上 版本,可以不创建 web.xml
  2. 定义一个类,实现servlet 接口
  3. 复写方法
  4. 在类上加注解 @WebServlet
    @WebServlet(“资源路径”)
    实例:
    下面展示一些 内联代码片
@WebServlet(urlPatterns = "/demo")
public class ServletDemo 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 {
        System.out.println("Hello world");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

servlet 的体系结构

   Servlet           ---   (接口) 一个标准

          |

   GenericServlet      --- (抽象类)  是Servlet接口子类

          |

   HttpServlet    -- - (抽象类)   是GenericServlet子类,一个专门处理Http请求的Servlet
  1. GenericServlet : 讲接口中的其他方法做了默认空实现,只将service()方法作为抽象
    要定义servlet类时,只需要继承 GenericServlet ,实现 service 方法;
  2. HttpServlet :对协议Http 的一种封装,操作简单

后期我们一般都使用 HttpServlet 方法

HttpServlet 方法的使用

实例:

@WebServlet("/demo")
public class HttpServletDemo extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("+++++++++++++++++doGet方法+++++++");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("+++++++++++++++++doPost方法+++++++");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值