Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / November 2005

Tip: Looking for answers? Try searching our database.

trouble resolving a class with JSP

Thread view: 
anikkar@gmail.com - 03 Nov 2005 19:40 GMT
this may seem like a stupid question, but i cant figure it out...

i have a simple JSP, in which I want to call a static method in another
class, but tomcat says it can't find the other class. The class I want
to call is no within a package, it is in the same directory as the jsp
file.

here is my jsp code:

<%@ page import="java.util.Enumeration"%>
<%@ page import="java.io.File"%>

<html>
<body>
<form action="unzip.jsp" method=post>
    <SELECT    NAME="File"    SIZE=4>
        <%  File dir = new File("/myDir");

            for(File tempFile : dir.listFiles()) {    %>
        <OPTION><%=tempFile%></OPTION>
        <% } %>

    </SELECT>
    <INPUT TYPE=SUBMIT VALUE=Press>
</form>
<B>Form Content</B><BR>
<TABLE>
<%  Enumeration parameters = request.getParameterNames();
        String parameterName = (String)parameters.nextElement();
        String parameterValue = request.getParameter(parameterName);

        if(parameterValue.endsWith(".zip")) {
           Utils.unzipFile(new File(parameterValue));
        }
        %>
</body>
</html>

thanks!
Dennis Willson - 03 Nov 2005 19:53 GMT
Well, what class and method are you getting the error for?

> this may seem like a stupid question, but i cant figure it out...
>
[quoted text clipped - 35 lines]
>
> thanks!
HalcyonWild - 03 Nov 2005 20:56 GMT
> this may seem like a stupid question, but i cant figure it out...
>
> i have a simple JSP, in which I want to call a static method in another
> class, but tomcat says it can't find the other class. The class I want
> to call is no within a package, it is in the same directory as the jsp
> file.

[ something i deleted ]

The class file generated by javac should be present in the
TomcatDir/webapps/myapp/WEB-INF/classes folder.

Also, if you dont want to do that, and your jsp, static class .java and
.class files are in the same folder, then check if you have "."
(current dir) in your classpath.

It will work, but it is a bad idea after all. Avoid classes with
default package. You can try this later, but do it. default package
creates lot of confusion when you have large number of files. (I once
had trial.class in 3 places, and i was confused as to why java is not
executing what I am telling it to).

Put your static class in a package. The class file should be present in
the classes folder, with the correct package hierarchy.

eg. if you have
package com.myname.test;
in your java file,
you should have the generated class file in
classes/com/myname/test folder hierarchy. Dont worry about classpath,
when tomcat runs your app, it sets the classpath.

Post your error if problem not resolved.
anikkar@gmail.com - 03 Nov 2005 23:12 GMT
Hi HalcyonWild,

thanks for the reply. I agree with you about packaging classes, it is
much better practice. I am just running a few test applications to try
and get a feel for how JSPs work.

So from what you are saying, my class files should be in the WEB-INF
directory? i'm guessing this goes for any jar files i wish to reference
as well.

back to my problem, I am getting the following exception from tomcat:

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 18 in the jsp file: /unzip.jsp
Generated servlet error:
/usr/src/jakarta-tomcat-5.0.27/work/hosting/test.lambandtunafish.com/_/org/apache/jsp/unzip_jsp.java:71:
cannot find symbol
symbol  : variable Utils
location: class org.apache.jsp.unzip_jsp
           Utils.unzipFile(new File(parameterValue));
           ^
1 error

Here is the JSP file:

<%@ page import="java.util.Enumeration"%>
<%@ page import="java.io.File"%>
<html>
<body>
<form action="unzip.jsp" method=post>
    <SELECT    NAME="File"    SIZE=4>
        <%  File dir = new File("/home/content/b/u/d/budweiser/html/test");

            for(File tempFile : dir.listFiles()) {    %>
        <OPTION><%=tempFile%></OPTION>
        <% } %>

    </SELECT>
    <INPUT TYPE=SUBMIT VALUE=Press>
</form>
<B>Form Content</B><BR>
<%  Enumeration parameters = request.getParameterNames();
        String parameterValue = request.getParameter("File");

        if(parameterValue.endsWith(".zip")) {
           Utils.unzipFile(new File(parameterValue));
        }
        %>
</body>
</html>

Here is my Util class:

import java.io.*;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;

public class Utils {

    /* this method can introduce errors when user's have restricted access
to File System */
   public static void copy(InputStream in, OutputStream out) throws
IOException {
       // synchronize to prevent other threads from accessing either
stream while
       // they are being read
       synchronized (in) {
           synchronized (out) {
               byte[] buffer = new byte[256];
               int len = 0;
               while ((len = in.read(buffer)) > 0) {
                   out.write(buffer, 0, len);
               }
           }
       }
   }

    /**
    * Creates the directory structure in which the file resides
    * @param file
    * @throws IOException
    */

   public static void createTreeForFile(File file) throws IOException
{
       File parent;
       if ((parent = file.getParentFile()) != null) {
           if (parent.exists()) {
               return;
           }
           createTreeForFile(parent);
       }
       parent.mkdir();
   }

   public static void unzipFile(File zip) throws IOException {
       FileInputStream fin = new FileInputStream(zip);
       ZipInputStream zin = new ZipInputStream(fin);
       ZipEntry ze = null;

       while ((ze = zin.getNextEntry()) != null) {
           System.out.println("Unzipping " + ze.getName());

           createTreeForFile(new File(ze.getName()));
           FileOutputStream fout = new FileOutputStream(ze.getName());
           copy(zin, fout);
           zin.closeEntry();
           fout.close();
       }

       zin.close();
   }
}
HalcyonWild - 07 Nov 2005 13:01 GMT
> Hi HalcyonWild,
>
[quoted text clipped - 5 lines]
> directory? i'm guessing this goes for any jar files i wish to reference
> as well.

-----------

Well, that is not really important. Your jar files might reside
anywhere on the computer, just make sure they are in the classpath.

Also, you need to understand how tomcat runs. It includes your
webinf/classes folder in the classpath while executing your jsp, and
the TOMCATHOME/common/lib or server/lib folder (I am sorry I might not
be exact with folder name spellings, I dont have tomcat on my computer,
and I dont need to use it these days). So you might also copy your jar
files into common/lib (or server/lib) and it would be fine. Or keep
them just where they are and include the path of the jar in your
classpath.

---------------

> back to my problem, I am getting the following exception from tomcat:
>
[quoted text clipped - 11 lines]
>             ^
> 1 error
-------------

It means that it does not know anything about Utils class. If Utils is
part of your test with JSP, just keep generated class file in
Webinf/classes folder. It should work. See how Tomcat sets classpath
before it runs, in the start.bat or start.sh file. If Utils is a part
of some jar, include jar in classpath of the computer. (export in *nix,
control panel->system->advanced->environment vars in Win2K).

----------------
Tim B - 08 Nov 2005 04:59 GMT
> Hi HalcyonWild,
>
[quoted text clipped - 14 lines]
> An error occurred at line: 18 in the jsp file: /unzip.jsp
> Generated servlet error:

/usr/src/jakarta-tomcat-5.0.27/work/hosting/test.lambandtunafish.com/_/org/a
pache/jsp/unzip_jsp.java:71:
> cannot find symbol
> symbol  : variable Utils
[quoted text clipped - 7 lines]
> <%@ page import="java.util.Enumeration"%>
> <%@ page import="java.io.File"%>

<snip>

You need to import your Utils class to use it, and you'll need to put it
into a package in order to do that.
HalcyonWild - 08 Nov 2005 09:30 GMT
> > Hi HalcyonWild,
> >
[quoted text clipped - 33 lines]
> You need to import your Utils class to use it, and you'll need to put it
> into a package in order to do that.

Oh yes, I missed that. Apart from the classpath and packaging, you need
to import the class that you want to use.
anikkar@gmail.com - 08 Nov 2005 19:36 GMT
Thanks for the replies.

I actually got the classpath working correctly, and I have a bit of a
better understanding of how tomcat and JSPs work.

unfortunately, I can't look at the tomcat folders because i don't have
access through my host.

I still cant get the above code to work, but that is because I cant
seem to create a file through a jsp. I have tried the simplest of
examples, and I get access denied...

<%@ page import="java.io.*"%>
<html>
<body>
<%
out.println("Test");
BufferedWriter fp = null;
     String str = new String("blah blah");

    try {
        fp = new BufferedWriter(new
FileWriter("/home/content/b/u/d/budweiser/test/temp2.txt", true));

        fp.write(str, 0, str.length());
        fp.newLine();

        fp.flush();
        fp.close();
out.println("Success");
    }
    catch (IOException e) {
    out.println(e.getMessage());
    }
        %>
</body>
</html>

I tried contacting the godaddy's customer support (which is pretty
bad), and I generally get the answer that i should make sure the file
permissions are correct (through an ftp application, which still
doesn't work), but that doesn't solve the problem of the jsp creating
the file...
HalcyonWild - 09 Nov 2005 10:23 GMT
[ stuff deleted ]
> unfortunately, I can't look at the tomcat folders because i don't have
> access through my host.

You need access, if you want to include jars. You should be able to
modify environment variables. As a temp measure, if you have access,
you might want to modify the startup.bat file, and append to the
classpath using set CLASSPATH=%CLASSPATH%;c:\myclasses
(Or export classpath=$CLASSPATH;somepath , in case of *nix)

> I still cant get the above code to work, but that is because I cant
> seem to create a file through a jsp. I have tried the simplest of
> examples, and I get access denied...

You need read write access to your folder. Why dont you install Tomcat
locally on your pc, and try here. Later you can create a war and deploy
on the remote machine.

> I tried contacting the godaddy's customer support (which is pretty
> bad), and I generally get the answer that i should make sure the file
> permissions are correct (through an ftp application, which still
> doesn't work), but that doesn't solve the problem of the jsp creating
> the file...

tell the admin to give you read write permissions on your folder.
Arash Nikkar - 09 Nov 2005 17:32 GMT
> tell the admin to give you read write permissions on your folder.

Thats seems to be the source of my problems. The last answer I got it
that godaddy doesn't allow Java file output permissions, which makes
absolutely no sense to me, so i've just been going back and forth with
them.

thanks for your help and suggestions!
Roedy Green - 10 Nov 2005 01:36 GMT
>Thats seems to be the source of my problems. The last answer I got it
>that godaddy doesn't allow Java file output permissions, which makes
>absolutely no sense to me, so i've just been going back and forth with
>them.

If you need a more Java-friendly ISP, see
http://mindprod.com/jgloss/ispvendors.html
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

anikkar@gmail.com - 03 Nov 2005 23:30 GMT
Hi HalcyonWild,

thanks for the reply. I agree with you about packaging classes, it is
much better practice. I am just running a few test applications to try
and get a feel for how JSPs work.

So from what you are saying, my class files should be in the WEB-INF
directory? i'm guessing this goes for any jar files i wish to reference
as well.

back to my problem, I am getting the following exception from tomcat:

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 18 in the jsp file: /unzip.jsp
Generated servlet error:
/usr/src/jakarta-tomcat-5.0.27/work/hosting/test.lambandtunafish.com/_/org/apache/jsp/unzip_jsp.java:71:
cannot find symbol
symbol  : variable Utils
location: class org.apache.jsp.unzip_jsp
           Utils.unzipFile(new File(parameterValue));
           ^
1 error

Here is the JSP file:

<%@ page import="java.util.Enumeration"%>
<%@ page import="java.io.File"%>
<html>
<body>
<form action="unzip.jsp" method=post>
    <SELECT    NAME="File"    SIZE=4>
        <%  File dir = new File("/home/content/b/u/d/budweiser/html/test");

            for(File tempFile : dir.listFiles()) {    %>
        <OPTION><%=tempFile%></OPTION>
        <% } %>

    </SELECT>
    <INPUT TYPE=SUBMIT VALUE=Press>
</form>
<B>Form Content</B><BR>
<%  Enumeration parameters = request.getParameterNames();
        String parameterValue = request.getParameter("File");

        if(parameterValue.endsWith(".zip")) {
           Utils.unzipFile(new File(parameterValue));
        }
        %>
</body>
</html>

Here is my Util class:

import java.io.*;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;

public class Utils {

    /* this method can introduce errors when user's have restricted access
to File System */
   public static void copy(InputStream in, OutputStream out) throws
IOException {
       // synchronize to prevent other threads from accessing either
stream while
       // they are being read
       synchronized (in) {
           synchronized (out) {
               byte[] buffer = new byte[256];
               int len = 0;
               while ((len = in.read(buffer)) > 0) {
                   out.write(buffer, 0, len);
               }
           }
       }
   }

    /**
    * Creates the directory structure in which the file resides
    * @param file
    * @throws IOException
    */

   public static void createTreeForFile(File file) throws IOException
{
       File parent;
       if ((parent = file.getParentFile()) != null) {
           if (parent.exists()) {
               return;
           }
           createTreeForFile(parent);
       }
       parent.mkdir();
   }

   public static void unzipFile(File zip) throws IOException {
       FileInputStream fin = new FileInputStream(zip);
       ZipInputStream zin = new ZipInputStream(fin);
       ZipEntry ze = null;

       while ((ze = zin.getNextEntry()) != null) {
           System.out.println("Unzipping " + ze.getName());

           createTreeForFile(new File(ze.getName()));
           FileOutputStream fout = new FileOutputStream(ze.getName());
           copy(zin, fout);
           zin.closeEntry();
           fout.close();
       }

       zin.close();
   }
}


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.