簡體   English   中英

ServletException從JSP MVC中的數據庫檢索數據

[英]ServletException in retrieving data from db in jsp mvc

我想知道在我的JSP項目中使用MVC的網絡,並在這里找到了很好的討論,現在我有以下內容:

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作為View是:

    <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。 謝謝

java.lang.IllegalStateException: Cannot forward after response has been committed一般原因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

有關更多信息,請參見以下鏈接: Link1 Link2 Link3

您可以添加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());
    }
}

然后,只需檢查您的應用服務器控制台即可。 它應該告訴你什么問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM