zoukankan      html  css  js  c++  java
  • servlet的ServletContext接口

    ServletContext

      Servlet 上下文

    每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一个

    web.xml

      <servlet>
      	<servlet-name>hello2</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet2</servlet-class>
      	
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello2</servlet-name>
      	<url-pattern>/h2</url-pattern>
      </servlet-mapping>
      <servlet>
      	<servlet-name>hello</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello</servlet-name>
      	<url-pattern>/h3</url-pattern>
      </servlet-mapping>

    servlet类

    public class HelloServlet2 extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("helloServlet2:"+getServletContext());
    	}
    }
    -------------------------------------------------------------
    public class HelloServlet3 extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("helloServlet3:"+getServletContext());
    		//testServletConfig();
    	}
    }

    浏览器先后访问url(http://localhost:8080/HelloServlet/h2、http://localhost:8080/HelloServlet/h3),查看console输出

    helloServlet2:org.apache.catalina.core.ApplicationContextFacade@4b020c18
    helloServlet3:org.apache.catalina.core.ApplicationContextFacade@4b020c18
    

      所以两个servlet获取的是同一个ServletContext对象

    ServletContext对象的获取

    ServletContext context = getServletContext();

    ServletContext的作用

    获取全局配置参数

    web.xml配置

      <context-param>
    	<param-name>name</param-name>
    	<param-value>wxf</param-value>
      </context-param> 
      <context-param>
    	<param-name>age</param-name>
    	<param-value>21</param-value>
      </context-param>

    servlet代码

     1 public class HelloServlet2 extends HttpServlet {
     2 
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5         ServletContext context = getServletContext();
     6         Enumeration<String> names = context.getInitParameterNames();
     7         while (names.hasMoreElements()) {
     8             String name = (String) names.nextElement();
     9             System.out.println(name+"==="+context.getInitParameter(name));
    10         }
    11     }
    12 }

    console输出

    name===wxf
    age===21

    获取web工程中的资源(webContent目录下的资源)

     

    config.properties

    name=zhangsan
    age=123
    

    servlet类

     1 public class HelloServlet2 extends HttpServlet {
     2 
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5         ServletContext context = getServletContext();
     6         
     7         //1.获取资源所在的绝对路径位置
     8         //这里得到的是项目在tomcat里面的根目录
     9         String path = context.getRealPath("");
    10         System.out.println("path==="+path);
    11         //这里得到的是项目在tomcat里面的根目录
    12         String path2 = context.getRealPath("config.properties");
    13         System.out.println("path2==="+path2);
    14         System.out.println("-------------------------");
    15         
    16         //2.getResourceAsStream 获取资源 流对象 相对路径
    17         InputStream stream = context.getResourceAsStream("config.properties");
    18         Properties prop = new Properties();
    19         prop.load(stream);
    20         String name = prop.getProperty("name");
    21         System.out.println("name==="+name);
    22     }
    23 }

    console输出

    path===F:eclipseworkspacedevelop_study.metadata.pluginsorg.eclipse.wst.server.core	mp0wtpwebappsHelloServlet
    path2===F:eclipseworkspacedevelop_study.metadata.pluginsorg.eclipse.wst.server.core	mp0wtpwebappsHelloServletconfig.properties
    -------------------------
    name===zhangsan

    注:

    1. 通过classloader去获取web工程下的资源的方式:this.getClass().getClassLoader().getResource("../../config.properties")
    2. src对应的是/WEB-INF/classes,如果想要使用ServletContext获取src目录下的文件可以使用context.getResourceAsStream("/WEB-INF/classes/config.properties")

    存取数据,servlet间共享数据 域对象

            ServletContext context = getServletContext();
            context.setAttribute("name", "qf");
            System.out.println("name==="+context.getAttribute("name"));                

    console输出

    name===qf
  • 相关阅读:
    python拼接字符串
    SyntaxError: Non-ASCII character 'xe5' in file a.py on line 9, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
    Python三目运算符
    上一条下一条方案对比
    编程注意
    Running asp net mvc4 on ubuntu
    慎重使用正则
    Web开发注意
    懒人的服务监控
    编辑器选择
  • 原文地址:https://www.cnblogs.com/qf123/p/10045327.html
Copyright © 2011-2022 走看看