/*** * decompile from org.apache.jasper.runtime.HttpJspBase */ package com.dangdang.web;
import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.jsp.HttpJspPage; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public abstract class Page extends HttpServlet implements HttpJspPage { protected Page(){}
//override the HttpServlet class @Override public final void init(ServletConfig config) throws ServletException { super.init(config); this.jspInit(); this._jspInit(); }
@Override public final void destroy() { this.jspDestroy(); this._jspDestroy(); }
@Override public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.getAction(request,response).execute(); this._jspService(request, response); } public abstract Action getAction(HttpServletRequest request, HttpServletResponse response); //do nothing only implements the HttpJspPage interface public void jspInit(){} public void jspDestroy(){} //web controller override the following three methods public void _jspInit(){} protected void _jspDestroy(){} public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{} }
package com.dangdang.web;
import com.dangdang.util.Log; import java.lang.reflect.Field; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public abstract class Action { protected HttpServletRequest request; protected HttpServletResponse response; public Action(HttpServletRequest request, HttpServletResponse response) { this.request=request; this.response=response; } protected abstract void processRequest(); final void execute() { this.processRequest(); try { Field[] fs = this.getClass().getDeclaredFields(); for(Field f : fs) if(f.getModifiers() == 1) { f.setAccessible(true); request.setAttribute(f.getName(), f.get(this)); } } catch(Exception e) { Log.Write(e.getMessage()); } } }
package controller;
import com.dangdang.web.Action; import com.dangdang.web.Page; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class Index extends Page { @Override public Action getAction(HttpServletRequest request, HttpServletResponse response) { return new Action(request,response) { public String message; @Override protected void processRequest() { this.message = request.getParameter("message"); } }; } } |