【发布时间】:2014-05-15 04:37:52
【问题描述】:
我想知道网络在我的 JSP 项目中使用 MVC 并找到了一个很好的讨论 here,现在我有以下内容:
public class Subject {
private String subjectId = null;
private String subjectName = null;
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
public String getSubjectName() {
return subjectName;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
}
我的SubjectDAO 班级是:
public class SubjectDAO {
public List<Subject> subjectList() throws SQLException{
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
List<Subject> subjects = new ArrayList<>();
try {
connection = DatabaseManager.initConnection();
statement = connection.prepareStatement(Constant.SUBJECT_QUERY);
resultSet = statement.executeQuery();
while (resultSet.next()) {
Subject subject = new Subject();
subject.setSubjectId(resultSet.getString("_id"));
subject.setSubjectName(resultSet.getString("subj_name"));
subjects.add(subject);
}
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
return subjects;
}
}
在我的ControllerServlet 我有:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
List<Subject> subjects = subjectDAO.subjectList();
request.setAttribute("subjects", subjects);
getServletContext().getRequestDispatcher("/content.jsp").forward(
request, response);
} catch (Exception e) {
throw new ServletException("Cannot obtain subjects from DB", e.getCause());
}
}
我的 JSP 作为视图是:
<c:forEach items="${subjects}" var="subject">
<li
<c:catch>
<c:choose>
<c:when test="${subject.subjectId == param.subj_id}">
<c:out value="class=\"selected\""/>
</c:when>
</c:choose>
</c:catch>
><a href='/programming-iqs/admin-controller?action=manage-content&subj_id=
<c:out value="${subject.subjectId}"/>'>
<c:out value="${subject.subjectId}"/>
</a>
</li>
</c:forEach>
使用上面的代码我得到:
javax.servlet.ServletException: Cannot obtain subjects from DB
我无法解决此问题,非常感谢任何帮助。
注意
在使用/实现 MVC 之前,我的 JSP 代码是:
<%
ResultSet sujectResult = DatabaseManager.getSubjects();
while (sujectResult.next()) { %>
<li <%
String selectedSubject = request.getParameter("subj_id");
try {
if (selectedSubject.equals(sujectResult.getString("_id"))) {%>
class="selected" <%}%>><a
href='/programming-iqs/admin-controller?action=manage-content&subj_id=
<%= sujectResult.getString("_id")%>'>
<%= sujectResult.getString("subj_name")%>
</a> <%
} catch (NullPointerException e) {
}
} %></li>
当然,该代码运行良好,现在请帮助我实现 MVC。 谢谢
【问题讨论】:
-
您使用的是哪个框架?或者您想使用 servlet/Jsps 实现 MVC 指南?
-
您能否详细说明您的错误。尝试在
doGet()方法的catch块中添加e.printStackTrace() -
@ShaileshSaxena 我只是在使用 servlets/Jsps。
-
异常发生在 SubjectDAO.subjectList 中。您需要完整的堆栈跟踪才能了解发生了什么。
-
@超级用户:在getServletContext().getRequestDispatcher("/content.jsp").forward(request, response);之前还有其他的redirect/forward语句吗?在你的 servlet 中?或者您在转发控件后尝试使用 out.write 写一些响应?
标签: java jsp model-view-controller