Complete servlet Notes Day-2

New App create:

Example: 
filename: LifeCycleServlet.java
----------------------------------------
import javax.servlet.*;
public class LifeCycleServlet implements Servlet{
  public LifeCycleServlet(){

  }

  init();
  service();
  destroy();
  getServletConfig();
  getServletInfo();
}

Website: Example application illustrating servlet life cycle methods.

Appname: lifecycleapp
      +
    |
    +---WEB-INF
      |
      |
      +-classes
      |       +
      |      LifeCycleServelt.java
      |      LifeCycleServlet.class
      +-web.xml
> e:
e:\>cd servlet
e:\servlet>cd f4
e:\servlet\f4> md lifecycleapp
e:\servlet\f4\lifecycleapp>md WEB-INF
e:\servlet\f4\lifecycleapp>cd WEB-INF
e:\servlet\f4\lifecycleapp\WEB-INF>md classes
e:\servlet\f4\lifecycleapp\WEB-INF>cd classes
e:\servlet\f4\lifecycleapp\WEB-INF\classes>notepad LifeCycleServlet.java
Working



Filename: LifeCycleServlet.java
-----------------------------------
package com.controller;

import javax.servlet.*;

public class LifeCycleServlet implements Servlet{
static {
System.out.println("inside SB");
}
{
System.out.println("inside NSB");
}
    public LifeCycleServlet(){
System.out.println("inside CB");
}
public void init(ServletConfig cfg){
System.out.println("inside init");
}
public void service(ServletRequest req,ServletResponse res){
System.out.println("inside service");
}
public void destroy(){
System.out.println("inside destroy");
}
public ServletConfig getServletConfig(){
System.out.println("inside getServletconfig");
return null;
}
public String getServletInfo(){
System.out.println("inside getServletInfo");
return null;
}
}

e:\servlet\f4\lifecycleapp\WEB-INF\classes>javac -d . *.java
  errors...........
Note: set the classpath of servlet-api.java file which is available inside tomcathome\lib


E:\SERVLET\f4\lifecycleapp\WEB-INF\classes>set classpath=c:\Tomcat9\lib\servlet-
api.jar;%classpath%

E:\SERVLET\f4\lifecycleapp\WEB-INF\classes>javac -d . LifeCycleServlet.java

E:\SERVLET\f4\lifecycleapp\WEB-INF\classes>tree /f
E:.
│   LifeCycleServlet.java
└───com
    └───controller
            LifeCycleServlet.class

E:\SERVLET\f4\lifecycleapp\WEB-INF\classes>cd..

E:\SERVLET\f4\lifecycleapp\WEB-INF>editplus web.xml

E:\SERVLET\f4\lifecycleapp\WEB-INF>web.xml

E:\SERVLET\f4\lifecycleapp\WEB-INF>cd..

E:\SERVLET\f4\lifecycleapp>
Note: creating war file name: lifecycleapp.war

E:\SERVLET\f4\lifecycleapp\WEB-INF\classes>cd..

E:\SERVLET\f4\lifecycleapp\WEB-INF>editplus web.xml

E:\SERVLET\f4\lifecycleapp\WEB-INF>web.xml

E:\SERVLET\f4\lifecycleapp\WEB-INF>cd..

E:\SERVLET\f4\lifecycleapp>jar -cvf lifecycleapp.war .

Note: Deploy above war file to the tomcat server by following given steps

Step1: Start tomcat server
cmd>c:\tomcat9\bin>Tomcat9

Step2: open browser and request for given url
       http://localhost:8080
Step3: Click on "Manager App" button

Step4: uname: admin, password: admin

Step5: scroll down tomcat home page
       Click on "Choose File" submit button under 'war file to deploy'
       And select the lifecycleapp.war file

      and click on deploy
How many objects created and managed by the web container for any servlet?
Ans: For every configuration of servlet class, which is done inside web.xml file web container will creates seperate object. 

> Each servlet objects are uniquely managed by the container based on logical name of the servlet. Logical name can be supplied by using <servlet-name> tag.

http://locahost:8080/lifecycleapp/u1
1request processing:
  > Loading servlet class
    > executing static block
  > Instantiating servlet class  
    > executing NSB
    > executing CB
  > calling init() method (life cycle method)
  > calling service method

http://locahost:8080/lifecycleapp/u1  
2Request processing:
  > calling service() method

3Request Processing:
http://locahost:8080/lifecycleapp/u2  => s2
  > instatiating servlet class
    > NSB
    > CB
  > calling init() method
  > calling service() method
[*] Request processing(/u1,/u2)
  > service() method

How to servlet object are managed by container?
Container code:
--------------
******************
   url => url pattern=> Logical name
   String lname = s1/s2
   Servlet s = (Servlet) map.get(lname);
   if(s==null){
      Searching for servlet class name
      String cname = ?
      Class c = Class.forName(cname);
      s = (Servlet)c.newInstance();
      map.put(lname,s);
      ServletConfig config = ...
      s.init(config);
   }
   ServletRequest req = .......
   ServletResponse res = ......
   
   s.service(req,res);
..............
   

> For any servlet web container is allow to provide multipal configurations inside web.xml.

> For any servlet configuration we can provide any number of url pattern.

Most Imp
What is the difference made by the container in order to processing first request and other than first request?
> In default case web container may takes extra time during first request processing compare to other than request
  1Request: 
    > loading servlet
    > instantiating servlet
    > calling init method
    > calling service()  method
  2/*Request:
    > calling service() method
Difference between 1st request and 2nd request


How to process all client request in same amount of time?
How to instantiate servlet class at the time of web deployement?
Ans
     <load-on-startup> configuration providing web.xml file.

What is the working of <load-on-startup> tag?
> By using this tag can instantiate a servlet class at the time of deployment.

Classname:  com.controller.LifeCycleServlet
Logical name: s1
Url Pattern: /u1

web.xml

Developing a web project using myeclipse
----------------------------------------
> open myeclipse IDE
> Right click on the PackageExplorer view and click on new option, select web project
  Enter project name: webapp1
  > finish

How to sending a HTML response from a servlet?
Step1: Setting response/MIME type by using setConentType() method of ServletResponse interface

      response.setContentType("*/*");
Step2: retrieving desired output stream object from a ServletResponse
    Case1: For HTML response - java.io
      PrintWriter out = response.getWriter();

    Case2: For binary response(audio/video/image)-javax.servlet
      ServletOutputStream out = response.getOutputStream();
Step3: preparing html response
    String msg = "<!DOCTYPE html>";
    msg+="<head><title>HomePage</title></head>";
    msg+="<body bgcolor = 'CYAN'>"
    msg+="<h1><center>Welcome To Jit<center></h1></body></html>";

Step4: sending response message to the client
   out.println(msg);
Step5:
   close...............

File name HtmpResponceServlet.java

package com.edu;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HtmlResponseServlet implements Servlet {
@Override
public void init(ServletConfig arg0) throws ServletException {

}

@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// step1: setting response type
response.setContentType("text/HTML");

// step2: getting printwriter object/stream
PrintWriter out = response.getWriter();

// step3: preparing html response message
String msg = "<!DOCTYPE html>";
msg += "<head><title>HomePage</title></head>";
msg += "<body bgcolor = 'CYAN'>";
msg += "<h1><center>Welcome To Jit<center></h1></body></html>";

// step4: sending response to the client by calling print() or println()
out.print(msg);

// step5: closing resources
out.close();

}

@Override
public void destroy() {

}

@Override
public ServletConfig getServletConfig() {
return null;
}

@Override
public String getServletInfo() {
return null;
}
}

Web.xml file

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>html</servlet-name>
    <servlet-class>com.edu.HtmlResponseServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ImageResponseServlet</servlet-name>
    <servlet-class>com.edu.ImageResponseServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>html</servlet-name>
    <url-pattern>/index.html</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ImageResponseServlet</servlet-name>
    <url-pattern>/image</url-pattern>
  </servlet-mapping>
 
</web-app>


How to sending image  from servlet to the client?
  response.setContentType("image/JPEG");
 
Sending image from servlet to client
  
> Begining of the request processing web container will create two types of output stream and make available to the every servlet application passing through argument to the service.

> Any servlet application can send a response from a service method by using response object given output stream
a. PrintWriter:
   > By using methods of PrintWriter we can send only text type of response OR  html response
 
b. ServletOutputStream:
Image processing 

  Coding:

    File name - ImageResponceServlet.java-

package com.edu;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageResponseServlet extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("image/PNG");
ServletOutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream("c:\\temp\\a.png");
int ch = in.read();
while(ch!=-1){
out.write(ch);
ch = in.read();
}
in.close();
out.close();
}
}

   Q: How to sending binary response from a servlet?
   > We can send binary data(mp3,mp4,jpeg files) from a servlet by using ServletOutputStream methods.
package com.edu;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageResponseServlet extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("audio/mpeg");
ServletOutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream("c:\\temp\\a.mp3");
int ch = in.read();
while(ch!=-1){
out.write(ch);
ch = in.read();
}
in.close();
out.close();
}
}
 

Types of web container?
1. Stand alone web container
2. In process web container
3. Out process web container (popular)  

What is the responsibility of web container?
> Generally web is responsible for managing servlet and jsp page.
> Web container performs given operations
  a. loading servlet class
  b. instantiating servlet class
  c. calling init() method
  d. calling service() method
  ...........
     callling destroy().




Comments

Popular posts from this blog

Complete Servlet notes Day-3

Complete notes Servlet Day-1