2012-11-14 77 views
0

我寫了下面的JSP。現在我想把它變成一個MVC模式,你能幫我怎麼做嗎?如何將此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

一個很好的[教程](http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html)來自BalusC的數據層 – user75ponic

回答

1

我也是新的MVC,但我可以建議你一些提示。製作一個豆子。豆是帶有getter和setter的Java類。在你的情況下,豆將是

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 
} 

現在讓一個類,將執行數據庫查詢。並將該類的Scope2從該類返回給jsp。在你的jsp中,你只需要將值打印爲out.println(bean.getDBID());

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刪除所有不是「視圖」的代碼,把它帶到一個「控制器」和使用「模型」將信息從「控制器」發送到「視圖」。

而且

  • 你應該避免在你的JSP scriptles(<%%>),最好使用JSTL和其他類似的工具。如果你這樣做,可能你的JSP不會有「控制器」代碼。
  • 我建議你使用MVC框架,如Spring MVC或Struts等。
  • 如果您在代碼中爲數據庫訪問創建另一層,這也很好。這個數據庫層將被控制器和控制器使用。您可以重新使用代碼,使控制器獨立於數據庫並使其更清晰。
+0

Neat,+1。 Rakesh在說Spring MVC或Struts時,他說Spring MVC或Struts2。 –