jsp为什么catch里面的代码不执行?

User.java

public class User {
    public User(){
    }
    public static void checkUser(String username,String password) throws UsernameException{
        try{
            Connection connection = ConnectionUtils.getConnection();
            String sql = "select * from user where username="+username;
            Statement statement = connection.createStatement();
            ResultSet result = statement.executeQuery(sql);
            if(!result.next()){
                throw new UsernameException("用户名异常");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

login.jsp

<%
    response.setCharacterEncoding("utf-8");
    String action = request.getParameter("action");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    
    if(action != null && action.equals("login")){
        try{
            User.checkUser(username, password);
        }catch(UsernameException e){
            out.println("该用户名不存在!");
            return;
        }
        out.println("ddddd");
    }
%>

为什么out.println("该用户名不存在!");没打印到页面上?

而下面的代码改了处理异常的就可以打印了

User.java

public class User {
    public User(){
    }
    public static void checkUser(String username,String password) throws Exception, UsernameException{
        Connection connection = ConnectionUtils.getConnection();
        String sql = "select * from user where username="+username;
        Statement statement = connection.createStatement();
        ResultSet result = statement.executeQuery(sql);
        try{
            
            if(!result.next()){
                throw new UsernameException("用户名异常");
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
}

改为SQLException 就可以了 。。这里为什么要用SQLException ?
刚接触到java的异常处理。。不是很懂,求大神指点。。Thanks

阅读 3.5k
2 个回答

因为在User.java中你已经把UsernameException给捕获了

因为在checkUser这个方法中你try catch了Exception,这个就处理了所有的异常(包括UsernameException),因为其他的异常都是继承他的,所以都会捕获。你需要把checkUser方法中catch的内容改变。或者在catch之后判断异常是否为UsernameException再抛出来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题