Servlet处理form的一些封装应用
???? 我们在平时写程序时都会利用各种各样的框架,从而提升工作效率和代码质量,其实框架归根到底是由底层的代码搭建起来,打好基础是非常重要;下面主要想谈谈Servlet如何把从提交form表单时传来的参数封装在一个class里,并且对其进行解析调用,其中涉及的知识点主要是Servlet和Java反射机制。
?
Servlet基本知识:
public abstract class TestAction extends HttpServlet {protected HttpServletRequest request; //请求对象protected HttpServletResponse response;//响应对象private ActionForm actionForm;/** * 初始化 * @param request * @param response * @throws ServletException * @throws IOException */private void init(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { init(formClass);//实例化继承ActionForm父类的子类class initField();// 初始化ActionForm 变量}@Overrideprotected void service(HttpServletRequest request,HttpServletResponse response) {//处理请求/**如果想获取form表单提交时的变量信息,可根据ActionForm表单class对应变量的get和set方法获取**/}private void initField() {Field[] fields = actionForm.getClass().getDeclaredFields();//返回的是classr的声明变量的集合for (Field field : fields) {//遍历String fieldName = field.getName();//获取变量名 String[] values = request.getParameterValues(fieldName);//基于servlet 的 request请求方法Class<?> type = field.getType();//变量的类型String firstLetter = fieldName.substring(0, 1).toUpperCase();String setMethodName = "set" + firstLetter + fieldName.substring(1);//拼成变量生成的get和set的方法Method setMethod;try {setMethod = actionForm.getClass().getMethod(setMethodName,new Class[] { type });setMethod.invoke(actionForm, values);//把页面传来的变量set到class对应的变量上} catch (Exception e) {}}}/** * 销毁 */@Overridepublic void destroy() {super.destroy();}}
??
?
By cq