Sie sind auf Seite 1von 9

FrontControllerServlet.

java
Definition:
1) Front controller is a java program which traps all http requests given
by the client and pass them to appropriate java classes.
2) Only servlet/jsp acts as a front controller if we configured either
directory match or extension match.
3) In struts ActionServlet acts as a frontcontroller.
Problem: Ordinary java classes that are acting as webresource programs
of webapplication cant take client generated http request directly.
Note: Only servlet/jsp programs of java webapplication can take http
request directly. In struts ActionServlet is normal java class.
Solution: Develop special servlet/jsp program as front controller to trap
all http requests given by clients and to pass them to appropriate java
classes.
Note: The front controller servlet/jsp program must be configured in
web.xml either by using extension match or directory match url pattern.
Note: Front controller is a special webresource program(servlet/jsp) which
acts as entry and exit point for all request that are given to other web
resource programs of weapplication, which are java classes.
Example: In struts 1.x applications ActionServlet is frontcontroller servlet
for struts Action classes(java classes).
Example: In spring web MVC DispatcherServlet is frontcontroller for
command controller classes(java classes).
Note: front controller servlet/jsp program must be configuted in web.xml
file with directory match url pattern or with extension match url pattern.
Diagram:

Classes diagram

Sequence diagram

FrontControllerServlet.java
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 FrontControllerServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse
response)throws ServletException, IOException{
PrintWriter out=response.getWriter();
response.setContentType("text/html");
2

//Take the request and pass the request to appropriate java


class
int result=0;
if(request.getServletPath().equals("/testOne.do")){
TestOne testOne=new TestOne();
result=testOne.businessMethodOne(10,20);
}//if
else if(request.getServletPath().equals("/testTwo.do")){
TestTwo testTwo=new TestTwo();
result=testTwo.businessMethodTwo(30,40);
}
//display the result
out.println("<br><b> The result is : "+result);
}//doGet()
public void doPost(HttpServletRequest request,HttpServletResponse
response)throws ServletException,IOException{
doGet(request,response);
}
}
TestOne.java
public class TestOne{
public int businessMethodOne(int num1,int num2){
return num1+num2;
}
}
TestTwo.java
public class TestTwo{
public int businessMethodTwo(int num3,int num4){
return num3+num4;
}
}
web.xml
<web-app>
<servlet>
<servlet-name>FrontControllerServlet</servlet-name>
<servlet-class>FrontControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FrontControllerServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping></web-app>
Intercepting Filter design Pattern
Definition:
3

Intercepting filter is a java program that is capable of trapping and


taking request and response of other web resource programs of web
application.
The special web resource program of web application that is capable
of trapping the request and response of other web resource
programs is called as intercepting filter design pattern.
Problem: Keeping the common and global pre-request processing logic
and post-response generation logic in every main web resource program
of web application kills the reusability of the code.
Solution: Implement intercepting filter design pattern which is nothing
but servlet filter program. Servlet filter program execute common prerequest processing logic by trapping request similarly execute common
post-response generation logic by trapping the response of other web
resource programs.
Diagram:

Servlet filter program is nothing but implementing intercepting filter


design pattern. Generally we place the following pre-request processing
logics in servlet filter program.
1) Authentication logic
2) Authorization logic
3) logging logic and etc
We place the following post response generation logics.
1) data compression logic
2) transformation logic
Represents pre-request processing logic
Represents the main request processing logic
4

Represents post response generation logic


Note: front controller traps the request to pass them through ordinary
java classes.
Intercepting filter traps the request going to servlet programs, jsp
programs and java classes.
In struts 2 applications FilterDispatcher is a predefined servlet filter
program acting as controller by implementing intercepting filter design
pattern.
Class diagram

Sequence diagram

1) Filter - Filter which will perform certain task prior or after execution
of request by request handler.
2) Filter Chain - Filter Chain carries multiple filters and help to
execute them in defined order on target.
3) Target - Target object is the request handler
4) Filter Manager - Filter Manager manages the filters and Filter
Chain.
5) Client - Client is the object who sends request to the Target object.
Authentication Filter Example
Index.html
<form action="servlet1">
Name:<input type="text" name="name"/><br/>
Password:<input type="password" name="password"/><br/>
<input type="submit" value="login">
</form>
MyFilter.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
public class MyFilter implements Filter{
public void init(FilterConfig arg0) throws ServletException {}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException
{
PrintWriter out=resp.getWriter();
String password=req.getParameter("password");
if(password.equals("admin")){
chain.doFilter(req, resp);//sends request to next resource
}
else{
out.print("username or password error!");
RequestDispatcher
rd=req.getRequestDispatcher("index.html");
rd.include(req,resp);
}
}
public void destroy(){}
}
AdminServlet.java
6

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 AdminServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("welcome ADMIN");
out.close();
}
}
Web.xml
<web-app>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<filter>
<filter-name>f1</filter-name>
<filter-class>MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>f1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Abstract controller
Problem: Hard coding main logics directly in intercepting filter
program[servlet filter], front controller is not recommended process
because it kills the flexibility of modification.
Solution: Develop helper java class for intercepting filter program or front
controller program having main logics to get the flexibility of modification.
This helper class is nothing but abstract controller.

Diagram:

1) Abstract controller class is very useful to customize the logics of


front controller program or intercepting filter program being from
outside of those program.
2) In struts 1.x environment RequestProcessor class is abstract
controller for front controller ActionServlet. Similarly in struts 2.x
environment interceptors are the abstract controllers for
intercepting filter/controller called filter dispatcher.
For interview purpose
1) Developing front controller program or intercepting filter program of
main logics with hard coding is not recommended process because
it kills the flexibility of modification.
2) So develop one helper java class for front controller or intercepting
filter program having main logics to get flexibility of modification.
This helper class is nothing but abstract controller.
3) Abstract controller is useful to customize the logics of front
controller or intercepting filter program being from outside of those
programs.
4) In struts 1.x environment RequestProcessor class is abstract
controller for front controller ActionServlet. Similarly in struts 2.x
environment interceptors are the abstract controllers for
intercepting filter called FilterDispatcher.
Count no of requests coming to a servlet
import javax.servlet.http.HttpServletRequest;
8

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
public class RequestCounter extends HttpServlet
{
private int hitCount;
//Initialize a global variable in init() method.
public void init()
{
hitCount=0;
}
public void service(HttpServletRequest request,HttpServletResponse
response)throws ServletException,IOException
{
//increase counter by one
hitCount++;
PrintWriter out=response.getWriter();
//print the counter
out.println("no of requests are : "+hitCount);
}
}

Das könnte Ihnen auch gefallen