/*下面是javabean他主要是连接数据库,并写了一个加入数据的方法insert(String strTableName, String[] astrFieldname,String[] astrFieldvalue)
Conndb.java
*/
package zzjlib;
import com.codestudio.sql.*;
import java.sql.*;
public class Conndb
{
public java.sql.Statement Stmt; //SQL语句对象
public java.sql.PreparedStatement PStmt;
public java.sql.ResultSet Rs; //结果集对象
public java.sql.Connection Con;
public java.sql.ResultSetMetaData  Rsmd;
public String strCon; //数据库连接字符串
public String strSql; //SQL语句
public String TableName="tbreader";//描述表名
public String[] astrFieldname;//数据表字段名
public String[] astrFieldvalue;//字段值
public Conndb()
{
conn();
}
public void conn() 
{
  try{
  strCon="jdbc:poolman://Testdb";
  Class.forName("com.codestudio.sql.PoolMan").newInstance();
  Con = DriverManager.getConnection(strCon);
  Stmt = Con.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE ,java.sql.ResultSet.CONCUR_READ_ONLY); //执行SQL语句
     }
 catch(Exception e){System.out.println(e.getMessage());}
} public void insert(String strTableName, String[] astrFieldname,String[] astrFieldvalue)


  if ( astrFieldname.length==1)
  {
  strSql="insert into "+strTableName+"(" +astrFieldname[0]+")values("+astrFieldvalue[0]+")";
  }
  else
  {
  strSql="insert into "+strTableName+"(";
  for(int i=0;i<astrFieldname.length; i++)
  {
  if(i!=astrFieldname.length-1)
  {astrFieldname[i]=astrFieldname[i]+",";}   strSql+=astrFieldname[i];
  }
  strSql+=") values(";
  for(int i=0;i<astrFieldvalue.length;i++)
  {
  if(i!=astrFieldvalue.length-1)
  {astrFieldvalue[i]=astrFieldvalue[i]+",";}
  strSql+=astrFieldvalue[i];
  }
  strSql+=")";
  }
  
try{        Stmt.executeUpdate(strSql); }
catch(Exception e){e.printStackTrace();}
}
public String[] alterString(String str[])
{
for (int i=0;i<str.length ;i++ )

  if (str[i]!="now()" && !str[i].equals("now()"))
   {
    str[i]="'"+str[i]+"'";
           } 
           else
           str[i]=str[i];
}
return str;
}/* public String[] getfieldname(String tablename) throws Exception
{
strSql="select * from ";
strSql+=tablename;
Rs=Stmt.executeQuery(strSql);
Rsmd=Rs.getMetaData();
        int columncount=Rsmd.getColumnCount();
String[] columnnames=new String[5];
for(int i=0;i<columncount;i++)
{
columnnames[i]=Rsmd.getColumnName(i);
}
return columnnames;
}
*/
   public void Query(String sql) throws Exception
   {
     // ResultSet rs;
      Rs=Stmt.executeQuery(sql);
     // return rs; 
   }
   public void executeUpdate(String sql) throws Exception
   {
      Stmt.executeUpdate(sql);
     
   } public void closeconn() throws Exception

if (Rs!=null)
        {
Rs.close();
}
if (PStmt!=null)
{
PStmt.close();
}
if (Stmt!=null)
{
Stmt.close();
}
if (Con!=null)
{
Con.close();
}
}   /*测试用main方法,不可用原因尚不清楚。
    public static void main(String args[]) throws Exception
{
Conndb conndb=new Conndb();
conndb.conn();
String tablename="tbborrow";
String[] afieldname;
String[] afieldvalue=new String[3];
afieldname=conndb.getfieldname("tbborrow");
afieldvalue[1]="001";
afieldvalue[2]="zzj";
afieldvalue[3]="now()";


//计算机,"身份证","120224","1","now()","2003-12-20","100","no","010-123456","北京" };
       conndb.insert("tbreader",afieldname,afieldvalue);
System.out.println("成功");

}
*/

}

解决方案 »

  1.   

    /*
    这个是servlet,主要实现得到addminall.jsp中提交过来的数据,并做相应处理:按指定格式自动生成用户id,然后调用javabean:Conndb.class
    连接数据库和加入数据,
    大家多给看看啊,提出有价值或中肯意见者我都会给分,要给300分。
    */
    import zzjlib.Conndb;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.beans.*;
    import java.io.*;
    import java.sql.*;
    import java.util.*;
    import java.lang.*;
    public class addServelt extends HttpServlet {
        public void doPost(HttpServletRequest request, HttpServletResponse  res)
            throws IOException, ServletException {
                       Conndb libcon=new Conndb();
                       res.setContentType("text/html;charset=gb2312");  
                       PrintWriter out = res.getWriter ();
                       Calendar rightNow = Calendar.getInstance();
                       int year=rightNow.get(Calendar.YEAR);
                       int month=rightNow.get(Calendar.MONTH)+1;
                       int day=rightNow.get(Calendar.DAY_OF_MONTH);
                       String stryear=(""+year).substring(2,4);
                       String strmonth=null;
                       
                       if(month<10)
                       {
                        strmonth="0"+month;
                       }
                       else 
                       {
                        strmonth=""+month;
                       }
                    String tablename="tbreader";
                    String check=request.getParameter("nowornot");
                    String fieldname[]={"readerid","readername","sex","department","cardtype",  "cardid","purview",  "starttime","endtime","addtime","zhiya","telephone","address"};
                    String fieldvalue[]=new String[13];
                    String strlength=request.getParameter("rlength");
                    int intlength=Integer.parseInt(strlength);
                    try
                    {
                    libcon.Query("select readerid from tbreader order by addtime desc");
                    libcon.Rs.first();
                    String stridtail=libcon.Rs.getString(1).substring(5);
                    int intidtail=Integer.parseInt(stridtail);
                    intidtail=intidtail+1;
                    fieldvalue[1]=request.getParameter("readername");
                    fieldvalue[0]=request.getParameter("purview")+request.getParameter("startyear").substring(2,4)+request.getParameter("startmonth")+intidtail;
                    fieldvalue[7]=request.getParameter("startyear")+"-"+request.getParameter("startmonth")+"-"+request.getParameter("startday");
                    fieldvalue[2]=request.getParameter("sex");
                    fieldvalue[3]=request.getParameter("department");
                    fieldvalue[4]=request.getParameter("cardtype");
                    fieldvalue[5]=request.getParameter("cardid");
                    fieldvalue[6]=request.getParameter("purview");
                    if(check!=null)
                     {
                        fieldvalue[0]=request.getParameter("purview")+stryear+strmonth+intidtail;
                        fieldvalue[7]="now()";
                     }
                    fieldvalue[8]=request.getParameter("endyear")+"-"+request.getParameter("endmonth")+"-"+request.getParameter("endday");
                  
                     if(intlength!=0)
                     {
                      fieldvalue[8]=(year+intlength)+"-"+month+"-"+day;
                     }
                   
                    fieldvalue[9]="now()";
                    fieldvalue[10]="300";
                    fieldvalue[11]=request.getParameter("telephone");
                    fieldvalue[12]=request.getParameter("address");
                    fieldvalue=libcon.alterString(fieldvalue);
                    libcon.insert(tablename,fieldname,fieldvalue);
                    libcon.closeconn();
                    }
                    catch(Exception e){out.println("database error!");}
                    out.println("成功添加记录");
                    out.println("\r\n<script>\r\n<!--\r\nwindow.location.href=\"../admin/adminall.jsp\";\r\n-->\r\n</script>\r\n</BODY>\r\n</HTML>\r\n");
             
      }
    }
      

  2.   

    什么你是说mvc中的contralor么?我也不知道,上面第三段这个servlet算么?
      

  3.   

    你这只有M和V啊,MVC中的C是根据View层来选择执行Model,action应该是一个control的servlet,它通过你的jsp来找到你要执行的addServelt,我是这么理解di
      

  4.   

    我有点理解了,不是servlet都是controlor,只有那些用来实现流程跳转,根据view层提交的不同命令来选择不同的处理方式的servlet才算是servlet,而我的代码中的servlet其实只是实现某一个单一功能,并未对view层提交的命令做判断,没有跳转的东西,
    并且我现在觉得好象module也并不都是bean,也有可能是servlet。
    不知我理解的正确否,
    欢迎teddy_huang(生活多美好,睡觉) 兄继续指教,也请大家多批评指教,什么方面都可以,甚至我代码之中的不完善之处,逻辑的不完美之处。
      

  5.   

    只有那些用来实现流程跳转,根据view层提交的不同命令来选择不同的处理方式的servlet才算是servlet
    -------------------------
    这不对啊你这再加一个control的servlet就完美了,呵呵,建议你研究研究struts,就明白得多了
      

  6.   

    "只有那些用来实现流程跳转,根据view层提交的不同命令来选择不同的处理方式的servlet才算是servlet"
    不好意思,这段我打错了,应该把最后的servlet改成controllor。这样理解对么?
      

  7.   

    呵呵!学习,不过对于servlet我总是弄不明白!!:(
      

  8.   

    我认为这里没有体现出控制来。
    你可以找一本是看看jsp与servlet的交互,里面的可以说是比较简单而经典的控制。
    像orreilly的《jsp设计》。
      

  9.   

    不是啊,如果没有天家成功,那么就不显示什么东西,还是原来的输入画面,如果数据库连接上出错了就会在tomcat的界面上显示一个wrong字,(这好象不大好。)
      

  10.   

    不是MVC,MVC模式不是两三个类就能实现的。
    jsp中嵌入了java代码,不符合View的要求
    servlet中的代码完全写死,难道每个处理都要各写一个servlet?或者在你那个
    servlet中写很多if类的语句?不是Controller!
    你的Module呢?Module应是存储用户提交的数据的数据结构,每个form写一个Module类,
    或者写一个动态Module类
      

  11.   

    struts-config.xml配置文件难道也没有用到?
      

  12.   

    决对不是。在jsp里不能有java代码的。
      

  13.   

    能说说哪些应属于M,哪些应属于V,哪些应属于C吗?
      

  14.   

    你还应该用到Taglib,把jsp中的java写入lib中实现真正意义上的MV,加上ActionMapping才能算得上MVC
      

  15.   

    可是我的jsp中的java代码只是用来生成当前年份和月份的。那也不可以有么?
    大家说的好,能再详细点么,我的代码就是拿来批判的,挑错的。多谢大家。集思广益啊!
      

  16.   

    我觉得前面各位大虾说的都是struts里面的东东了,什么struts-config.xml,taglib,普通的mvc里面没这些东东,不用struts也可以用mvc设计
      

  17.   

    同意楼上的说法,不过,好象是缺少了Controller部分,你的那个servlet不能作为一个controller使用啊,controller应该能控制流程跳转的。
      

  18.   

    做的很不好,就算是MVC也不是一個値得推敲的結構代碼!
      

  19.   

    脸都红了,刚才去参加了一个面试,真是丢脸啊,那里的人全部是清华的,老师,研究生,或本科生,从他们的通讯表上看,还全部住在清华里,
    考官问了我大概20个问题,几乎都不会,全部是j2ee里的知识,比如:你说说stateful session bean 和 stateless session bean 的不同。 
    我说,stateful session bean 是用来和每一个客户端建立一个联系。比如做购物车你就要用stateful session bean,而stateless session bean 则没有与每个客户端建立联系。我都不懂啊。书到用时方恨少啊。
     哎,代码大家继续批和评。我要好好学习一下了!
      
       
      

  20.   

    controller的目的是调用处理理请求的类来处理,以及控制页面导向。
    根据这个思想,sun的petstore例子中,web的controller层有如下几个类:MainServlet:直接面对jsp,初始化一些参数
    FlowHandler:由MainServlet调起,控制页面导向
    RequestProcessor:由MainServlet调起,处理请求,包括以下步骤:
      ServiceLocator以及ServiceLocatorImpl:该类定位不同的services(不同的WebClientController)。简单说,也就是后台(ejb)和web层的接口处
      WebClientController以及WebClientControllerImpl:是ejb层的代理。
      HTMLAction:根据请求,生成不同的event,传递给后台(即由ServiceLocator定位的WebClientController)总的说来,controller层,根据一大堆配置文件,针对各种请求,去做mapping,然后用这些mapping到的类来处理。
      

  21.   

    所以,我觉得你做的结构算是一个简单的MVC,只不过层数不够多罢了 :p
      

  22.   

    呵呵,好,我有点高兴,Mars_lee兄刚刚在j2ee版论坛刚刚答过某公司的面试题目,并且句大家反映得到了广泛认同对你的答案,我看到了,我觉得你的水平肯定不会差。得到了你的一点点肯定,我有点高兴。说实话,我真的不理解mvc,只是听说要分离html与java代码而已,所以对我上面的代码的评价不敢奢望。谢谢啊。
       工作寻找中,批评进行中,大家继续。
      

  23.   

    不是MVC,MVC模式不是两三个类就能实现的。
    jsp中嵌入了java代码,不符合View的要求
    servlet中的代码完全写死,难道每个处理都要各写一个servlet?或者在你那个
    servlet中写很多if类的语句?不是Controller!
    你的Module呢?Module应是存储用户提交的数据的数据结构,每个form写一个Module类,
    或者写一个动态Module类
      

  24.   

    MVC模式里为什么不能在JSP中使用Java代码?我们的项目现在前台显示就是用的这种方式,效果非常不错啊,只不过我们使用ECS组件把显示控件封装了,现在前台显示页面的制作效率非常高,我感觉Taglib没什么大用,至少我们公司的只能算个美工的网页设计人员制不动。
    struts那东西太复杂了,作大项目也许有用,但是用在轻量级的项目上不就是在用高射炮打蚊子???
      

  25.   

    大家说的好,我们的水平的确参差不齐,高手有很多,高手多的公司也有,但好象不多我估计,看来要提高啊。学习啊,今天买来一本书,本来想买《jsp高级编程》着(WROX 出版)但是我一共还有七十块钱了,只好买了一本科学出版社出的《jsp高级开发和应用》(42.00,page388 还是贵)也是一美国人写的叫做Davie M.Geary 不知怎么样,但里面讲了很多taglib,还有xml,还说了点mvc,我要先看看。如果好,再向大家推荐。
       大家继续批评啊。对待这样的代码不要留情,批,别给我留面子。三百分还要多一些人才好。
      

  26.   

    controller+filter+command+viewhelper+beans+jspview+ado(jdo)+valueObject+database
      

  27.   

    controller+filter+command+viewhelper+beans+jspview+ado(jdo)+valueObject+database
    这是什么意思?老兄?
      

  28.   

    学习中......我学了一段时间的asp.net+c#,它采用一个后嵌文件的方式处理页面请求(a.aspx,a.aspx.cs),这样做有一定的好处,但我觉得代码和页面分离得并不彻底.起码网页制作人员要能操作服务器端控件(特别体现在做查询时).mvc能不能实现美工页面拿来,基本不用修改啊?