如何将此JSP转换为MVC方法?

时间:2012-11-14 06:36:22

标签: java model-view-controller jsp

我写了下面的JSP。现在我想把它变成一个MVC模式,请你帮忙我怎么做?

<%@page import="java.util.Date"%>  
<%@include file="DBCon.jsp" %>  
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
    pageEncoding="ISO-8859-1"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
<title>Insert title here</title>  
<script language="javascript">  
    function UnBloc1(test){  
        var temp3id= 'temp3' + test;  
        var temp4id= 'temp4' + test;  
      //alert(temp3id);  

      document.getElementById(temp3id).style.display='block';  
      document.getElementById(temp4id).style.display='block';  
    }  

    function invoke(but1)  
    {  
        //var x=document.getElementById("temp3"+but).value;  
        //alert(x);  
         document.abc.action="Up_Query_DB.jsp?val1="+but1;  
         document.abc.submit();  
    }  
    function invoke1(but)  
            {      
         document.abc.action="Users_2.jsp?val="+but;  
         document.abc.submit();  

         //var t=document.getElementById("ab")+z;  
         //alert(t);  
            }  
</script>  
</head>  
<body>  
<form name="abc" method="post" action=""><table>  
<%  
try  
               {  
    String s=(String)session.getAttribute("muusername");  
    int i=0;  
    int temp=0, temp1=0,temp2=0, temp3=0, temp4=0;  
    ps=con.prepareStatement("Select DBID,Query_Raised,TR from Scope2 where TR!='null' AND (Query_Answered is null OR Count1 is null) And Specialist='"+s+"'");  
    rs=ps.executeQuery();  
    out.println("<b>QueryRaised</b>");  
       while(rs.next())  

        {  

           i++;  
           %>  

                      <tr>  
                      <td><input type="text" value="<%=i%>" name="id1" id="id1"></td>  
                      <td><center><input type="text" value="<%=rs.getString("DBID")%>" readonly id="abc<%=i%>" name="abc<%=i%>" size="100"></center></td>  
                      <td><input type="Submit" value="Resume" name="temp1<%=i%>" id="temp1<%=i%>" onclick="invoke1(<%=i%>)"></td>  
                      <td><input type="button" value="Update Answer"  name="temp2<%=i%>" id="temp2<%=i%>" onClick="UnBloc1(<%=i%>)"></td>  
                      <td><input type="text" name="temp3<%=i%>" id="temp3<%=i%>" style="display: none"/></td>   
                      <td><input type="Submit" value="Submit Answer" name="temp4<%=i%>" id="temp4<%=i%>" style="display: none" onClick="invoke(<%=i%>)"/>                      </td>  
                      </tr>  



    <% }  

}  
catch(Exception e)  
           {  

out.println(e);  

}  
%>    
  </table>    
 </form>   


</body>  
</html>

2 个答案:

答案 0 :(得分:3)

让我们说你去数据库并获得一个包含少量属性的对象列表(使用setter和getter方法),其中包括dbid属性。对象将是您的模型。我们称之为myBean

来自您的Java类将执行查询将是Controller类。我们称之为myController。因此,控制器应该:1。获取所需的对象列表。 2.在表示信息之前做任何应该做的事情(在你的情况下,我什么也不说)和3.通过bean的列表将信息传递给JSP,在请求中设置信息,以便显示信息。

现在,您的JSP应如下所示:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
    pageEncoding="ISO-8859-1"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
    <title>Insert title here</title>

    <script language="javascript">

       ...

    </script>  
</head>  

<body>

<form name="abc" method="post" action="">

    <table>

        <c:forEach var="myItem" items="${listDbid}" varStatus="i">

            <tr>  
                <td><input type="text" value="${i.count}" name="id1" id="id1"></td>  
                <td><center><input type="text" value="${myItem.getDbid}" readonly id="abc${i.count}" name="abc${i.count}" size="100"></center></td>  
                <td><input type="Submit" value="Resume" name="temp1${i.count}" id="temp1${i.count}" onclick="invoke1(${i.count})"></td>  
                <td><input type="button" value="Update Answer"  name="temp2${i.count}" id="temp2${i.count}" onClick="UnBloc1(${i.count})"></td>  
                <td><input type="text" name="temp3${i.count}" id="temp3${i.count}" style="display: none"/></td>   
                <td><input type="Submit" value="Submit Answer" name="temp4${i.count}" id="temp4${i.count}" style="display: none" onClick="invoke(${i.count})"/>                      </td>  
            </tr>    

        </c:forEach>        

  </table>    
 </form>      

</body>  
</html>

所以,基本上,你需要从你的JSP中删除所有不是&#34; view&#34;的代码,把它带到&#34;控制器&#34;并使用&#34;模型&#34;用于从&#34;控制器发送信息&#34;到&#34;查看&#34;。

另外

  • 您应该避免使用JSP中的脚本(&lt; %%&gt;),最好使用JSTL和其他类似的工具。如果你这样做,可能你的JSP将没有&#34; controller&#34;代码。
  • 我建议你使用MVC框架,比如Spring MVC或Struts等。
  • 如果您在代码中为数据库访问创建另一个图层,那也很好。控制器将使用此数据库层,以便控制器使用。您可以重用代码,使控制器独立于数据库并使其更清晰。

答案 1 :(得分:1)

我也是新MVC,但我可以给你一些建议。做一个豆子。 Bean是具有getter和setter的Java类。在你的情况下,bean将是

 public class Scope2
 {
   String dbID;
  //all other attributes of the table.Beans should be reusable so usually there is only one bean for one corresponding table

   public String getDBID()
  {
    return dbID;
   }
   public void setDBID(String dbId)
   {
     this.dbId=dbId;
   }

  //Other getters and setters for all other attributes
}

现在创建一个可以执行数据库查询的类。并将bean的Scope2从该类返回到jsp。在你的jsp中,你只需将值打印为out.println(bean.getDBID());