servlet的概述

--------------------------servlet的概述-------------------------------------

  1. Servlet概述

1 JavaWeb三大组件

Servlet是JavaWeb三大组件之一,它是我们学习JavaWeb最为基本的组件,也就是说你一定要100%的掌握它。

其它两种:Filter(拦截器)、Listener(观察者模式),后续讲解

2 Servlet的作用

Servlet,即Server Let的意思,用来处理用户请求。当客户端发出请求后,由Tomcat去找到可以处理这一请求的Servlet来处理。

也就是说,用户的请求是由Servlet来处理的!例如用户发出登录请求,那么就应该由处理登录的Servlet来处理;用户发出登录请求,那么就应该有登录Servlet来处理。

 

2·实现一个servlet

 

       servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。也就是说,Servlet是由我们自己来完成的!但Servlet一定要实现javax.servlet.Servlet接口,并且还要在web.xml文件中部署!不然Tomcat是找不到我们写的Servlet的。

 

Servlet接口

javax.servlet.Servlet接口中方法如下:

  1. void init(ServletConfig servletConfig):当Tomcat创建Servlet实例后,马上调用init()方法。这个方法只在创建后调用一次!用来做Servlet初始化工作!一个Servlet实例只被创建一次,所以init()方法也只被调用一次!(本方法编写对Servlet的初始化代码)
  2. void service(ServletRequest request, ServletResponse response):Servlet实例在每次处理请求时都调用service()方法。
  3. void destroy():当Tomcat要销毁Servlet实例时,会先调用destroy()方法,再销毁它。所谓销毁Servlet,其实就是在Servlet缓存池中把Servlet移除!一般只有Tomcat关闭时,才会销毁Servlet实例!
  4. ServletConfig getServletConfig():这个方法返回ServletConfig对象,但我们不能自己去创建ServletConfig对象,所以一般我们会在init()方法中把init()方法的参数保存起来,然后再在本方法中返回它。ServletConfig对象对应web.xml中当前Servlet实例的配置信息。
  5. String getServletInfo():这个方法只是返回一个字符串,用来说明当前Servlet。基本没用!
  1. 第一步:常见HelloServlet实现Servlet的接口,实现接口中的方法

package com.rl.servlet;

 

import java.io.IOException;

 

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

public class LoginServlet implements Servlet {

       /**

        * servlet的销毁方法

        */

       @Override

       public void destroy() {

 

       }

 

       /**

        * servlet的

        */

       @Override

       public ServletConfig getServletConfig() {

              return null;

       }

 

       /**

        * 获得servlet的基本信息

        */

       @Override

       public String getServletInfo() {

              return null;

       }

      

       /**

        * servlet的初始化方法

        */

       @Override

       public void init(ServletConfig arg0) throws ServletException {

 

       }

      

       @Override

       public void service(ServletRequest request, ServletResponse response)

                     throws ServletException, IOException {

              response.getOutputStream().write("I am login...".getBytes());

       }

 

}

 

  1. 第二步:配置servlet的访问路径

<servlet>

  <servlet-name>login</servlet-name>

  <servlet-class>com.rl.servlet.LoginServlet</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>login</servlet-name>

  <url-pattern>/logon</url-pattern>

  </servlet-mapping>

 

当我们写好了LoginServlet类后,还需要在web.xml文件中添加上面的内容。

JavaWeb请求响应原理如下:

当Tomcat接收到请求(http://localhost:8080/servlet_pro/logon)后,Tomcat会找到servlet_pro项目中的web.xml文件,然后通过logon这个请求路径,查找处理这个请求的Servlet类型。这刚好与<url-pattern>/logon</url-pattern>匹配,这说明存在一个可以通过这个请求的Servlet。然后再通过<url-pattern>/logon </url-pattern>查找到<servlet-name>login</servlet-name>,然后再通过<servlet-name>login </servle-name>查找到<servlet-class>com.rl.servlet.LoginServlet</servlet-class>。这时Tomcat已经得到了一个Servlet类名字(一个字符串而已)。

Tomcat通过Servlet类名字去查找内存中是否存在Servlet对象,如果存在,那么就不用再去创建,直接获取这个Servlet实例,调用它的service()方法完成请求!

如果这个Servlet不存在,那么Tomcat会通过反射来创建Servlet实例,并把Servlet实例存放到Servlet池中,再去调用Servlet的service方法处理请求。

 

 

实现servlet例子:

首先创建servlet实现类

package com.rl.servlet;

 

import java.io.IOException;

 

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

public class ServletDemo1 implements Servlet {

 

       /**

        * 执行时机:是Servlet的实例对象被销毁的时候调用

        * 做一些收尾或清理的工作

        */

       @Override

       public void destroy() {

              System.out.println("Servlet组件销毁了");

       }

 

       /**

        * 获得当前的ServletConfig的配置对象

        * @return

        */

       @Override

       public ServletConfig getServletConfig() {

              return null;

       }

 

       /**

        * 获得当前的Servlet的一些属性信息(了解)

        * @return

        */

       @Override

       public String getServletInfo() {

              return null;

       }

 

       /**

        * 执行时机:当Servlet实例被创建的时候被调用,做初始化工作

        * @param arg0

        * @throws ServletException:Servlet的配置对象,初始化的时候可以配置

        */

       @Override

       public void init(ServletConfig arg0) throws ServletException {

              System.out.println("servlet组件被创建了");

       }

 

       /**

        * 执行时机:当一个请求来请求当前Servlet的时候被调用

        * 处理当前Servlet的业务逻辑并且把响应返回给浏览器

        * @param request 请求对象

        * @param response 响应对象

        * @throws ServletException

        * @throws IOException

        */

       @Override

       public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

              System.out.println("响应请求");

              //响应一段字符串

              response.getOutputStream().write("<font color='red'>hello Servlet</font>".getBytes());

       }

 

}

 

再配置web.xml文件信息

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>servlet_demo1</display-name>

  <servlet>

      <!-- 设置servlet的名字 使用英文 -->

      <servlet-name>helloServlet</servlet-name>

      <!-- 具体的servlet的类 -->

      <servlet-class>com.rl.servlet.ServletDemo1</servlet-class>

  </servlet>

 

  <!-- servlet映射 注意的是servlet和servlet-mapping两个元素是成对出现的 -->

  <servlet-mapping>

      <!-- 指定要映射的Servlet的名字 必须和servlet中的名字保持一致 -->

      <servlet-name>helloServlet</servlet-name>

      <!-- servlet的具体映射路径 -->

      <url-pattern>/hello</url-pattern>

  </servlet-mapping>

</web-app>

 

启动tomcat服务器,会打印出init方法和service方法的信息

 

在浏览器中访问servlet_demo1项目,http://localhost:8080/项目名/web.xml中映射下的<url-pattern>/hello</url-pattern>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值