QA@IT

java.lang.NumberFormatException: For input string

9962 PV

お世話になります。
初歩的な質問ですみません。
java.lang.NumberFormatException: For input string
のエラーが消せなくて困っています。

public class LoginServlet extends HttpServlet{
    private static final long serialVersionUID = 1L;
    @SuppressWarnings("unused")
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {      
        try {
            request.setCharacterEncoding("Windows-31J");
            String sql = "SELECT * FROM login WHERE name = ? AND password = ?";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/JavaServlet?useUnicode=true&characterEncoding=UTF-8","admin","adminpass");
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1,request.getParameter("name"));
            stmt.setString(2,request.getParameter("password"));
            ResultSet rs = stmt.executeQuery();
            List<LoginBean> ret = new ArrayList<LoginBean>();
            if (rs.next()) {
                LoginBean user = new LoginBean();
                user.setName(rs.getString("name"));
                ret.add(user);
            }
            if (ret != null) {
                request.getSession().setAttribute("login", ret);
                getServletContext().getRequestDispatcher("/certification.jsp").forward(request,response);
            } else {
                List<String> messages = new ArrayList<String>();
                messages.add("ログインに失敗しました。");
                request.setAttribute("errorMessages", messages);
                getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
            }
            rs.close();
            stmt.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }      
}

getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
↑の行だとトレースでは指定しているのですが、
どこがjava.lang.NumberFormatExceptionなのかわかりません。
別に数字を扱うパラメーターはないのですが・・・。
どなたかお知恵をお貸し下さい。

回答

お騒がせしました。
自己解決致しました。
LoginServletのクラスを書き直したところ、
java.lang.NumberFormatException: For input string: "name"のエラーは消えました。
loginオブジェクトにnameを格納する仕方がまちがってたようです。
また、機会があったら宜しくお願いします。

編集 履歴 (0)

例外メッセージにどの行で発生しているのかわかるよう行番号が書いてあるはずです

編集 履歴 (0)
  • getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
    ↑の行だとトレースでは指定しているのです。
    ちなみにエラーはjava.lang.NumberFormatException: For input string: "name"です。
    -
  • 失礼しました。getServletContext().getRequestDispatcher("/certification.jsp").forward(request,response);
    の行の間違いです。
    -
  • どうもcertification.jspにエラーがあるようなのでみたところ、${login.name}という記述が違うようです。${login}としたところ、エラーは出ず、[beans.LoginBean@16a870f5]と表示します。これはDBから抽出した名前をログイン時に表示したいのですが、うまく表示されないようです。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。