javaweb基础:ServletContext

本质:ServletContext是servlet的中间件,为servlet保存一些东西

  注:ServletContext是邻驾与servlet之上的

 

1.ServletContext概述:

  web容器在启动时,它会为每一个web程序都创建一个ServletContext对象,它代表当前的web应用

 

 

1.1共享数据

  在此Servlet中保存数据,可在另一个servlet中拿到;

package com.king.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //this.getInitParameter(); servlet参数
        //this.getServletConfig(); servlet配置
        //this.getServletContext(); servlet上下文
        ServletContext context = this.getServletContext();

        String username="king";//数据
        context.setAttribute("username",username);//将一个数据保存在ServletContext中,名字为:username

    }

}
package com.king.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字"+username);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">

<!--配置一些web应用的初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql//localhost:3306/mybaits</param-value>
</context-param>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.king.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/king</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.king.servlet.GetServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>


<servlet>
<servlet-name>gp</servlet-name>
<servlet-class>com.king.servlet.ServletDemo03</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>gp</servlet-name>
<url-pattern>/gp</url-pattern>
</servlet-mapping>


<servlet>
<servlet-name>sd4</servlet-name>
<servlet-class>com.king.servlet.ServletDemo04</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>sd4</servlet-name>
<url-pattern>/sd4</url-pattern>
</servlet-mapping>

</web-app>

 

转发的是实现(servlet配置在上面web.xml)

package com.king.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ServletDemo04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        System.out.println("进入了servlet——sd4");
        //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");//转发的请求路径
        //requestDispatcher.forward(req,resp);//调用forward实现请求转发:
        context.getRequestDispatcher("/gp").forward(req,resp);
        //结果显示的是gp的数据,但url是当前url,
        //总结:转发不会改变路径,
        //转发本质:gp的数据传到sd4,sd4传给结果

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 转发的本质原理图

 

posted @ 2020-10-04 19:08  凸然猿  阅读(155)  评论(0编辑  收藏  举报