前言:主要介绍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);
}
}
-------完-----