Java EE开发第十一章:3.servlet的体系结构以及常用方法

前言:主要介绍servlet的体系结构,servlet的生命周期、servlet的配置对象、servlet的上下文、获取文件的路径。

-------体系结构-----

1.Servlet:接口-->GenericServlet:抽象类-->HttpServlet:抽象类-->自定义servlet

2.servlet常用方法:
void init(ServletConfig config):初始化
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
void destroy():销毁
ServletConfig getServletConfig() :获取当前servlet的配置对象

3.GenericServlet常用方法:
除了service方法没有显示,其他都实现了
空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可

4.HttpServlet常用方法:
service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
doGet和doPost方法

-----生命周期-------

1.serlvet是单实例多线程, 默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作。并调用一次service方法,每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑, 当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作。

2.Demo:

配置:

 <servlet>
    <description></description>
    <display-name>LifeServlet</display-name>
    <servlet-name>LifeServlet</servlet-name>
    <servlet-class>com.fly.c_life.LifeServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>LifeServlet</servlet-name>
    <url-pattern>/life</url-pattern>
  </servlet-mapping>
java代码:
import java.io.IOException;

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

/**
 * servlet的生命周期
 */
public class LifeServlet implements Servlet {

	/**
	 * 初始化方法
	 * 执行者:服务器 
	 * 执行次数:一次 
	 * 执行时机:默认第一次访问的时候
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("初始化:我是init");
	}

	/**
	 * 服务,
	 * 执行者:服务器,
	 * 执行次数:请求一次执行一次,
	 * 执行时机:请求来的时候
	 */
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("服务:我是service");
	}

	/**
	 * 销毁 
	 * 执行者:服务器 
	 * 执行次数:只执行一次 
	 * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
	 */
	@Override
	public void destroy() {
		System.out.println("销毁:我是destroy");
		
	}

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

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

}
3.运行截图:

初始化:


服务:


销毁:


------servlet配置对象------

作用和方法:1.获取当前servlet的名称。

2.获取当前servlet的初始化参数。

3.获取全局管理者。

4、String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)

5、String  getInitParameter(String key):通过名称获取指定的参数值

6、Enumeration getInitParameterNames() :获取所有的参数名称

7、初始化参数是放在 web.xml文件 

8、servlet标签下子标签 init-param

9、getServletContext():获取全局管理者

10、servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象传递给servlet,由servlet的getServletConfig方法获取

Demo:

配置:

<servlet>
    <description></description>
    <display-name>SConfigServlet</display-name>
    <servlet-name>SConfigServlet</servlet-name>
    <servlet-class>com.fly.d_config.SConfigServlet</servlet-class>
    <init-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>123</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SConfigServlet</servlet-name>
    <url-pattern>/sconfig</url-pattern>
  </servlet-mapping>

java代码:

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * servletconfig对象的常用方法
 */
public class SConfigServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 获取servletconfig
		ServletConfig config = this.getServletConfig();

		// 获取当前servlet的名字
		String servletName = config.getServletName();
		System.out.println("名字:" + servletName);

		// 获取初始化参数
		String user = config.getInitParameter("user");
		System.out.println("获取单一的值user:" + user);

		System.out.println("/////////////////////////");
		Enumeration<String> names = config.getInitParameterNames();
		while (names.hasMoreElements()) {
			String name = (String) names.nextElement();
			System.out.println("参数名字:" + name);

		}
	}

}
运行:


-------上下文-------

1、理解:上下文(全局管理者),一个项目的引用.代表了当前项目。当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象。当项目被移除的时候或者服务器关闭的时候servletcontext销毁。

2、作用:.获取全局的初始化参数、共享资源(xxxAttribute)、获取文件资源、其他操作

3、获取servletcontext:方式1:getServletConfig().getServletContext();方式2:getServletContext()

4、常用方法:

		1.了解
			String  getInitParameter(String key):通过名称获取指定的参数值
			Enumeration getInitParameterNames() :获取所有的参数名称	
			 在根标签下有一个 context-param子标签 用来存放初始化参数
				<context-param>
					<param-name>encoding</param-name>
					<param-value>utf-8</param-value>
				</context-param>
		2.xxxAttribute
		3.
			String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
				getRealPath("/"):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
			InputStream getResourceAsStream(String path):以流的形式返回一个文件
		4.获取文件的mime类型  大类型/小类型
			String getMimeType(String 文件名称)
5、demo:

配置:

<servlet>
    <description></description>
    <display-name>ScontextServlet</display-name>
    <servlet-name>ScontextServlet</servlet-name>
    <servlet-class>com.fly.e_scontext.ScontextServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ScontextServlet</servlet-name>
    <url-pattern>/scontext</url-pattern>
  </servlet-mapping>

java代码:

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * ServletContext的常用方法
 */
public class ScontextServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 1获取全局管理者
		ServletContext context = this.getServletContext();

		// 获取初始化参数
		String encoding = context.getInitParameter("encoding");
		System.out.println("初始化参数:" + encoding);

		// 获取文件的真实路径
		// String path = context.getRealPath("/");// 项目目录下
		String path = context.getRealPath("/1.txt");
		System.out.println("path:" + path);
		
		//以流的形式返回一个文件
		InputStream is = context.getResourceAsStream("/1.txt");
		System.out.println("is:" + is);
		
		//获取文件的mime类型
		System.out.println("/////////////////");
		String mimeType = context.getMimeType("1.jpg");
		System.out.println("mimeType:"+mimeType);
	}

}

------获取文件的路径------

1、通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以
类.class.getClassLoader().getResource("2.txt").getPath()

2、Demo:

配置文件:

<servlet>
    <description></description>
    <display-name>PathServlet</display-name>
    <servlet-name>PathServlet</servlet-name>
    <servlet-class>com.fly.f_path.PathServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PathServlet</servlet-name>
    <url-pattern>/path</url-pattern>
  </servlet-mapping>

java代码:

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

public class PathServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String path = PathServlet.class.getClassLoader().getResource("2.txt").getPath();
		System.out.println("path:" + path);
		String pt1 = PathServlet.class.getClassLoader().getResource("/2.txt").getPath();
		System.out.println("pt1:" + pt1);
	}

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

	public static void main(String[] args) {
		String pt = PathServlet.class.getClassLoader().getResource("2.txt").getPath();
		System.out.println("pt:" + pt);
	}

}

-------完-----


发布了105 篇原创文章 · 获赞 74 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_32306361/article/details/78082139
今日推荐