一个自动生成表格的servlet

 
package lin.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import java.lang.reflect.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class TableServlet extends HttpServlet {
 public static final Class[] NO_PARAMS = new Class[0];


 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request,response);
 }

 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException
 {
  String tableOptions = request.getParameter("tableOptions");
  if(tableOptions == null)
  {
   tableOptions = "";
  }
  String trOptions = request.getParameter("trOptions");
  if(trOptions == null)
  {
   trOptions = "";
  }
  String tdOptions = request.getParameter("tdOptions");
  if(tdOptions == null)
  {
   tdOptions = "";
  }
  String thOptions = request.getParameter("thOptions");
  if(thOptions == null)
  {
   thOptions = "";
   
  }
  String data = request.getParameter("data");
  if(data == null)
  {
   getServletContext().log("No data available");
   throw new ServletException("No data parameter available");
  }
  Object dataOb = request.getAttribute(data);
  if(dataOb == null)
  {
   getServletContext().log("No data object found");
   throw new ServletException("Can' t locate the data object named"+data);
  }
  String[] columns = request.getParameterValues("column");
  String[] columnType = request.getParameterValues("columnType");
  String[] columnHeaders = request.getParameterValues("columnHeader");
  
  Hashtable columnAccessors = getAccessors(dataOb,columns);
  PrintWriter out = response.getWriter();
  out.println("<table  "+tableOptions+">");
  //out.println("<table border='1'>");
  if(columnHeaders != null)
  {
   out.println("<tr  "+trOptions+">");
   //out.println("<tr>");
   for(int i=0; i<columnHeaders.length;i++)
   {
    out.print("<th  "+thOptions+">");
    //out.println("<th>");
    out.println(columnHeaders[i]);
    out.println("</th>");
   }
   out.println("</tr>");
  }
  if(dataOb instanceof Vector)
  {
   Vector v=(Vector)dataOb;
   Enumeration e = v.elements();
   while (e.hasMoreElements())
   {
    out.println("<tr  "+trOptions+">");
    //out.println("<tr>");
    printRow(out,e.nextElement(),columns,columnType,
      columnAccessors,tdOptions);
    out.println("</tr>");
    
   }
  }
  else if(dataOb instanceof Object[])
  {
   Object[] obs = (Object[])dataOb;
   for(int i=0;i<obs.length;i++)
   {
    out.println("<tr  "+trOptions+">");
    out.println("<tr>");
    printRow(out,obs[i],columns,columnType,columnAccessors,tdOptions);
    out.println("</tr>");
   }
   
  }
  out.println("</table>");
  
  
  
 }
 protected void printRow(PrintWriter out,Object ob,String[] columns,
   String[] columnTypes,Hashtable columnAccessors,String tdOptions)
         throws ServletException
   {
         for(int i=0;i<columns.length;i++)
         {
          Object value = getColumnValue(ob,columns[i],columnAccessors);
          out.print("<td  "+tdOptions+">");
          if(columnTypes[i].equalsIgnoreCase("data"))
          {
           out.print(value);
          }
          else if(columnTypes[i].equalsIgnoreCase("image"))
          {
           out.print("img src/"  "+value+"/">");
          }
          out.print("</td>");
         }
   }
 protected Object getColumnValue(Object ob,String columnName,Hashtable columnAccessors)
 throws ServletException
 {
  Object accessor = columnAccessors.get(columnName);
  if(accessor instanceof Field)
  {
   try {
    Field f = (Field)accessor;
    return f.get(ob);
   } catch (IllegalAccessException e) {
                  getServletContext().log(
                  "Error getting column"+columnName,e  
                  );
                  throw new ServletException(
                  "Illegal access exception for column"+columnName);  
                 
     
   }
   
  }
  else if(accessor instanceof Method)
  {
   try {
    Method m=(Method)accessor;
    return m.invoke(ob,NO_PARAMS);
    
   } catch (IllegalAccessException e) {
               getServletContext().log(
                "Error getting column"+columnName,e
               );
      throw new ServletException(
      "Illegal access exception for column"+columnName  
      );
     
   }
   catch(InvocationTargetException ee)
   {
    getServletContext().log(
    "Error getting column"+columnName,ee  
    
    );
    throw new ServletException(
      "Invocation target exception"+"for column"+columnName  
    );
    
    
   }
  }
  return null;
 }
 
 protected Hashtable getAccessors(Object ob,String[] columns)
 throws ServletException
 {
  Hashtable result = new Hashtable();
  Class obClass = null;
  if(ob instanceof Object[])
  {
   Object[] obs=(Object[])ob;
   if(obs.length==0)
    return result;
   obClass = obs[0].getClass();
  }
  else if(ob instanceof Vector)
  {
   Vector v =(Vector)ob;
   if(v.size()==0)
    return result;
   obClass = v.elementAt(0).getClass();
  }
  for(int i=0;i<columns.length;i++)
  {
   try {
    Field f=obClass.getField(columns[i]);
    result.put(columns[i],f);
    continue;
   } catch (Exception e) {
    // TODO: handle exception
   }
   try {
    Method m=obClass.getMethod(columns[i],NO_PARAMS);
    result.put(columns[i],m);
    
   } catch (Exception ex) {
                 getServletContext().log("Exception location field"+
                 columns[i],ex);
                 throw new ServletException(
                 "Can' t location field/method for"+columns[i]  
                 );
   }
  }
  return result;
  
 }

  
}
 


test.jsp


<%@ page language="java" contentType="text/html; charset=gbk"%>


<html>
  <head>
   
    <title>My JSP 'tableTest.jsp' starting page</title>
   
  
  </head>
 
  <body>
    <%!
    public class Person
    {
       public String name;
       public int age;
       protected String phoneNumber;
       public Person(String aName,int anAge,String aPhone)
       {
          name=aName;
          age=anAge;
          phoneNumber = aPhone;
      
       }
       public String getPhoneNumber()
       {
          return phoneNumber;
      
       }
   
    }
 %>
 
 <%
 Person[] people=new Person[]{
 new Person("XXXXX",7,"04137130367"),
  new Person("YYYYYYY",7,"13588880514"),
   new Person("CCCCCCCCC",29,"13888429840"),
    new Person("AAAAAAAA",30,"13868137859")
   };
   request.setAttribute("people",people);
 %>
 <jsp:include page="/TableServlet" flush="true">
 <jsp:param name="data" value="people"/>
 <jsp:param name="tableOptions" value="border=4"/>
 <jsp:param name="column" value="name"/>
 <jsp:param name="columnType" value="data"/>
 <jsp:param name="columnHeader" value="Name"/>
 
 
 <jsp:param name="column" value="age"/>
 <jsp:param name="columnType" value="data"/>
 <jsp:param name="columnHeader" value="Age"/>
 
 
 <jsp:param name="column" value="getPhoneNumber"/>
 <jsp:param name="columnType" value="data"/>
 <jsp:param name="columnHeader" value="Phone#"/>
 

 
 </jsp:include>
  </body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值