一篇带你快速入门Servlet

Servlet技术

什么是Servlet?

  1. Servlet 是 JavaEE 规范之一。规范就是接口
  2. Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
  3. Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

实现 Servlet 程序

  1. 创建web工程
  2. 创建一个类实现Servlet接口
  3. 配置路径

web.xml配置(该文件在web/WEB-INF 文件夹下):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">

	<!-- servlet 标签给Tomcat 配置Servlet 程序 -->
               
<servlet>
<!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
               
	<servlet-name>HelloServlet</servlet-name>
               
<!--servlet-class 是Servlet 程序的全类名-->
    
	<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
        
</servlet>
        
	<!--servlet-mapping 标签给servlet 程序配置访问地址-->
<servlet-mapping>

     <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个Servlet 程序使用-->
        
<servlet-name>HelloServlet</servlet-name>
        
<!--url-pattern 标签配置访问地址 <br/>
/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径	<br/>
/hello 表示地址为:http://ip:port/工程路径/hello	<br/>
-->
    
<url-pattern>/hello</url-pattern>
    
</servlet-mapping>

    
</web-app>

注解方式实现

@WebServlet("/demo")
public class Demo implements Servlet{

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello world...");
    }
    
    .....省略

Servlet 的生命周期

1、执行 Servlet 构造器方法

2、执行 init 初始化方法

3、执行 service 方法

4、执行 destroy 销毁方法

注意:

第一、二步,是在第一次访问的时候创建 Servlet 程序会调用init()方法进行初始化。

第三步,每次访问都会调用,任何一次请求 都会调用service()方法处理这个请求

第四步,在 web 工程停止的时候调用,服务器正常关闭或者项目从服务器移除, 调用destory()方法进行销毁

通过继承 HttpServlet 实现 Servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/Demo")
public class Demo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }
}

快捷方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P18Z9rLD-1606562344566)(C:\Users\Linkin Park\AppData\Roaming\Typora\typora-user-images\image-20201128173616543.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2h6svJl-1606562344568)(C:\Users\Linkin Park\AppData\Roaming\Typora\typora-user-images\image-20201128173852517.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RvKpOMzy-1606562344569)(C:\Users\Linkin Park\AppData\Roaming\Typora\typora-user-images\image-20201128174045417.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMw73HlZ-1606562344571)(C:\Users\Linkin Park\AppData\Roaming\Typora\typora-user-images\image-20201128174400407.png)]

ServletConfig 类

Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。

ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类,可以使用ServletConfig来获得Servlet的初始化参数。

Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。

ServletConfig 类的三大作用

  1. 可以获取 Servlet 程序的别名 servlet-name 的值
  2. 获取初始化参数 init-param
  3. 获取 ServletContext 对象

ServletContext 类

什么是 ServletContext?

  1. ServletContext 是一个接口,它表示 Servlet 上下文对象
  2. 一个 web 工程,只有一个 ServletContext 对象实例。
  3. ServletContext 对象是一个域对象。
  4. ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。

ServletContext 类的四个作用

  1. 获取 web.xml 中配置的上下文参数 context-param
  2. 获取当前的工程路径,格式: /工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像 Map集合一样存取数据

API

  1. getAttribute(String name) ;向ServletContext对象的map取数据
  2. setAttribute(String name, Object object) ;从ServletContext对象的map中添加数据
  3. removeAttribute(String name) ;根据"键"name去移除数据
  4. String getInitParameter(String name) ; //根据配置文件中的key得到value;
  5. String  getRealPath(String path);根据资源名称得到资源的绝对路径.
  6. getResourceAsStream(String path) ;返回制定路径文件的流
@WebServlet("/demo")
public class Demo01 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = getServletContext();
        
        
        String username = "帅哥";

        //将username存储到ServletCOntext中
        servletContext.setAttribute("username",username);
    }
}

		//在另外一个Servlet中获取当前Servlet中的一个数据
  		ServletContext servletContext = getServletContext();

		//从ServletContext对象中获取username
    	String username = (String)servletContext.getAttribute("username");

		//从ServletContext对象中移除数据
		servletContext.removeAttribute("username")

String getInitParameter(String name) ; //根据配置文件中的key得到value;

<!--全局的参数初始化-->
    <context-param>
    	<param-name>name</param-name>
    	<param-value>陈冠希</param-value>
    </context-param>
    
//获取全局初始化参数
    //获取ServletContext对象
    ServletContext servletContext = getServletContext();

	//根据key得到值
	String value = servletContext.getInitParameter("name");
  1. String  getRealPath(String path);根据资源名称得到资源的绝对路径.
  2. getResourceAsStream(String path) ;返回制定路径文件的流
@WebServlet("/demo02")
public class Demo02 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用String  getRealPath(String path);得到资源的绝对路径
        ServletContext servletContext = getServletContext();
        String realPath = servletContext.getRealPath("资源文件名");
        System.out.println(realPath);
        FileInputStream is = new FileInputStream(realPath);
        System.out.println(is);


        //直接使用ServletContext的getResourceAsStream()方法,可以直接将web文件夹中的资源转成字节输入流
        ServletContext servletContext = getServletContext();
        InputStream is = servletContext.getResourceAsStream("资源文件名");
        System.out.println(is);
    }
}

//直接使用ServletContext的getResourceAsStream()方法,可以直接将web文件夹中的资源转成字节输入流
ServletContext servletContext = getServletContext();
InputStream is = servletContext.getResourceAsStream(“资源文件名”);
System.out.println(is);
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值