javax.servlet包介绍

来源:http://blog.163.com/[email protected]/blog/static/17158171200782333849784/

使用Java技术开发WEB应用程序,深入了解Servlet的机制对应用的开发将有重要的推动作用.而想深入了解Servlet的机制就不得不了解javax.servlet包.

以Servlet2.3规范,我们介绍javax.servlet包中的类:

javax.servlet包中包含了7个接口,3个类和2个异常类,它们分别是:

接口:RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse和SingleThreadModel

类:GenericServlet,ServletInputStream和ServletOutputStream

异常类:ServletException和UnavailableException

Servlet的生命周期

在Servlet的接口中定义了一个Servlet的生命周期方法,分别是Init,Service和Destroy

演示了Servlet生命周期方法的简单Servlet:

import javax.servlet.*;
import java.io.IOException;

public class PrimitiveServlet implements Servlet {

public void init(ServletConfig config) throws ServletException {
    System.out.println("init");
  }

public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {
    System.out.println("service");
  }  
  public void destroy() {
    System.out.println("destroy");
  }

public String getServletInfo() {
    return null;
  }
  public ServletConfig getServletConfig() {
    return null;
  }

}

在Servlet中如何获取ServletConfig对象?

在Servlet的Init方法中,Servlet Container将会传入一个ServletConfig对象,开发人员可以通过这个对象获取在web.xml文件中定义的Servlet初始化参数.

下面是一个获取Servlet初始参数的示例:

import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException; 

public class ConfigDemoServlet implements Servlet {

  public void init(ServletConfig config) throws ServletException {
    Enumeration parameters = config.getInitParameterNames();
    while (parameters.hasMoreElements()) {
      String parameter = (String) parameters.nextElement();
      System.out.println("Parameter name : " + parameter);
      System.out.println("Parameter value : " +
        config.getInitParameter(parameter));
    }
  } 

  public void destroy() {
  } 

  public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {
  } 

  public String getServletInfo() {
    return null;
  } 

  public ServletConfig getServletConfig() {
    return null;
  }
}
如何获取ServletContext对象?
可以通过ServletConfig对象的getServletContext方法获取ServletContext对象
import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException; 

public class ContextDemoServlet implements Servlet {
  ServletConfig servletConfig; 

  public void init(ServletConfig config) throws ServletException {
    servletConfig = config;
  } 

  public void destroy() {
  } 

  public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {
    ServletContext servletContext = servletConfig.getServletContext();
    Enumeration attributes = servletContext.getAttributeNames();
    while (attributes.hasMoreElements()) {
      String attribute = (String) attributes.nextElement();
      System.out.println("Attribute name : " + attribute);
      System.out.println("Attribute value : " +
        servletContext.getAttribute(attribute));
    } 

    System.out.println("Major version : " +
servletContext.getMajorVersion());
    System.out.println("Minor version : " +
servletContext.getMinorVersion());
    System.out.println("Server info : " + servletContext.getServerInfo());
  } 

  public String getServletInfo() {
    return null;
  }
  public ServletConfig getServletConfig() {
    return null;
  } 

}
如何在Servlet之间共享信息?
我们可以通过ServletContext来维护在不同Servlet之间共享的信息.
如何解决Servlet的多Thread问题?
如果Servlet需要读写外部资源,我们需要考虑Thread的问题, 我们可以使用声明性接口SingleThreadModel来避免多Thread之间的资源冲突问题.但是需要注意的是,如果Servlet仅仅只是读外部资源的话,我们通常不应该实现这个接口.如果实现这个接口,Servlet在同一时刻只能服务一个用户请求,后至的用户请求必须在队列中等待.
时间: 2024-10-10 23:48:45

javax.servlet包介绍的相关文章

缺失 javax.servlet 包

问题症状: : 出现这症状的原因: javax.servlet 包的缺失 解决思路:1 . javax.servlet 跟tomcat有关 2.去百度 解决办法:添加 tomcat 常常容易缺失的包 servlet-api.jar servlet-api.jar包在tomcat的 lib中 把servlet-api.jar复制粘贴到WebContent  的WEB-INF  里的lib 中 如图: 完成啦,有点小开心.

Eclipse中servlet显示无法导入javax.servlet包问题的解决方案

项目名-->右键 Property-->选择 JavaBuild Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入即可 该包在tomcat里有 搜索即可找到

Introducation of Servlet filter(servlet过滤器介绍 )

本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换请求或响应的标头和内容(或两者)的对象.过滤器与Web组件的不同之处在于过滤器通常不会自行创建响应.相反,过滤器提供可以“附加 ”到任何类型的Web资源的功能.因此,过滤器不应该对作为过滤器的Web资源有任何依赖性; 这样,它可以由多种类型的Web资源组成. 过滤器可以执行的主要任务如下. 查询请求

软件包javax.servlet不存在的解决办法

我在编译一个包含有javax.servlet包的java文件, import java.io.*;import javax.servlet.*;import javax.servlet.http.*; public class HelloWorld extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)    throws IOException, S

java编译错误 程序包javax.servlet不存在javax.servlet.*

java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax.servlet.http 不存在 等错误 由于servlet和JSP不是Java平台JavaSE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置. 解决“软件包 javax.servlet不存在”错误的方法: 1. 搜索servlet-api.jar

引入工程报包导入异常:import javax.servlet.annotation.WebFilter;

引入工程报包导入异常:import javax.servlet.annotation.WebFilter; (2013-02-21 16:38:00)   分类: java 今天上午导入了一个项目,用的是tomcat7.0的,但是我自己是tomcat6.0的,结果项目导入就很郁闷的发现有的类打上了红叉叉,进去一看,import javax.servlet.annotation.WebFilter 不能引入,找不到类,发现是少导入了servlet-api 包的问题,然后就去网上下载了一个包,可是导

程序包javax.servlet.annotation不存在

1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building huxs Maven Webapp 0.0.1-SNAPSHOT [INFO] --------------------------------------------------------------------

java编译错误:程序包javax.servlet不存在javax.servlet.*

今天在关于servlet的编译中出现了一下小小的错误,如图所示: 程序包javax.servlet不存在,并且程序包javax.servlet.http不存在等错误.我查阅了一下资料由于servlet和JSP不是java平台j2se(标准版)的一部分,而是j2EE的一部分,因此必须告知编译器servlet的位置. 解决方案如下: 1.注意大小写的问题.servlet的字母要注意是小写. 2.搜索servlet-api.jar,在tomcat文件夹中. 3.更改环境变量中CLASSPATH的值,将

解决Idea项目启动报错:程序包javax.servlet.http不存在

报错信息 在没有使用maven的时候,web项目从远程仓库获取下以后,起一次启动往往会报错javax.servlet.http程序包找不到,随之而来的java基础包都将不能使用,报错信息如下: 解决方式 在项目目录上单击右键,选择-->Open Module Settings 弹出Project Structure页面,点击右侧绿色“+”,选择JARS or directories... 找到本地Tomcat安装路径,进入lib文件夹下选择:jsp-api.jar和servlet-api.jar