【问题标题】:Servlet exception handling: forwarding to the same error page with different messagesServlet异常处理:用不同的消息转发到同一个错误页面
【发布时间】:2015-07-02 10:43:13
【问题描述】:

如何处理 servlet 中的异常转发到具有不同消息的同一错误页面? 在我的 servlet 中,我有以下 doGet(此处简化)方法,带有一个 switch 案例:

public class NewServlet extends HttpServlet {
//[...]
protected void doGet(
    //[...]
        try {
            DAO ldapdao = new DAO();
            List<Entry> entries = null;

            switch (enumPage.fromString(operation)) {                    
//  [...]
                case add:
                    String values[] = request.getParameterValues("item");
                    try {
                        ldapdao.addentry(values);
                        link = "entryadded.jsp";
                    } catch (Exception exp) {                                   // 2                            
                        throw new MyException("Entry Not Added");
                    }
                    break;


                case remove:
                    entries = ldapdao.searchEntry(request.getParameter("item"));
                    if (entries.isEmpty()) {
                        throw new MyException("Entry Not Removed");                              //3
                    } else {
                        ldapdao.remove(request.getParameter("item"));
                        link = "entryremoved.jsp";
                    }
                    break;

                case modified:
                    String values1[] = request.getParameterValues("item");
                    try {
                        ldapdao.modify(values1);
                        link = ("modified.jsp");
                    } catch (Exception exp) {                                   //4
                        throw new MyException("Entry Not Modified");
                    }
//  [...]

然后我有我的自定义异常:

package com.mycompany.test_servlet;
import javax.servlet.ServletException;
public class MyException extends ServletException {
private String message = null;
public MyException() {
    super();
}
public MyException(String message) {
    super(message);
}
public MyException(Throwable cause) {
    super(cause);        
}    
}

和 web.xml 文件:

<error-page>
    <location>/Error.jsp</location>
</error-page>

【问题讨论】:

    标签: java jsp exception servlets web.xml


    【解决方案1】:

    尝试指出异常类型:

    <error-page>
        <exception-type>com.mycompany.test_servlet.MyException</exception-type>
        <location>/Error.jsp</location>
    </error-page>
    

    【讨论】:

      【解决方案2】:

      您可以尝试在请求对象中设置属性,同时捕获异常

      request.setAttribute("exception", ex.getMessage());
      

      然后在error.jsp中获取这个属性,例如:

                              <% if (request.getAttribute("exception") != null) {  %>
                              <tr>
                                  <td colspan='2'><p align=right>Authentication Error (try again):<br>
                                      <%=request.getAttribute("exception")%>
                                  </p></td>
                              </tr>
                              <%}%>
      

      【讨论】:

        猜你喜欢
        • 2019-10-08
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 2012-03-18
        • 2014-05-11
        • 2012-10-29
        • 1970-01-01
        相关资源
        最近更新 更多