0

我写了下面的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>
4

2 回答 2

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 中使用脚本 (<% %>),最好使用 JSTL 和其他类似工具。如果您这样做,您的 JSP 可能没有“控制器”代码。
  • 我建议您使用 MVC 框架,例如 Spring MVC 或 Struts 等。
  • 如果您在代码中创建另一层仅用于数据库访问,那也很好。该数据库层将由控制器使用,因此控制器。您可以重用代码,使控制器独立于数据库并使它们更清晰。
于 2012-11-14T07:16:14.880 回答
1

我也是 MVC 新手,但我可以给你一些建议。做一个豆子。Bean 是带有 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
}

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

于 2012-11-14T07:03:08.097 回答