Showing posts with label Java Servlet. Show all posts
Showing posts with label Java Servlet. Show all posts

Sunday, September 25, 2011

Servlet code to download text file from website

Here’s a servlet code example to download a text file from a website.

1. Create a text file named “testing.txt” , put it into the project root folder.

\--servlet (project root folder)
      \--testing.txt (download file here)
      \--WEB-INF
           \--web.xml
 
 
2. Servlet code
package org.best.example;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletDownloadDemo extends HttpServlet{
 
  private static final int BYTES_DOWNLOAD = 1024;
 
  public void doGet(HttpServletRequest request, 
   HttpServletResponse response) throws IOException{
 response.setContentType("text/plain");
 response.setHeader("Content-Disposition",
                     "attachment;filename=downloadname.txt");
 ServletContext ctx = getServletContext();
 InputStream is = ctx.getResourceAsStream("/testing.txt");
 
 int read=0;
 byte[] bytes = new byte[BYTES_DOWNLOAD];
 OutputStream os = response.getOutputStream();
 
 while((read = is.read(bytes))!= -1){
  os.write(bytes, 0, read);
 }
 os.flush();
 os.close(); 
   }
}
 
3. Web deployment descriptor
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
 <display-name>serlvetdemo</display-name>
 
 <servlet>
  <servlet-name>ServletName</servlet-name>
  <servlet-class>com.mkyong.ServletDownloadDemo</servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>ServletName</servlet-name>
  <url-pattern>/DownloadDemo</url-pattern>
 </servlet-mapping>
 
</web-app>
 
4. Compiled it and copy to the Tomcat folder
\--Tomcat
     \--webapps
          \--servlet 
               \-- testing.txt (download file)
               \--WEB-INF 
                    \--web.xml
                    \--classes
                         \--org
                              \--best
\--example
                                          \--ServletDownloadDemo.class
 
4. Done , access URL http://localhost:8080/servlet/DownloadDemo , it will prompts user to download the text file automatically.
 
 

Tuesday, September 20, 2011

Java Servlet Access an ejb from a servlet

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ack.j2ee.ejb.session.Lawyer;
import com.ack.j2ee.ejb.session.LawyerHome;

/**
 * web.xml configuration part of the an ejb component
 *
 *  <web-app>
 ...
 <ejb-ref>
 <ejb-ref-name>yoda</ejb-ref-name>
 <ejb-ref-type>Session</ejb-ref-type>
 <home>com.ack.j2ee.ejb.session.LawyerHome</home>
 <remote>com.ack.j2ee.ejb.session.Lawyer</remote>
 </ejb-ref>
 ...
 </web-app>
 *
 * the vendor-specific mapping of the res-ref-name into their
 * own application server space, eg weblogic does the following
 * in a weblogic.xml file
 *
 <weblogic-web-app>
 ...
 <reference-descriptor>
 ...
 <ejb-reference-description>
 <ejb-ref-name>yoda</ejb-ref-name>
 <jndi-name>ejb/lawyer</jndi-name>
 </ejb-reference-description>
 ...
 </reference-descriptor>
 ...
 </weblogic-web-app>
 */
public class AccessAnEjbFromAServlet extends HttpServlet {
  private Context ctx;

  public void init() throws ServletException {
    try {
      // lets share the context for ejb lookup for
      // this servlet's incoming requests
      ctx = new InitialContext();
    }
    catch( NamingException nex ) {
      throw new ServletException( "couldn't locate JNDI context", nex );
    }
  }


  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();

    try {
      // get reference to business interface from home interface
      Lawyer lawyer = getLawyer();

      // use the business interface
      lawyer.sendHimDown( "bad guy" );

      // let application server reclaim ejb resources
      lawyer.remove();
    }
    catch( LawyerException lex ) {
      pw.println( lex.getMessage() );
    }
    catch( Exception ex ) {
      log( "problem using the lawyer", ex );
      pw.println( ex.getMessage() );
    }

    pw.println( "well, that wasn't so bad" );
  }

  private Lawyer getLawyer() throws LawyerException {
    try {
      Object ejbObject = null;

      // get hold of the object you want by name
      synchronized( this ) {
        System.out.println( "calling on yoda..." );
        ejbObject = ctx.lookup( "java:comp/env/yoda" );
      }

      // narrow retrieved object into specific expected type
      LawyerHome home = (LawyerHome) PortableRemoteObject.
          narrow( ejbObject, LawyerHome.class );

      return home.create();
    }
    catch( Exception ex ) {
      log( "problem getting hold of a lawyer", ex );
      throw new LawyerException( ex.getMessage() );
    }
  }
}

class LawyerException extends Exception {
  public LawyerException( String str ) {
    super( str );
  }
}

/**
 *
 * This is the web.xml configuration
 *
 <web-app>
 ...
 <ejb-ref>
 <description>bring forth the yoda lawyer</description>
 <ejb-ref-name>yoda</ejb-ref-name>
 <ejb-ref-type>Session</ejb-ref-type>
 <home>com.ack.j2ee.ejb.session.LawyerHome</home>
 <remote>com.ack.j2ee.ejb.session.Lawyer</remote>
 </ejb-ref>
 </web-app>
 *
 * But the vendor-specific xml file must map this
 * ejb-ref-name to the name in the JNDI space, for
 * example, in weblogic we have the weblogic.xml,
 *
 <weblogic-web-app>
 <reference-descriptor>
 <ejb-reference-description>
 <ejb-ref-name>yoda</ejb-ref-name>
 <jndi-name>ejb/lawyer</jndi-name>
 </ejb-reference-description>
 </reference-descriptor>
 </weblogic-web-app>
 */

Friday, August 26, 2011

Accessing session items

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AccessingSessionItems extends HttpServlet {
  public void goGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();
    pw.println( "<HTML><BODY>" );

    HttpSession theSession = req.getSession();

    // get a named item out of the session
    Object obj = theSession.getAttribute( "power" );
    pw.println( "<BR>" + obj );

    // get all the items out of the session
    Enumeration attributeNames = theSession.getAttributeNames();
    while( attributeNames.hasMoreElements() ) {
      String attributeName = (String) attributeNames.nextElement();
      obj = theSession.getAttribute( attributeName );
      pw.println( "<BR>" + attributeName + " = " + obj );
    }

    pw.println( "</BODY></HTML>" );
  }
}

Monday, August 22, 2011

Accessing Java Servlet JNDI environment variables

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * It is better to use environment variables within a J2EE
 * context for values that can be changed a deployment time
 * instead of Context attributes within the web.xml.  This
 * way you don't have to update the web.xml to change the
 * values.
 *
 *
 <env-entry>
 <description>the guy responsible for this site</description>
 <env-entry-name>webmaster</env-entry-name>
 <env-entry-value>x@xxx</env-entry-value>
 <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>
 */
public class AccessingServletJndiEnvironmentVariables extends HttpServlet {

  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();

    String webMaster = null;
    try {
      // get a handle on the JNDI root context
      Context ctx = new InitialContext();

      // and access the environment variable for this web component
      webMaster = (String) ctx.lookup( "java:comp/env/webmaster" );
    }
    catch( NamingException ex ) {
      ex.printStackTrace();
    }

    pw.println( "the web master is -> " + webMaster );
  }
}

Saturday, August 20, 2011

Java Servlet Buffering responses

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
  */
public class BufferingServletResponses extends HttpServlet {
  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();

    // create 32K buffer
    res.setBufferSize( 32 * 1024 );

    pw.println( "everything we send now is buffered " );
    pw.println( "at the server until we reach the " );
    pw.println( "buffer size limit or we do a flush!" );

    // check to see if anything has been sent to the client
    if( res.isCommitted() ) {
      pw.println( "<br>damned, something has been sent" );
    }
    else {
      // clear the buffer, so what has gone before is lost
      res.resetBuffer();

      pw.println( "we are going to clear this as well" );

      // clears buffer, status codes and headers
      res.reset();

      // we've blanked the ContentType header so lets add it back
      res.setContentType( "text/html" );

      pw.println( "<br>but we are going to see this" );
    }

    // send what we have now
    res.flushBuffer();

    pw.println( "<br>and this will get flushed at the end of the method" );
    pw.println( "<br>current response buffer size is: " + res.getBufferSize() );
  }
}

Friday, August 19, 2011

Servlet Basic Authentication

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Securing a web application with basic HTTP authentication
 * has been reduced to a configuration within web.xml
 *
 * to test: http://localhost/ack/servlet/protected/footie/get_time
 *
 <web-app>
 <servlet>
 <servlet-name>footie_time</servlet-name>
 <servlet-class>com.ack.web.servlet.BasicAuthenticationWebResource</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>footie_time</servlet-name>
 <url-pattern>/protected/footie/get_time</url-pattern>
 </servlet-mapping>
 <security-constraint>
 <web-resource-collection>
 <web-resource-name>protected_zone</web-resource-name>
 <url-pattern>/protected/footie/*</url-pattern>
 <http-method>GET</http-method>
 <http-method>POST</http-method>
 <http-method>PUT</http-method>
 <http-method>DELETE</http-method>
 <http-method>HEAD</http-method>
 <http-method>OPTIONS</http-method>
 <http-method>TRACE</http-method>
 </web-resource-collection>
 <auth-constraint>
 <role-name>footie</role-name>
 </auth-constraint>
 <user-data-constraint>
 <transport-guarantee>NONE</transport-guarantee>
 </user-data-constraint>
 </security-constraint>
 <login-config>
 <auth-method>BASIC</auth-method>
 <realm-name>pure genius football club</realm-name>
 </login-config>
 <security-role>
 <description>the footie guys</description>
 <role-name>footie</role-name>
 </security-role>
 </web-app>
 *
 * finally we need to map from the 'footie' role name to the
 * security principal with the application server, in weblogic
 * we do the following within the supporting weblogic.xml file:
 *
 *
 <weblogic-web-app>
 <security-role-assignment>
 <role-name>footie</role-name>
 <principal-name>cleve</principal-name>
 </security-role-assignment>
 </weblogic-web-app>
 */
public class BasicAuthenticationWebResource extends HttpServlet {
  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();

    pw.println( "<strong>21:00 @ The Wandle Centre, Wandsworth</strong>" );
    pw.println( "<br>don't be late!" );

  }
}

Thursday, August 18, 2011

An included Servlet

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AnIncludedServlet extends HttpServlet {

  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    PrintWriter pw = res.getWriter();

    /**
     * note that a servlet that has been included within another
     * servlet has access to both the original request uri, servlet
     * path, path info, context path and query string through the
     * HttpServletRequest object.
     *
     * However it also has access to these values that can be different
     * depending on how the servlet include was dispatched.  The servlet
     * engine gives you access to these though request attributes as
     * demonstrated before.
     */

    pw.println( "<h1>The Included Servlet</h1>" );
    pw.println( "<br>request uri: " +
                req.getAttribute( "javax.servlet.include.request_uri" ) );
    pw.println( "<br>context path: " +
                req.getAttribute( "javax.servlet.include.context_path" ) );
    pw.println( "<br>servlet path: " +
                req.getAttribute( "javax.servlet.include.servlet_path" ) );
    pw.println( "<br>path info: " +
                req.getAttribute( "javax.servlet.include.path_info" ) );
    pw.println( "<br>query string: " +
                req.getAttribute( "javax.servlet.include.query_string" ) );
  }
}

Wednesday, August 17, 2011

Accessing a data source from a servlet

package org.best.example;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * web.xml configuration part of the a data source
 *
 *  <web-app>
 ...
 <resource-ref>
 <description>the database for this app</description>
 <res-ref-name>jdbc/thedatabase</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>CONTAINER</res-auth>
 </resource-ref>
 ...
 </web-app>
 *
 * the vendor-specific mapping of the res-ref-name into their
 * own application server space, eg weblogic does the following
 * in a weblogic.xml file
 *
 <weblogic-web-app>
 ...
 <reference-descriptor>
 ...
 <resource-description>
 <res-ref-name>jdbc/thedatabase</res-ref-name>
 <jndi-name>jdbc/gangland</jndi-name>
 </resource-description>
 ...
 </reference-descriptor>
 ...
 </weblogic-web-app>
 */

public class AccessingADataSourceFromAServlet extends HttpServlet {

  public void init() {
    System.out.println( "### loading -> " + getServletName() + " at " +
                        new Date( System.currentTimeMillis() ).toString() );

  }

  public void doGet( HttpServletRequest req, HttpServletResponse res )
      throws ServletException, IOException {
    res.setContentType( "text/html" );
    PrintWriter pw = res.getWriter();

    Connection con = null;
    try {
      Context ctx = new InitialContext();
      DataSource ds = (DataSource) ctx.lookup( "java:comp/env/jdbc/thedatabase" );
      con = ds.getConnection();
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery( "select * from enemies" );
      while( rs.next() ) {
        pw.println( rs.getString( "name" ) + "<br>" );
      }
    }
    catch( Exception ex ) {
      log( "problem accessing database", ex );
      res.sendError( res.SC_INTERNAL_SERVER_ERROR, ex.getMessage() );
    }
    finally {
      if( con != null ) {
        try {
          con.close();
        }
        catch( SQLException ex ) {
          log( "problem closing connection", ex );
        }
      }
    }
  }
}

Saturday, June 4, 2011

How to Redirect Servlet Call to Another URL

To redirect a call from a servlet to some other url, use the sendRedirect() method of the HttpServletResponse object that is passed to the service() method. The sendRedirect() method takes the new destination url as a string parameter.

package org.best.example;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExampleServlet extends HttpServlet {
  
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */

    protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        //Redirect call to another url
        response.sendRedirect("http://www.java.com");
    }
  
}

Thursday, May 26, 2011

How to Autorefersh the Servlet

This code contains the how 2 auto refresh the servlet and add display how many time u refresh this page

package org.best.example;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class AutoRefresh extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
HttpSession session = req.getSession();
Long time = (Long) session.getAttribute("time");
if (time==null)
session.setAttribute("time",new Long(0));
long temp = 1;
if (time!=null)
temp = (time.longValue())+1;
if(temp&lt;5)
res.addHeader("Refresh","15");

out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;Client Refresh&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");
out.println("Viewed this page " +temp+"time.");
session.setAttribute("time",new Long(temp));
out.println("&lt;/body&gt;&lt;/html&gt;");
}
}