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

来源:互联网 发布:大盘指数算法 编辑:程序博客网 时间:2024/06/05 14:38

前言:主要介绍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 {/** * 初始化方法 * 执行者:服务器  * 执行次数:一次  * 执行时机:默认第一次访问的时候 */@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("初始化:我是init");}/** * 服务, * 执行者:服务器, * 执行次数:请求一次执行一次, * 执行时机:请求来的时候 */@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {System.out.println("服务:我是service");}/** * 销毁  * 执行者:服务器  * 执行次数:只执行一次  * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候 */@Overridepublic void destroy() {System.out.println("销毁:我是destroy");}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn 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 {// 获取servletconfigServletConfig 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.xxxAttribute3.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);}}

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