ServletContext
servletContxt是Web的四大作用域中最大的,他的范围为整个web项目,ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。


1.共享数据
HelloServlet:放数据
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        String username="卡卡";
        context.setAttribute("username",username);//将一个数据保存在ServletContext中
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
GetServlet:取数据
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的配置:
<servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kakafa.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>getc</servlet-name>
        <servlet-class>com.kakafa.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getc</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>
2.获取初始化参数
web.xml:
<!--配置一些web应用的初始化参数-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>
ServletDemon03:
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        String url=context.getInitParameter("url");
        resp.getWriter().println(url);
    }
3.请求转发
ServletContext context=this.getServletContext();
        //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/demo03");得到请求转发
        //requestDispatcher.forward(req,resp);实现请求转发
        //以上两句可以简化为:
        context.getRequestDispatcher("/demo03").forward(req,resp);

4.读取资源文件
properties类
- 
在Java里创建一个.properties文件 
- 
在resources里面创建一个.properties文件 
发现:运行过后,都被打打包到了同一个路径下:classes,我们俗称这个路径为classpath(target文件夹里,即传统的out文件夹,maven里面为target)

(maven的约定大于配置会使Java里的.properties文件在target中无法生成,因此需要在pom.xml的build里配置,具体可参考https://www.cnblogs.com/kakafa/p/15562263.html里面的最后一点)

ServletDemo06
@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 username=prop.getProperty("username");
        String pwd=prop.getProperty("password");
        resp.getWriter().println(username+pwd);
    }


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号