servlet基础:Servlet、ServletConfig、ServletContext

学习目标

一、Servlet技术
二、servlet的生命周期
三、ServletConfig接口
四、ServletContext接口简介

学习内容

一、Servlet技术

1.1 Servlet概述:
什么是servlet:它是运行在web服务器端的一个java小程序,简单来说,它就是一个java类
在使用servlet时,需要导入javax.servlet下的jar包。比如:tomcat服务器提供了
servlet的servlet-api.jar包,所以在开发时用tomcat服务器就不需要再导入servlet的jar包。
Servlet它是一个资源,是用来被用户访问的资源,同时是一个动态资源,它是由sun指定的servlet规范。
Servlet的作用:它是基于Http协议的,主要是用来接收客户端发送的请求,处理请求,把数据响应给客户端。

1.2 Servlet的入门
1.Servlet的接口和实现类:
Servlet它是一个接口,在javax.servlet 包下面。
五个方法:

  • destroy():执行这个方法,销毁了servlet对象
  • init(ServletConfig config):在web服务器创建servlet对象以后,执行这个初始化方法。
  • service(ServletRequest req, ServletResponse res) :服务方法,用来接收客户端发送的请求,并且响应数据到客户端
  • getServletConfig():现在不讲
  • getServletInfo():servlet 的信息,比如作者、版本和版权,这个方法在开发中不用。
    编写第一个servlet
    创建一个web项目可以在创建项目时关联tomcat,这样eclipse会把相关的servlet-api.jar包拷贝到项目中,在项目创建一个Java类实现servlet接口并重写里面的方法。
package cn.itcase;
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 FirstServlet implements Servlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("Hello Servlet");
    }
   @Override
    public void destroy() {
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void init(ServletConfig arg0) throws ServletException {

    }
}

servlet创建好之后,需要在web.xml文件中进行配置,给servlet一个可以访问的URI地址:

<!-- 创建一个servlet实例 -->
  <servlet>
    <!-- 给servlet取一个名字,该名字需与servlet-mapping中的servlet-name一致 -->
    <servlet-name>firstServlet</servlet-name>
    <!-- servlet的包名+类名 -->
    <servlet-class>cn.itcase.FirstServlet</servlet-class>
  </servlet>

  <!-- 给servlet一个可以访问的URI地址 -->
  <servlet-mapping>
    <!-- servlet的名字,与 servlet中的servlet-name一致-->
    <servlet-name>firstServlet</servlet-name>
    <!-- URI地址:http://locahost:9999/FirstServlet/hello -->
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

二、servlet的生命周期

生命周期:自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期,
其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,
到最终servlet对象被销毁,整个过程就是servlet的生命周期。
与生命周期相关的三个方法:
初始化阶段:
init(ServletConfig config) 初始化方法:首次访问这个Servlet,servlet对象会被创建,执行初始化方法,执行一次。
运行阶段:
service(ServletRequest req, ServletResponse res) 服务方法:每次访问servlet时,服务方法都会被执行,执行多次。。
销毁阶段:
destroy()销毁方法:在服务器正常关闭时。会执行销毁方法,执行一次。

package cn.itcast;
public class LifeServlet extends GenericServlet {
	/**
	 * 初始化方法
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("首次访问LifeServlet时,会执行这个初始化方法-------------");
	}
	/**
	 * servlet的服务方法
	 */

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("每次访问lifeservlet,都会执行这个服务方法--------");
		
	}
	/**
	 * 销毁方法
	 */
	@Override
	public void destroy() {
		System.out.println("在服务器关闭时,会执行销毁方法----------");
	}
}

tomcat启动时创建servlet实例

在tomcat启动时,默认不会创建servlet实例,如果想要让tomcat在启动时创建servlet实例的话,只需要在web.xml中添加load-on-startup标签即可。

  <servlet>
      <servlet-name>lifeServlet</servlet-name>
      <servlet-class>com.monkey1024.servlet.LifeServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>lifeServlet</servlet-name>
      <url-pattern>/life</url-pattern>
  </servlet-mapping>

三、ServletConfig接口

ServletContext对象是在web服务器启动时就创建了,是web服务器创建的servletContext对象,
每一个web项目只有一个ServletContext对象。
ServletContext对象的作用:获取web应用程序的初始化参数,在web应用程序能共享数据,获取web项目下的资源文件。
得到ServletContext对象:
1.通过ServletConfig对象: config.getServletContext()
2.直接得到: getServletContext();
.获取web应用程序的初始化参数(web应用程序就是web项目)
获取全局初始化参数的值:getInitParameter(String name)
获取全局初始化参数的名称:getInitParameterNames()
例如:
在配置web.xml时,可以为servlet指定多个初始化参数:

<servlet>
      <servlet-name>configServlet01</servlet-name>
      <servlet-class>com.monkey1024.servlet.ConfigTest01</servlet-class>
      <init-param>
          <param-name>userName</param-name>
          <param-value>monkey1024</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123456</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>configServlet01</servlet-name>
      <url-pattern>/config01</url-pattern>
  </servlet-mapping>

创建一个servlet:

package com.monkey1024.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * ServletConfig接口
 *
 */
public class ConfigTest01 implements Servlet {

    private ServletConfig config;

    @Override
    public void destroy() {

    }

    @Override
    public ServletConfig getServletConfig() {
        return this.config;
    }

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

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init方法中ServletConfig:" + servletConfig);
        this.config = servletConfig;
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        String userName = config.getInitParameter("userName");
        System.out.println("userName=" + userName);
        Enumeration<String> param = config.getInitParameterNames();

        while(param.hasMoreElements()){
            String name = param.nextElement();
            String value = config.getInitParameter(name);
            System.out.println(name + "=" +  value);
        }

        System.out.println("ServletName=" + config.getServletName());

    }

}

四、ServletContext接口简介

概述:
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象包含Web应用中所有 Servlet 在 Web 容器中的一些数据信息。ServletContext随着Web应用的启动而创建,随着 Web 应用的关闭而销毁。一个 Web 应用只有一个ServletContext 对象。
ServletContext中不仅包含了 web.xml 文件中的配置信息,还包含了当前应用中所有Servlet可以共享的数据。可以这么说, ServeltContext 可以代表整个应用,所以ServletContext有另外一个名称:application。
在web.xml文件中加入初始化参数,web.xml文件修改后要重启tomcat才能生效:

<!-- 初始化参数 -->
  <context-param>
      <param-name>MySQLDriver</param-name>
      <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <context-param>
      <param-name>dbURL</param-name>
      <param-value>jdbc:mysql:</param-value>
  </context-param>

package com.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ContextTest02 implements Servlet {

    private ServletConfig config;

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        ServletContext application = this.config.getServletContext();
        System.out.println("Context02中的application:" + application);


        String admin = (String)application.getAttribute("admin");
        System.out.println(admin);
        String password = (String)application.getAttribute("password");
        System.out.println(password);
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

}

web项目:运行在tomcat服务器上面的,所有说文件的路径是相对于tomcat服务器。
服务器端是没有src这个目录,写路径不能写src,必须相对于tomcat服务器端的路经。
1.获取文件的自己输入流:路径是相对于tomcat服务器的路径
InputStream in =getResourceAsStream(String path)
比如:

// 获取文件的字节输入流
		 ServletContext context = this.getServletContext();
		 String path="/WEB-INF/classes/config.properties";
		 InputStream in = context.getResourceAsStream(path);
		 Properties pro= new Properties();
		 pro.load(in);
		 //获取配置文件的值
		 String v1 = pro.getProperty("Company");
		 String v2= pro.getProperty("Address");
		 response.getWriter().print("company name :"+v1+" company address :"+v2);

2.获取文件的绝对路径:路径是相对于服务器端的路径
String realPath = getRealPath(path);
比如:

 //1.得到ServletContext对象
		ServletContext context = this.getServletContext();
		//2.获取文件的绝对路径
		String path="/WEB-INF/classes/config.properties";
		//3.调用getRealPath
		//E:\soft\apache-tomcat-7.0.55\webapps\chapter03\WEB-INF\classes\config.properties
		String realPath = context.getRealPath(path);
		System.out.println(realPath);
		InputStream in = new FileInputStream(realPath);

在这里插入图片描述
2020080605041

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值