Code Bye

关于getServletContext调用

有一个下载文件的 Servlet,部分程序如下:

String filename=request.getParameter(“filename”); 
           String filename2=new String(filename.getBytes(“iso8859-1″),”gb2312”);
                // 通知客户文件的MIME类型
     response.setContentType(“application/x-msdownload”);  
           // 客户使用保存文件的对话框
     response.setHeader(“Content-disposition”,”attachment; filename=”+filename); 
   bis=new BufferedInputStream(new FileInputStream(getServletContext().getRealPath(“/”+filename2)));
           
其中filename是下载的文件名,请问getServletContext()前面无对象名,怎么就能直接调用这个方法呢。
getServletContext()方法之前应该有对象名吧。

这个getServletContext()是从基类中继承的,

10分
父类的静态方法不需要加对象,也可以用this.getServletContext(),本类对象调用父类的静态方法
你可以结贴了亲

10分
一般servlet都继承了HttpServlet你到最上面可以看到的,这个方法你也可以到父类源码里面去看,其实servlet有三种实现方式的,你可以到网上看看。
2楼你好,请问这里的父类是什么,本类对象是什么。
4楼你好,请问如何看到这里的父类源码。servlet有三种实现方式和这里有什么关系。
将下载的文件存入任意文件夹中的Servlet的完整程序如下:
import java.io.*;

import javax.servlet.ServletException;
import javax.servlet.http.*;
public class DownFile extends HttpServlet
 {  public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException 
     {  BufferedInputStream bis = null;  
        BufferedOutputStream bos = null;
        try
         {
           String filename=request.getParameter(“filename”); 
           //String filename2=new String(filename.getBytes(“iso8859-1″),”gb2312”);
           //String filename2=new String(filename.getBytes(“iso8859-1”));
           byte a[]=filename.getBytes(“ISO-8859-1”);
           String filename2=new String(a);
           // 通知客户文件的MIME类型
     response.setContentType(“application/x-msdownload”);  
           // 客户使用保存文件的对话框
     response.setHeader(“Content-disposition”,”attachment; filename=”+filename); 
   bis=new BufferedInputStream(new FileInputStream(getServletContext().getRealPath(“/”+filename2)));
           bos=new BufferedOutputStream(response.getOutputStream());
           byte[] buff = new byte[2048]; 
           int bytesRead; 
           while((bytesRead=bis.read(buff))!=-1)
             { bos.write(buff,0,bytesRead); }
          }
         catch(Exception e){ e.printStackTrace();  }
         finally { if(bis != null) { bis.close();  }
         if(bos != null) { bos.close();  }
       } 
   }
   public void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException
     {  doGet(request,response); }
}

2楼说父类的静态方法,但我查getServletContext()并不是静态方法,其父类是不是HttpServlet呢

getServletContext()相当于this.getServletContext(),调用的是当前对象的getServletContext()方法
基类是 HttpServlet, HttpServlet又继承Servlet。我记得eclipse里面可以直接看继承关系,好像快捷键是CTRL+T
public abstract class HttpServlet  extends GenericServlet

javax.servlet.GenericServlet.getServletContext()
HttpServlet  的父类的方法,public ServletContext getServletContext() 非静态,自动继承。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于getServletContext调用