ServletContext

web容器在启动的时候,它会为每个web容器都创建一个ServletContext对象,它代表了当前的web应用,由this.ServletContext来管理

- 共享数据(会通过section、request替换)

​ 通过这个Servlet保存在ServletContext中的数据,可以在另外一个Servlet中通过ServletContext拿到

关键词:Attribute、ContenType、CharactorEncoding

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        this.getInitParameter()  初始化参数
//        this.getServletConfig()  servlet配置
//        this.getServletContext() servlet上下文
        ServletContext context = this.getServletContext();
        String username = "YGW";
        context.setAttribute("username", username);  //属性名为username, 值为username中所带的值
//        System.out.println("hello");
    }

}


public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext getContext = this.getServletContext();
        String username = (String) getContext.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);
    }
}
	<servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.Gw.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/Hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>getSer</servlet-name>
        <servlet-class>com.Gw.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getSer</servlet-name>
        <url-pattern>/getSer</url-pattern>
    </servlet-mapping>

- 获取初始化参数(几乎不用)

关键词:InitParameter、context-param、param-name、param-value

public class servletContext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        resp.getWriter().print(url);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<!--配置一些web应用的初始化参数-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>
	    <servlet>
        <servlet-name>gp</servlet-name>
        <servlet-class>com.Gw.servlet.servletContext</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>gp</servlet-name>
        <url-pattern>/gp</url-pattern>
    </servlet-mapping>

- 请求转发(request替换)

关键词:RequestDispatcher、forward

public class servletDispatcher extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        RequestDispatcher gp = context.getRequestDispatcher("/gp");  //注意使用转发时的格式
        gp.forward(req, resp);  //调用forward方法实现请求转发
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
    <servlet>
        <servlet-name>sd</servlet-name>
        <servlet-class>com.Gw.servlet.servletDispatcher</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>sd</servlet-name>
        <url-pattern>/sd</url-pattern>
    </servlet-mapping>

- 读取资源文件(常用类加载、反射替换)

关键词:InputStream、getResourceAsStream、Properties

public class contextProperties extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        //注意提交时的相对位置以target中的位置为准,用绝对位置放在服务器中可能会发生变化
        Properties prop = new Properties();
        prop.load(resourceAsStream);
        String user = prop.getProperty("username");
        String password =  prop.getProperty("password");
        resp.getWriter().print(user + ":" + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
    <servlet>
        <servlet-name>cp</servlet-name>
        <servlet-class>com.Gw.servlet.contextProperties</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>cp</servlet-name>
        <url-pattern>/cp</url-pattern>
    </servlet-mapping>
username = root
password = 123456

特别说明:

​ 资源如果不能加载,可能将其放置在类路径上,需要在当前的pom.xml中加入build代码:

<build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
posted @ 2022-03-11 00:44  CDUT的一只小菜鸡  阅读(29)  评论(0编辑  收藏  举报