servlet和jsp页面之间的耦合

时间:2013-06-13 19:01:41

标签: jsp servlets decoupling

考虑Servlet和简单的JSP页面。

我想尽可能减少我的演示文稿和我的应用程序之间的耦合,我希望尽可能减少JSP页面中的Java代码。

我的JSP页面中有一个用Java填充的简单HTML列表。

  <%
  String[] myList = (String[])request.getAttribute("myList");
  %>

  <form name="selection" action="foo.jsp">
       <select name="myList">
           <option value=""> </option>
           <% for (int i = 0; i < myList.length; i++){%>
               <option value="<%=i%>"><%=myList[i]%></option>
           <%}%>
       </select>
       <input type="submit" />
   </form>

使用哪种最佳方式/模式,尽可能减少演示文稿中的Java代码(循环)?通过直接在servlet中生成html,问题不会更好。

编辑: 我正在寻找doGet()servlet方法的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用JSTL清理JSP页面中的逻辑。你可以使用像MVC这样的模式来改善你的后端设计。

事实上,对于当前代码,您只需要JSTL就足够了,但随着复杂性的增加,您可能希望探索Spring,Struts或EJB等框架,以实现更强大,更清晰的关注点分离和长期可维护性。

在你的情况下,例如JSTL等价物将是:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

  <form name="selection" action="foo.jsp">
       <select name="myList">
           <option value=""> </option>
       <c:forEach var="item" items="${myList}"  varStatus="status">
          <option value='<c:out value="${status.index}"/>'><c:out value="${item}" /></option>
           </c:forEach>           
       </select>
       <input type="submit" />
   </form>

Some Notes:

在某种程度上,您已经在遵循MVC模式的一部分,因为您没有在视图(JSP)中添加任何业务逻辑,而只是使用模型(myItems)来绘制视图。如何构建模型以及执行的业务逻辑与视图分开。

为了减少java代码,视图的功能是简单地利用模型将演示文稿呈现给用户。它不是代码,而是利用视图框架/库来呈现模型。这是由许多人通过在JSP中使用JSTL,使用其他模板框架(如Velocity等)甚至完全前端javascript模板(如下划线等)来完成的。

Some Links:

JSTL教程:http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

JSTL @ Java.net:https://jstl.java.net/

MVC模式:http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

Spring Framework:http://www.springsource.org/spring-framework