大家說一下我的思路吧!
首先要想做mvc模式m與v都是靠自己寫了
不過沒有c太累了
那麼contraller的簡單的作用就從客戶端來一個請求找到對應的javabean來處理
首先要做一個servlet能接收所有的請求這個很容易了
不過要怎麼樣調一個javabean的方法
那麼只能由我們來定義一個介面
讓使用者來實現我們的介面我們就可以用到java的多態來調用其方法了
這也就是介面回調了
那下面就看一下代碼的寫法了
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
*anthor@ ljp;
*這也就是我們定義的一個介面了
*讓我們的使用者來實現定義的這個介面
*反回值的意思就是應答的url
*/
public interface Action{
public String execute(HttpServletRequest req, HttpServletResponse res);
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 這是我們做一個servlet用來接收所有請求的servlet
*/
public class ActionServlet extends HttpServlet{
@Override
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
//這是來獲得客戶端發來請求url-partten
String path=req.getServletPath();
//2javabean
try{
//這是通過ActionMap.getBean(path);去找對應的javabean來處理這個請求
Action action=ActionMap.getBean(path);
String url=action.execute(req, res);
req.getRequestDispatcher(url).forward(req,res);
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/*
* 這是用來找對應的javabean的一個工具
*/
public class ActionMap{
private static Properties env=new Properties();
static{
try{
//讀取配製文件
InputStream is=ActionMap.class.getResourceAsStream("/env.properties");
env.load(is);
is.close();
}catch(IOException e){
throw new ExceptionInInitializerError(e);
}
}
public static Action getBean(String path) throws Exception{
try{
String bean=(String)env.get(path);
//利用反射來創建Action對象
return (Action)Class.forName(bean).newInstance();
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
}
這就是一個簡單控制器的模型.
如有不懂的可以提問.