package com.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.Map;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.bean.Student;
import com.model.ModelDriven;public class RegisterServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String uri=request.getRequestURI();
String path=uri.substring(0, uri.length()-3);

Map map=request.getParameterMap();

int begin=path.lastIndexOf("/");
String className=path.substring(begin+1);

char[] chars=className.toCharArray();

if(Character.isLowerCase(chars[0])){
chars[0]=Character.toUpperCase(chars[0]);
}

className=new String(chars)+"Action";


Class c=null;
ModelDriven md=null;
Object object=null;
String result=null;
try {
c=Class.forName("com.action."+className);
md=(ModelDriven)c.newInstance();
object=md.getModel();

Method[] methods=object.getClass().getMethods();
for(Method method:methods){
String mname=method.getName().substring(3).toLowerCase();
if(map.containsKey(mname)&&method.getName().substring(0, 3).equals("set")){
String[] value=(String[])map.get(mname);
method.invoke(object, value[0]);
}
}
Method executeMethod=c.getMethod("execute");
result=(String)executeMethod.invoke(md);
} catch (Exception e) {
e.printStackTrace();
}
PrintWriter out=response.getWriter();
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(result);
dispatcher.forward(request, response);
System.out.println(result);
}
}以上是一个servlet,要在web.xml中把所有的do请求都映射到它身上,这样他就可以对请求进行处理,然后把页面中的参数set到相应的javabean中,并且调用com.action包中相应的action,如果请求时xxx.do,那么就会调用com.action.XxxAction。这里是采用约定的方式,这个action必须实现下面得接口,以上都是通过反射来实现。package com.model;public interface ModelDriven<T> {

public T getModel();}下面是实现接口的actionpackage com.action;import com.bean.Student;
import com.model.ModelDriven;public class HelloAction implements ModelDriven<Student> {

Student student=new Student();

public Student getModel() {
return student;
}

public String execute(){
System.out.println(student.getName());
return "/index.jsp";
}}当程序运行到action后,页面中相应的参数,也被set到student中了,执行完,就return一个页面字符串,刚才那个servlet会接受这个字符串,然后转发到相应的页面。我认为:现在的一些mvc框架,应该就是这样来处理用户请求的,包括:把页面表单中的参数放到相应的javabean中,然后调用相应的action。不知道这样理解对不对?