Beruflich Dokumente
Kultur Dokumente
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
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:
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);
}
}