文档章节

Servlet 之 ServletContext

芥末小弟
 芥末小弟
发布于 2017/03/01 09:51
字数 1295
阅读 4
收藏 0
点赞 0
评论 0
package cn.jiemoxiaodi.servlet_servletcontext;

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

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

public class FServlet extends HttpServlet {

    /**
     * The doGet method of the servlet. <br>
     * 
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request
     *            the request send by the client to the server
     * @param response
     *            the response send by the server to the client
     * @throws ServletException
     *             if an error occurred
     * @throws IOException
     *             if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username=context.getInitParameter("username");
        Enumeration enu=context.getInitParameterNames();
        while(enu.hasMoreElements()){
            String key=(String)enu.nextElement();
            String value=context.getInitParameter(key);
            System.out.println(key+"-========>"+value);
        }
    }

}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name></display-name>
    <context-param>
        <param-name>username</param-name>
        <param-value>tomcate</param-value>
    </context-param>
    <context-param>
        <param-name>pwd</param-name>
        <param-value>123456</param-value>
    </context-param>
    <!-- 配置servlet到项目中 -->
    <servlet>
        <!-- 可以随便填只需要注意不要和其他servlet的名字重复即可(建议使用简单类名) -->
        <servlet-name>AServlet</servlet-name>
        <!-- 配置servlet的完整类名 -->
        <servlet-class>cn.jiemoxiaodi.servlet.AServlet</servlet-class>
        <init-param>
            <param-name>aa</param-name>
            <param-value>sdfds</param-value>
        </init-param>
    </servlet>

    <!-- 配置上面这个servlet使用那个路径能被访问 -->
    <servlet-mapping>
        <!-- 此处不能随便写了,必须与上面的servlet对应,表示在为那个servlet配置路径 -->
        <servlet-name>AServlet</servlet-name>
        <!-- 配置访问这个servlet的路径 (相对路径) /==>http://localhost:8080/day10_servlet/ http://localhost:8080/day10_servlet/AServlet -->
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>BServlet</servlet-name>
        <servlet-class>cn.jiemoxiaodi.servlet_config.BServlet</servlet-class>
        <init-param>
            <param-name>a</param-name>
            <param-value>123456sdfd</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>BServlet</servlet-name>
        <url-pattern>/BServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>CServlet</servlet-name>
        <servlet-class>cn.jiemoxiaodi.mygenericservlet.CServlet</servlet-class>
        <init-param>
            <param-name>name</param-name>
            <param-value>需哦啊</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>DServlet</servlet-name>
        <servlet-class>cn.jiemoxiaodi.http.DServlet</servlet-class>
    </servlet>
  <servlet>
    <servlet-name>FServlet</servlet-name>
    <servlet-class>cn.jiemoxiaodi.servlet_servletcontext.FServlet</servlet-class>
  </servlet>



    <servlet-mapping>
        <servlet-name>CServlet</servlet-name>
        <url-pattern>/CServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>DServlet</servlet-name>
        <url-pattern>/DServlet</url-pattern>
    </servlet-mapping>
  <servlet-mapping>
    <servlet-name>FServlet</servlet-name>
    <url-pattern>/FServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

 

http://localhost:8080/projectname/FServlet

 

package cn.jiemoxiaodi.servlet_servletcontext;

import java.io.IOException;
import java.io.PrintWriter;

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

public class HServlet extends HttpServlet {

    /**
     * The doGet method of the servlet. <br>
     * 
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request
     *            the request send by the client to the server
     * @param response
     *            the response send by the server to the client
     * @throws ServletException
     *             if an error occurred
     * @throws IOException
     *             if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    this.getServletContext().setAttribute("aa", "dsfd");
        this.getServletContext().setAttribute("adfa", "dsfd");

this.getServletContext().removeAttribute("aa");
this.getServletContext().removeAttribute("adfa");


        System.out.println(this.getServletContext().getAttribute("aa") + "===>"
                + this.getServletContext().getAttribute("adfa"));


    }

}
ServletContext对象 
    介绍    
        1.这个对象代表着咱们的整个项目.==> 这个对象在一个项目中只存在一个实例. 
        2.启动项目的时候会自动创建. 关闭服务器的时候会销毁该实例. 
        3.该对象如何获取呢? ==>  servletConfig 中 有一个方法叫做 getServletContext方法 来获得. 
    功能 
        一:可以获得项目中的一些配置(web.xml) 
            getInitParameter(String name) 根据键获得值 
            getInitParameterNames()   获得所有键 
        上面这两个方法名字与servletConfig中的一模一样.但是获得的配置信息是 
            <context-param> 
                     <param-name>userName</param-name> 
                     <param-value>tom</param-value> 
            </context-param> 
            <context-param> 
                     <param-name>password</param-name> 
                     <param-value>1234</param-value> 
            </context-param> 
        二:作为我们servlet技术中 三大域对象之一.  如果包含jsp的话,其实有4大域 page域. 
                        application ==> servletContext 
                        session 
                        request 
                    域对象涉及到4个方法 
                        getAttribute(key)  根据键获得值 
                        setAttribute(key,value) 往application域中的map 存放一个键值对 
                        removeAttribute(key) 从application域中的map 删除一个键值对 
                        getAttributeNames(); 从application域中的map 获得所有的键
//获取资源的相关方法
    //this.getServletContext().getRealPath(path)  
        //this.getServletContext().getResourceAsStream(path)
        System.out.println(this.getServletContext().getRealPath("/WEB-INF/demo.xml"));
        InputStream input= this.getServletContext().getResourceAsStream("/WEB-INF/demo.xml");
        System.out.println(input);
三:可以获取项目中的资源.(例如获得项目中存放学生的stu.xml) 
                //想对WEB-INF/Demo.xml进行操作.我们要先读取出该文件 
                //如何来读取呢? 
                    //File file = new File("E:/代码/Workspaces0808/Day10-servlet/WebRoot/WEB-INF/demo.xml"); 
                //上面获得demo.xml填写的路径显然是不对的.获得的是工程下的而我们要获得最终部署到服务器上的. 
                    //File file = new File("E:/apache-tomcat-6.0.35/webapps/Day10-servlet/WEB-INF/demo.xml"); 
                //上面这种获得方式就对了.但是 如果把项目再部署到其他地方,那上面这个写死的路径就无效了. 
                //这样类似获得外部资源的例子很多,所以servletContext对象给出了解决办法. 
                        //getRealPath("/")  ==> 获得绝对路径 ,根据参数中的相对路径获得. "/"相对于WebRoot 
                        //getResourceAsStream("/"); ==>直接获得 想要找的资源的流 . 参数还是填相对路径,同上 
                例子: 
                    String path = getServletContext().getRealPath("/WEB-INF/demo.xml"); 
                    System.out.println(path); 
                    InputStream is =  getServletContext().getResourceAsStream("/WEB-INF/demo.xml"); 
                    System.out.println(is);

使用Class和ClassLoader 获得项目中的资源路径   
    //web-inf下的
            String path1 = getServletContext().getRealPath("/WEB-INF/demo.xml");
        //lib下的
            String path2 = getServletContext().getRealPath("/WEB-INF/lib/demo.xml");
        //src下的
            String path3 = getServletContext().getRealPath("/WEB-INF/classes/demo.xml");
        //cn.itcast.servlet.servlet_context包下的
            String path4 = getServletContext().getRealPath("/WEB-INF/classes/cn/itcast/servlet/servlet_context/demo.xml");
        //其实上面例子中path3 和 path4 这两种方式 有些麻烦
            //在介绍一种获得资源的方式,是对.class ==> Class 和 classLoader的应用
            InputStream is = this.getClass().getResourceAsStream("demo.xml"); // 如果不加"/"==> 相对的是类的当前(包)目录
            InputStream is2 = this.getClass().getResourceAsStream("/demo.xml");//如果加了"/" ==> "/"就代表classes目录(src)
            //在说下classLoader 下也有方法  classLoader 就是类的加载器. ==> 专门来读取class文件的输入流
            //也提供了读取其他文件的方法.(使用classLoader不要读取较大的文件)
            // this.getClass().getClassLoader() ==> 获得类的加载器
            InputStream is3 = this.getClass().getClassLoader().getResourceAsStream("/demo.xml");// 不论加不加"/",都相对于 classes目录,跟class中加"/" 的相对路径是一样的.
            //使用class或classLoader 也可以获得文件的绝对路径
            URL url =    this.getClass().getResource("demo.xml");
            System.out.println(url.getPath());

© 著作权归作者所有

共有 人打赏支持
芥末小弟
粉丝 0
博文 202
码字总数 120715
作品 0
昌平
web.xml中Filter,Listener,Servlet的区别

一、Servlet Servlet是基本的服务端程序,他来自接口Servlet,接口中有方法service。而Servlet的一个重要实现类,则是tomcat服务器的核心,那就是HttpServlet HttpServlet有方法: public a...

architect刘源源 ⋅ 05/04 ⋅ 0

Java Web(一) Servlet详解!!

一、什么是servlet?     处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且...

architect刘源源 ⋅ 05/08 ⋅ 0

web.xml中在Servlet中获取context-param和init-param内的参数

web.xml里面可以定义两种参数: 1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: <context-param> <param-name>context/param</param-name> <param-value>avalib......

村长大神 ⋅ 2014/10/27 ⋅ 0

Servlet的一些细节--学习笔记

Servlet细节 1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头 2)一个Servlet的url-pattern可以是1个或多个,有二种形式; a).xx b)/xx/ 注意:/不能一起直接使用 3)/和....

知止内明 ⋅ 04/17 ⋅ 0

JSP 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明 ⋅ 04/18 ⋅ 0

web项目中web.xml的作用

每个javaEE工程中都有web.xml文件,那么它的作用是什么呢?它是每个web.xml工程都必须的吗? 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。 web.xml文件是用来...

ChinaHYF ⋅ 04/27 ⋅ 0

java编程学习Jsp中9个内置对象的介绍

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/12 ⋅ 0

Java面试题之JavaWeb高级

一、Filter和Listener Filter:从J2EE1.3开始,Servlet2.3规范中加入对Filter的支持。Filter就称之为过滤器,它是Servlet技术中最激动人心的技术WEB开发人员通过Filter技术可以对web服务器管理...

年轻诠释我们的梦想_705b ⋅ 06/02 ⋅ 0

Servlet创建运行的过程--生命周期以及自动加载

前言 初学者像我这样的,刚开始学的时候一脸懵逼,为什么Servlet可以直接运行,明明没有入口啊 只是重写了Servlet中的方法。然后访问该地址怎么就直接运行了。 所以了解Serlvet的运行过程即生...

codingcoge ⋅ 06/12 ⋅ 0

Apache Qpid JMS AMQP 0-x 6.3.1 发布

Apache Qpid JMS AMQP 0-x 6.3.1 已发布。Qpid JMS AMQP 0-x 是兼容 JMS 1.1 的客户端,等同于 AMQP 0-8,0-9,0-9-1 和 0-10。Qpid JMS 是一个使用 Qpid Proton 协议引擎的 Java Message Ser......

淡漠悠然 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部