Servlet ServletContext的一些应用例子

 

一、共享数据

在父工程下新建一个servlet子工程,参考上一篇随笔

同样地更改web.xml以及新建一些目录

 

GetServlet的代码:

package com.liyu.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 j =this.getServletContext();
        String username = (String) j.getAttribute("usrname");
        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);
    }
}

SetServlet的代码:

package com.liyu.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 SetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ServletContext i= this.getServletContext();
        String usrname = "liyu";
        i.setAttribute("usrname",usrname);
    }
}

然后更改tomcat的配置

 

在web.xml中配置servlet的路径

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">
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>set</servlet-name>
    <servlet-class>com.liyu.servlet.SetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>set</servlet-name>
    <url-pattern>/set</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>get</servlet-name>
    <servlet-class>com.liyu.servlet.GetServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>get</servlet-name>
    <url-pattern>/get</url-pattern>
  </servlet-mapping>
</web-app>

运行测试,先去http://localhost:8080/s2/set 再去http://localhost:8080/s2/get

 

二、获取初始化参数

新建类ServletDemo3

在web.xml配置初始化参数,例如:

 <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/jciju</param-value>
  </context-param>

 

使用getInitParameter方法获取初始化参数,

   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url=context.getInitParameter("url");

        resp.getWriter().print(url);
    }

同理在web.xml配置ServletDemo3的路径

<servlet>
    <servlet-name>gp</servlet-name>
    <servlet-class>com.liyu.servlet.ServletDemo03</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>gp</servlet-name>
    <url-pattern>/gp</url-pattern>
  </servlet-mapping>

然后运行测试

 

 

三、请求转发

新建一个java类ServletDemo4,

package com.liyu.servlet;

import javax.servlet.RequestDispatcher;
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();
        //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");   //转发的请求路径
       // requestDispatcher.forward(req,resp);  //调用forward实现请求转发
        context.getRequestDispatcher("/gp").forward(req,resp);
    }

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

同理在web.xml中配置它

  <servlet>
    <servlet-name>sd4</servlet-name>
    <servlet-class>com.liyu.servlet.ServletDemo04</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>sd4</servlet-name>
    <url-pattern>/sd4</url-pattern>
  </servlet-mapping>

运行测试后,在localhost:8080/s2/sd4中访问的到的是/gp的页面

 

 

四、读取资源文件

新建一个db.properties,运行测试后发现生成在了classes类下

username =root
password=123456


然后在工程路径下配置一下导出,以防有导出失败的问题

 

 

<resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>

新建一个java类,取名ProperitesServlet,然后使用getResourceAsStream得到文件流,路径是db.properties的导出路径

package com.liyu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ProperitesServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop = new Properties();
        prop.load(is);
        String user = prop.getProperty("username");
        String pwd = prop.getProperty("password");

        resp.getWriter().print(user + ":" + pwd);

    }

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

同样在web.xml配置一下

<servlet>
    <servlet-name>sd5</servlet-name>
    <servlet-class>com.liyu.servlet.ProperitesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>sd5</servlet-name>
    <url-pattern>/sd5</url-pattern>
  </servlet-mapping>

然后运行测试

 

 

posted @ 2021-11-10 21:49  liyuSCU  阅读(89)  评论(0)    收藏  举报