Spring Web ModuleAgenda :
Procedure to develop Web based applications by using Spring
The following steps are carried out when we deployed spring based application
What will happened the client send the request whose url-pattern ends with *.htm
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
public class DispatcherServlet extends HttpServlet {
public void init(){
ServletConfig config=getServletConfig();
String name=config.getServletName();
String fileName=name+"-servlet.xml";
WebApplicationContext context=new XmlWebApplicationContext(fileName);
}
}//class
In spring, if we want to carryout any work we must develop controller classes. The following is the UML diagram of Controller interface
package com.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class FirstController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response)throws Exception {
System.out.println("we are in handleRequest()");
ModelAndView mav=null;
return mav;
}
}//class
Configure Controller in spring bean configuration file
<bean name="/fc.htm" class="com.mvc.FirstController"/> spring-servlet.xml The following steps are carried out when the client send the request to server, whose url-pattern ends with .htm
spring model is an object it contains data, model objects are used by view component to display the output. When ever a ModelAndView object is hand over into DispatcherServlet it call InternalResourceViewResolver , this bean forms the JSP name by getting Prefix & Suffix. It is the responsibility of DispatcherServlet to dispatch the request to the Jsp.We can develop controller class based on AbstractController :The Advantages of using AbstractController when compared with Controller interface
package com.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class FirstController extends AbstractController {
public ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response)throws Exception {
System.out.println("we are in handleRequestInternal()");
ModelAndView mav=new ModelAndView("one");
return mav;
}
}//class
The following is internal code of AbstractController
package com.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public abstract class AbstractController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
handleRequestInternal(request,response);
//...............
return null;
}
public abstract ModelAndView handleRequestInternal(HttpServletRequest
request, HttpServletResponse response);
}//class
controller has to work only POST request :To achieve above requirement, we are use a method setSupportedMethods(-) in constructor as shown below.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class SecondController extends AbstractController{
public SecondController(){
String[] methods=new String[]{"POST"};
this.setSupportedMethods(methods);
}
public ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//................
return null;
}
}//class
It is not recommended to use setSupportedMethods() to achieving by using spring bean configuration file as shown below
<bean name="/sc.htm" class="com.mvc.SecondController"> <property name="supportedMethods"> <value>POST</value> </property> </bean>spring-servlet.xml
public class SecondController extends AbstractController{
public SecondController(){
this.setCacheSeconds(10);//disable cache memory
}
public ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//................
return null;
}
}//class
When we specified setCacheSeconds(-) browser catch the data from 2 mins, if we don't want to allow browser to catch the data we specified the value zero. If we want to execute the controller if the session object is available then we have to specify requireSession property.<bean name="/sc.htm" class="com.mvc.SecondController"> <property name="requireSession"> <value>true</value> </property> </bean>spring-servlet.xml Reports :
PDF :The following an example to generate PDF report based on i-Text
package com.mvc;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
public class GeneratePDF{
public static void main(String[] args) throws FileNotFoundException,
DocumentException{
Document doc=new Document();
PdfWriter.getInstance(doc, new FileOutputStream("report.pdf"));
doc.open();
PdfPTable table=new PdfPTable(3);
table.addCell("first");
table.addCell("second");
table.addCell("third");
doc.add(table);
doc.close();
System.out.println("success");
}
}//class
standalone iText.jar add jar file to IDE iText in Action book download iText in Action in PDFThe meaning of using jasper reports is create the object to a class and call the methods. ExcelSheet :
package com.mvc;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
public class ExcelView extends AbstractExcelView{
@Override
protected void buildExcelDocument(Map
|