ServletConfig对象,ServletContext对象

ServletConfig对象

ServletConfig对象有什么用?
通过此对象可以读取web.xml中配置的初始化参数。

为什么我们要把参数信息放到web.xml文件中呢?我们可以直接在程序中都可以定义参数信息,搞到web.xml文件中又有什么好处呢?
好处就是:能够让你的程序更加灵活【更换需求,更改配置文件web.xml即可,程序代码不用改】

配置web.xml文件配置的参数信息

    <servlet>
        <servlet-name>MyServletDemo1</servlet-name>
        <servlet-class>com.jiuyue.servlet.MyServlet</servlet-class>
        <!--WEB应用程序在启动时,就会装载并创建Servlet的实例对象、
        以及调用Servlet实例对象的init()方法。-->
        <!--<load-on-startup>1</load-on-startup>-->
        <!--此时不能使用<load-on-startup>-->
        <init-param>
            <param-name>name</param-name>
            <param-value>jiuyue</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServletDemo1</servlet-name>
        <url-pattern>/MyServletDemo1</url-pattern>
    </servlet-mapping>

在Servlet中获取ServletConfig对象,通过ServletConfig对象获取在web.xml文件配置的参数

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
        //获取ServletConfig对象
        ServletConfig servletConfig = this.getServletConfig();
        //根据配置获取数据
        String name = servletConfig.getInitParameter("name");
        System.out.println("name: "+name);
    }

控制台输出(这里发起doGet请求):

doGet
name: jiuyue

ServletContext对象

什么是ServletContext对象?
当Tomcat启动的时候,就会创建一个ServletContext对象。它代表着当前web站点

ServletContext有什么用?

1、ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯。
2、ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息
3、利用ServletContext读取web站点的资源文件
4、实现Servlet的转发【用ServletContext转发不多,主要用request转发】

Servlet之间实现通讯

ServletContext对象可以被称之为域对象其实域对象可以简单理解成一个容器【类似于Map集合】
实现Servlet之间通讯就要用到ServletContext的setAttribute(String name,Object obj)方法.

MyServlet01类

public class MyServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String name= "jiuyue";
        //在MyServlet01设置域对象
        servletContext.setAttribute("myName",name);
    }
}

MyServlet02类

public class MyServlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //通过关键字获取存储在域对象的值
        String value = (String) servletContext.getAttribute("myName");
        System.out.println(value);
    }
}

访问MyServlet02可以获取MyServlet01存储的信息,从而实现多个Servlet之间通讯。
刚开始直接访问MyServlet02并没有获取到数据myName信息,其实是要先访问MyServlet01再来访问MyServlet02才能获取到数据myName信息。

MyServlet01设置域对象在JSP中获取数据值

public class MyServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String name= "jiuyue";
        //在MyServlet01设置域对象
        servletContext.setAttribute("myName",name);
        req.getRequestDispatcher("test.jsp").forward(req,resp);
    }
}

test.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Hello,MyServlet01</h1><br>
<h1>${myName}</h1>
</body>
</html>

“扫码关注“

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值