The oreilly MultipartRequest uses DefaultFileRenamePolicy as, funnily
enough, a default when constructing as you have it in your code.

Later versions of the API (since 9thMay02) have overloaded constructors
where you can specify the FileRenamePolicy. The policy is asked to rename
the file before FilePart.writeTo(...) is called.

Here's a link to the constructor we use:
http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.htm
l#MultipartRequest(javax.servlet.http.HttpServletRequest,%20java.lang.String
,%20int,%20com.oreilly.servlet.multipart.FileRenamePolicy)

The latest version of the API is:
http://www.servlets.com/cos/cos-27May2002.zip

Onto the code. The reason the compiler says your rename class should be
abstract is because it doesn't implement FileRenamePolicy. Your class has a
method changename whereas the FileRenamePolicy interface stipulates a method
rename.
Because your class (actually defined within the _jspService(...) method of
the compiled jsp) is abstract you can't instantiate it. However, in your
code you call reName.changename(...). reName is the class name not a
reference to an object of type reName so the compiler thinks you are calling
a static method. The changename method is not static.

Personally, i dislike anything but the simplest jsp scriptlets. Any complex
functionality should not be in the view layer. I would put the upload logic
(manipulation of the multipart request and decisions on where to save files)
in either a servlet or a filter.

So what to do.
1) Move the upload logic elsewhere (servlet/filter your choice). This makes
the code cleaner, easier to test (using tools such as junit
(http://www.junit.org) and mockobjects (http://www.mockobjects.com/)) and
more maintainable.
2) Really implement FileRenamePolicy and not within the jsp. Package it and
make it a standalone class. This follows as consequence of 1) but also
removes the horrible class declaration within a method you had before.

Good luck,

Jon

-----Original Message-----
From: hugo [mailto:[EMAIL PROTECTED]]
Sent: 03 October 2002 04:52
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: non-static method cannot be referenced from static context
error


Hi

I would like to implement an interface called FileRenamePolicy from the
oreilly package for uploading files, and I am creating a class which
does the implementation.

Here is the relevant code:

<%@ page session="true"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.util.*" %>
<%@ page import="com.oreilly.servlet.*" %>
<%@ page import="com.oreilly.servlet.multipart.*" %>

<%
abstract class reName implements FileRenamePolicy {
  public File changename (File oldname) {
  DefaultFileRenamePolicy dfrp = new DefaultFileRenamePolicy();
   FileRenamePolicy frp = (FileRenamePolicy) dfrp;
   File savename = frp.rename(oldname);
  return savename;
  }
}
%>

Apparently this class needed to be abstract for the jsp to compile.

Later on in the code, I would like to rename the file. First I create a
MultipartRequest object:

MultipartRequest mr = new
MultipartRequest(request,"/var/www/projects_data/");

Then I upload the file object:

File oldn = mr.getFile(mr.getParameter("audit_doc"));

And then I rename the file:

File newname = reName.changename(oldn);

But here is when I get the error:

"non-static method changename(java.io.File) cannot be referenced from a
static context"

What does this mean and what am I doing wrong?

After I rename the file, I would still like do download it (using the
new filename) to /var/www/projects_data/.

I think I have to use a method from the oreilly package named
FilePart.writeTo().

Would anyone be able to give me a hint on how to use this?

Any help, especially code examples, will be greatly appreciated.

Thanks

Hugo

--
Dr Hugo Bouckaert
Systems and Programming Engineer

GeoInformatics Exploration Australia P/L
57 Havelock St
West Perth, WA 6005
PO Box 1675, West Perth 6872

Ph:       61 08 9420 7400
Fax:      61 08 9226 1299

www.geoinformex.com

------------------------------------------------------------------------
This email and any attachments may be confidential or legally
privileged. If you received this message in error or are not the
intended recipient, you should destroy the e-mail message and any
attachments or copies, and you are prohibited from retaining,
distributing, disclosing or using any information contained herein.
Please inform us of the erroneous delivery by return e-mail. Thank you
for your cooperation.



--
To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to