【问题标题】:ServletException in retrieving data from db in jsp mvcServletException在jsp mvc中从db中检索数据
【发布时间】: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&amp;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&amp;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


【解决方案1】:

java.lang.IllegalStateException: Cannot forward after response has been committed 异常的一般原因是以下任何一种:

  1. 您已经从您的 servlet/JSp 重定向/转发了控件,并且仍在尝试使用 outStream out.write("something") 编写一些响应来响应
  2. 您已经从您的 Servlet/JSP 重定向控制,并再次尝试在没有适当条件的情况下从相同的 servlet/JSP 将控制发送到低于先前重定向/转发的某个位置(尽管根据条件您可以重定向/转发到不同的资源,但有两个重定向/转发不应相互矛盾/冲突)

例如: 这是正确的--

if(condition1)
 redirect to resource 1
else if(condition 2)
 redirect to resource 2
else
 redirect to resource 3

But this is wrong --

if(condition 1)
 redirect to resource 1
again
 redirect to resource 2

有关更多信息,请参阅以下链接:Link1Link2Link3

【讨论】:

    【解决方案2】:

    你可以加e.printStackTrace();

        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) {
            e.printStackTrace();
            throw new ServletException("Cannot obtain subjects from DB", e.getCause());
        }
    }
    

    然后只需检查您的应用服务器控制台。它应该会告诉你问题出在哪里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多