How to include a file outside the application (war) using jsp include

I use "jsp: include" to include a static file in one of my jsp files. It works fine when the static html file is inside the application folder. However, if it is stored outside the application folder, it is not included in the JSP file.

Note. I created a context for the folder in which the static file is saved, and I can view the html file with a direct URL.

Please, help..

+5
source share
6 answers

I solved this problem using the c: import tag .

To define a dynamic URL, I used the bean: define tag. Thank you friends for their suggestions and help.

+11

jsp:include -. java.io.File, , ClassLoader.getResource .

+3

<c:import> , charEncoding. <%@include%> <jsp:include>.

+2
+1

, URL: : http://link.inet.vn/seo-website/inet.html

public class URLReader
{
    public URLReader()
    {
        in = null;
        out = null;
        requestType = null;
        headers = null;
        content = null;
        headers = new Hashtable();
    }

    public void doGet(String server, String uri, int port)
    {
        try{
            Socket client = new Socket(server, port);
            client.setKeepAlive(true);
            in = new DataInputStream(client.getInputStream());
            out = new DataOutputStream(client.getOutputStream());
            out.writeBytes("GET " + uri + " HTTP/1.0\r\n");
            out.writeBytes("Host: " + server + "\r\n");
            out.writeBytes("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n");
            out.writeBytes("Accept-Language: en-us\r\n");
            out.writeBytes("Accept-Encoding: gzip, deflate\r\n");
            out.writeBytes("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n");
            out.writeBytes("Connection: Keep-Alive\r\n");
            out.writeBytes("Content-Length: 0\r\n\r\n");
            out.flush();
            parseRequest();
            out.close();
            in.close();
            client.close();        
        }catch(Exception e){
            System.out.println(e.getMessage());
        }

        return;
    }

    public byte[] getContent()
    {
        return content;
    }

    public String getHeader(String name)
    {
        String key = (String)headers.get(name);
        return key;
    }

    public Hashtable getHeaders()
    {
        return headers;
    }

    public String getRequestType()
    {
        return requestType;
    }

    public static void main(String args[]) throws IOException
    {
        URLReader reader = new URLReader();

        reader.doGet("link.inet.vn", "/seo-website/inet.html", 80);
        if(reader.getContent() != null)
            System.out.println(new String(reader.getContent(),"UTF-8"));

    }

    private boolean parseRequest()
    {
        byte match[];
        int index;
        String line;
        match = (new byte[] {
            13, 10, 13, 10
        });
        index = 0;
        line = "";
        int i;
        try{
            while((i = in.read()) >= 0) 
            {
                if(i == match[index] && index <= 3)
                    index++;
                else
                    index = 0;
                if(index == 4)
                {
                    content = readHTTPContent();
                    break;
                }
                line = line + (char)i;
                if(line.length() > 2 && i == 10)
                {
                    int pos = line.indexOf(':');
                    if(pos != -1)
                    {
                        String name = line.substring(0, pos);
                        String value = line.substring(pos + 1, line.length()).trim();
                        setHeader(name, value);
                    } else
                    {
                        setRequestType(line.substring(0, line.length()).trim());
                    }
                    line = "";
                }
            }

            return true;
        }catch(Exception e){
            System.out.println(e.getMessage());
            return false;
        }                
    }

    private byte[] readHTTPContent()
        throws IOException
    {
        ByteArrayOutputStream baosContent = new ByteArrayOutputStream();
        int contentLength = 0;
        try {
            contentLength = Integer.parseInt( (String) headers.get("content-length"));
        } catch (Exception ex) {
            contentLength = 1024 * 1024;
        }
        int bytesToRead = 0;
        int bytesRead   = 0;
        int totalBytesRead = 0;
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];

        if (contentLength < bufferSize) {
            bytesToRead = contentLength;
        } else {
            bytesToRead = bufferSize;
        }
        do {
            try {
                bytesRead = in.read(buffer, 0, bytesToRead);
            } catch (InterruptedIOException e) {
                /* comms read timeout expired, no problem */
                System.out.println("Timeout reading from socket");
            }
            if (bytesRead == -1) {
                in.close();
               // throw new IOException("Connection was closed by client.");
                break;
            } else if (bytesRead > 0) {
                //////////////////////////////////////
                baosContent.write(buffer, 0, bytesRead);
                //////////////////////////////////////
                totalBytesRead += bytesRead;
            }
            // Left bytes to read
            if (contentLength - totalBytesRead > bufferSize) {
                bytesToRead = bufferSize;
            } else {
                bytesToRead = contentLength - totalBytesRead;
            }
        } while (totalBytesRead < contentLength);

        return baosContent.toByteArray();        
    }


    public void saveToFile(byte data[], String filename)
    {
        try{
            File f = new File(filename);
            FileOutputStream fout = new FileOutputStream(f);
            fout.write(data);
            fout.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }        
        return;
    }


    private void setHeader(String key, String value)
    {
        headers.put(key.toLowerCase(), value);
    }

    private void setRequestType(String s)
    {
        requestType = new String(s);
    }

    private byte content[];
    private Hashtable headers;
    private DataInputStream in;
    private DataOutputStream out;
    private String requestType;
}
+1

- ? - .

I suspect that you want to have some configuration that is independent of the WAR file, and is unique to each environment in which the WAR is deployed.

0
source

All Articles