ServletContext对象读取资源文件以及重定向

Posted zsj03180204

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletContext对象读取资源文件以及重定向相关的知识,希望对你有一定的参考价值。

有两种方式可以读取资源文件

  * InputStream getResourceAsStream(String path)     通过文件的地址获取输入流

  * String getRealPath(String path)        通过文件的地址获取文件的绝对磁盘路径

步骤:

  1. 创建配置文件db.properties

  2. 获取资源的输出流

  3. 把输出流加载到配置文件中

db.properties

username=root33
password=12333
desc=haha33
package cn.itcast.context;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 读取资源文件
 * @author Administrator
 *
 */
public class ReadServlet extends HttpServlet 
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        read5();
    
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        doGet(request, response);
    
    
    /**
     * 通过ServletContext对象获取文件的绝对磁盘路径
     * 获取src目录下文件
     * @throws IOException 
     */
    public void read5() throws IOException
        // 获取对象
        String path = getServletContext().getRealPath("/WEB-INF/classes/db.properties");
        // System.out.println(path);
        // C:\apache-tomcat-6.0.14\webapps\day09\WEB-INF\classes\db.properties
        
        // 获取输入流
        InputStream in = new FileInputStream(path);
        print(in);
    
    
    /**
     * 获取WebRoot目录目录下db.properties文件
     * @throws IOException
     */
    public void read4() throws IOException
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/db.properties");
        // 打印方式
        print(in);
    
    
    /**
     * 获取包目录下db.properties文件
     * @throws IOException
     */
    public void read3() throws IOException
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
        // 打印方式
        print(in);
    
    
    /**
     * 获取src目录下db.properties文件
     * @throws IOException   编译后,src文件不见了,全都放在class文件里
     */
    public void read2() throws IOException
        // ServletContext读取文件
        InputStream in = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        // 打印方式
        print(in);
    
    
    /**
     * 传统方式读取资源文件
     *     交给服务器处理,相对的位置tomcat/bin
     * @throws IOException 
     */
    public void read1() throws IOException
        // 获取输入流
        InputStream in = new FileInputStream("src/db.properties");
        print(in);
    
    
    /**
     * 在控制台打印内容
     * @param in
     * @throws IOException
     */
    public void print(InputStream in) throws IOException
        Properties pro = new Properties();
        // 加载
        pro.load(in);
        // 获取文件中的内容
        String username = pro.getProperty("username");
        String password = pro.getProperty("password");
        String desc = pro.getProperty("desc");
        
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("描述:"+desc);
    
    

1.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    
    <h3>1.html的相对路径</h3>
    <a href="./demo5">demo5</a>
    <a href="demo5">demo5</a>
    
    <h3>1.html的绝对路径</h3>
    <a href="http://localhost/day09/demo5">demo5</a>
    <a href="/day09/demo5">demo5</a>
    
</body>
</html>

 

Servlet配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
  <servlet>
    <servlet-name>ReadServlet</servlet-name>
    <servlet-class>cn.itcast.context.ReadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ReadServlet</servlet-name>
    <url-pattern>/read</url-pattern>
  </servlet-mapping>
        
</web-app>

Servlet和location、302一起完成重定向

package cn.itcast.http;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 页面定时跳转
 * @author Administrator
 *
 */
public class RefreshServlet extends HttpServlet 

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("访问到了...");
        // 页面5秒会跳转到ServletDmo1
        response.setHeader("refresh", "5;url=/day09/1.html");
    

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        doGet(request, response);
    

 

package cn.itcast.http;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 和location和302一起完成重定向
 * @author Administrator
 *
 */
public class ServletDmo1 extends HttpServlet 

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        // 向页面输出内容
        response.setContentType("text/html;charset=UTF-8");
        // response.getWriter().write("向班长借钱...");
        // 我没钱
        response.setStatus(302);
        // 告诉我富班长的地址(重定向都是客户端的,带项目名)
        response.setHeader("location", "/day09/1.html");
    

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        doGet(request, response);
    

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    

  <servlet>
    <servlet-name>ServletDmo1</servlet-name>
    <servlet-class>cn.itcast.http.ServletDmo1</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>RefreshServlet</servlet-name>
    <servlet-class>cn.itcast.http.RefreshServlet</servlet-class>
  </servlet>

   <servlet-mapping>
    <servlet-name>ServletDmo1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>RefreshServlet</servlet-name>
    <url-pattern>/refresh</url-pattern>
  </servlet-mapping>
      
</web-app>

 

以上是关于ServletContext对象读取资源文件以及重定向的主要内容,如果未能解决你的问题,请参考以下文章

servlet开发之ServletContext

J2EE之ServletContext读取资源文件

小谈——读取web资源文件的方式和路径问题

ServletContext对象的使用

通过ServletContext获得工程根目录路径读取文件以及获得classpath目录下的文件

ServletContext对象