通常我们使用sevlet利用servlet派生的时候会有大量的switch…case…这无疑增加了代码的冗余性,利用反射改写极大的简化了代码
定义一个父类的servlet,DispatcherServlet
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 935992874761738564L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取method参数
String methodName = request.getParameter("method");
// 判断method是否为空,如果没有method参数,或者method参数是空内容,我们调用默认指定的方法execute。
if (methodName == null || methodName.trim().equals("")) {
methodName = "execute";
}
// 创建本类的class对象
Class<?> clazz = this.getClass();
try {
// 通过class对象获取对应的方法
Method method = clazz.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
// 执行对应的方法
method.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
其他的类只需要继承这个类并写自己的实现
@WebServlet("/")
public class IndexServlet extends DispatcherServlet {
private static final long serialVersionUID = 1L;
public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/post?method=list").forward(request, response);
}
}
使用BeanUtils封装实体类
pom依赖
<!-- beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
1. form表单提交时,利用request.getParameterMap()去获取表单值的集合。
2.User user = new User();
3. BeanUtils.populate(user, request.getParameterMap())就可以实现将我们表单提交额数据直接封装到实体类中了。