私は、JSPとサーブレットで社員を登録するシステムを作っています。
社員登録確認画面まではいくのですが、社員完了画面にいく際に、500エラーが発生してしまいます。
コンソールで原因を調べてみると、DAOのps.setString(7, employee.getDepartment().getDeptId());
というコードでエラーが出ていました。
実現したいことは、社員完了画面までいって社員登録ができていることです。
JSP
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<!DOCTYPE html> 5<html> 6<head> 7<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8<title>社員登録</title> 9</head> 10<body> 11<h3>社員登録確認画面</h3> 12<div class="update"> 13<div class="form"> 14<div class="label">パスワード:</div> 15<div class="input">${employee.empPass}</div> 16</div> 17<div class="form"> 18<div class="label">社員名:</div> 19<div class="input">${employee.empName}</div> 20</div> 21<div class="form"> 22<div class="label">性別:</div> 23<div class="input"><c:choose><c:when test="${employee.gender==1}">男性</c:when> 24<c:when test="${employee.gender==2}">女性</c:when> 25<c:otherwise> ? </c:otherwise></c:choose></div> 26</div> 27<div class="form"> 28<div class="label">住所:</div> 29<div class="input">${employee.address}</div> 30</div> 31<div class="form"> 32<div class="label">生年月日:</div> 33<div class="input">${employee.birthday}</div> 34</div> 35<div class="form"> 36<div class="label">権限:</div> 37<div class="input"><c:choose><c:when test="${employee.authority==1}">一般</c:when> 38<c:when test="${employee.authority==2}">管理者</c:when> 39<c:otherwise> ? </c:otherwise></c:choose></div> 40</div> 41<div class="form"> 42<div class="label">部署名:</div> 43<div class="input">${employee.department.deptName}</div> 44</div> 45<form action="<%=request.getContextPath()%>/Insert" method="post"> 46<div class="form"> 47<div class="label"></div> 48<div class="input"> 49<input type="hidden" name="empPass" value="${employee.empPass}" /> 50<input type="hidden" name="empName" value="${employee.empName}" /> 51<input type="hidden" name="gender" value="${employee.gender}" /> 52<input type="hidden" name="address" value="${employee.address}" /> 53<input type="hidden" name="birthday" value="${employee.birthday}" /> 54<input type="hidden" name="authority"value="${employee.authority}" /> 55<input type="hidden" name="deptName" value="${department.deptId}" /> 56<input type="submit" value="登録" /> 57</div> 58</div> 59</form> 60<form action="/servlet_crud/jsp/sample01/regist_input.jsp"> 61<div class="form"> 62<div class="label"></div> 63<div class="input"> 64<input type="submit" value="戻る" /> 65</div> 66</div> 67</form> 68</div> 69</div> 70</body> 71</html>
package jp.co.sss.servlet.regist; import java.io.IOException; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jp.co.sss.crud.bean.Department; import jp.co.sss.crud.bean.Employee; import jp.co.sss.crud.db.DepartmentDAO; import jp.co.sss.crud.db.EmployeeDAO; @WebServlet("/Insert") public class Insert extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String empPass = request.getParameter("empPass"); String empName = request.getParameter("empName"); String gender = request.getParameter("gender"); String address = request.getParameter("address"); String birthday = request.getParameter("birthday"); String authority = request.getParameter("authority"); String deptId = request.getParameter("deptId"); Department department = null; try { department = DepartmentDAO.findByDepartment(deptId); } catch (SQLException e) { throw new ServletException(e); } Employee employee = new Employee(); employee.setEmpPass(empPass); employee.setEmpName(empName); employee.setGender(gender); employee.setAddress(address); employee.setBirthday(birthday); employee.setAuthority(authority); employee.setDepartment(department); EmployeeDAO.insert(employee); request.getRequestDispatcher("/jsp/sample01/regist_complete.jsp").forward(request, response); } }
DAO
1package jp.co.sss.crud.db; 2import java.sql.Connection; 3import java.sql.PreparedStatement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6import java.util.ArrayList; 7import java.util.List; 8import jp.co.sss.crud.bean.Department; 9import jp.co.sss.crud.bean.Employee; 10public class EmployeeDAO { 11/** 12* 社員を登録 13* 14* @return 社員登録 15* @throws SQLException 16* データベース操作失敗時に送出 17* */ 18* public static void insert(Employee employee) { 19* Connection con = null; 20* PreparedStatement ps = null; 21try { 22con = DBManager.getConnection(); 23ps = con.prepareStatement("INSERT INTO EMPLOYEE(EMP_PASS,EMP_NAME," 24+ "GENDER,ADDRESS,BIRTHDAY,AUTHORITY,DEPT_ID)VALUES(?, ?, ?, ?, ?, ?, ?)"); 25ps.setString(1, employee.getEmpPass()); 26ps.setString(2, employee.getEmpName()); 27ps.setString(3, employee.getGender()); 28ps.setString(4, employee.getAddress()); 29ps.setString(5, employee.getBirthday()); 30ps.setString(6, employee.getAuthority()); 31ps.setString(7, employee.getDepartment().getDeptId()); 32ps.executeUpdate(); 33} catch (SQLException e) { 34e.printStackTrace(); 35} finally { 36DBManager.close(ps, con); 37} 38}
DepartmentDAO
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import jp.co.sss.crud.bean.Department; public class DepartmentDAO { /** * 部署情報を部署IDで検索 * * @param genreId * 部署ID * @return 部署情報 * @throws SQLException * データベース操作失敗時に送出 */ public static Department findByDepartment(int deptId) throws SQLException { Department department = null; Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM DEPARTMENT WHERE DEPT_ID = ?"); preparedStatement.setInt(1, deptId); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { department = new Department(); department.setDeptId(resultSet.getInt("dept_id")); department.setDeptName(resultSet.getString("dept_name")); } DBManager.close(preparedStatement, connection); return department; } }
HTTPステータス500-というエラーが起き、説明に、The server encountered an internal error that prevented it from fulfilling this request.というのが表示されています。
ps.setString(7, employee.getDepartment().getDeptId());のコードを消すと社員完了画面まではいくのですが、社員登録はされませんでした。
2日間考えたり調べたりしたのですが、解決できなかったので、アドバイス等頂けると大変助かります。
ソースコードが多く、大変ご迷惑だと思いますが、宜しくお願い致します。