① JspException
JSP 에서 HTML 용 주석 사용시 간혹 아래와 같이 JspException이 터지는 경우가 있음
<-- --> 주석을 <%-- %-->로 교체하면 해결됨 (JSP 전용 주석)
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:599)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:478)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:377)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:325)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
controller.home.doGet(home.java:16)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
근본 원인 (root cause)
jakarta.servlet.ServletException: jakarta.servlet.jsp.JspException:
org.apache.jasper.JasperException: <h3>[/WEB-INF/view/inc/header.jsp] 내의 [c]을(를) 위한
TagLibraryValidator로부터 Validation 오류 메시지들</h3><p>7: Illegal text inside "c:choose"
tag: "<!-- 관리...".</p><p>10: Illegal text inside "c:choose" tag: "<!-- 멤버...".</p><p>26:
Illegal text inside "c:choose" tag: "<!-- 세션...".</p>
② DAO에서 DB 수정 쿼리 사용 후 값을 가져오고 싶을때
public String insertMember(Member m) throws Exception {
String id = null;
PreparedStatement stmt = getConnection().prepareStatement("insert into member(member_id, member_pw, birth, createdate, updatedate) values(?,?,?, CURDATE(), CURDATE())");
stmt.setString(1, m.getMember_id());
stmt.setString(2, m.getMember_pw());
stmt.setString(3, m.getBirth());
int checkSuccess = stmt.executeUpdate();
if(checkSuccess == 1) {
ResultSet rs = stmt.getGeneratedKeys();
if(rs.next()) {
id = rs.getString(1); // id = res.getString("member_id")로 가능
}
}
stmt.close();
getConnection().close();
return id;
}
INSERT, UPDATE, DELETE 문은 데이터 수정 쿼리이므로 executeQuery() 대신 executeUpdate()를 사용한다.
그럼에도 수정 쿼리 진행 후 ResultSet에 의도적으로 값을 담아 값을 반환받으려면
getGeneratedKeys(); : 생성된 키를 포함하는 ResultSet 객체를 가져온다.
값을 가져올때는 rs.getString(열의 인덱스 번호 또는 열의 이름)으로 가지고 오면 된다.
③ Map 타입이 아무것도 받지 못할때 유의
컨트롤러 : m == null 뿐만 아니라 값이 없음을 받을 수 있으므로 m.isEmpty()도 같이 검사할 것
뷰(EL표현) : empty m로 검사할 것 m == null 만 검사할 경우 값이 없음을 검사하지 않는다.
④ List<Map<String, Object>> 타입으로 만든 list를 뷰에서 출력하는 EL 표현식
${list[n]["keyName"]}
// 만약 list가 다음과 같은 데이터 구조로 되어 있다면:
List<Map<String, Integer>> list = new ArrayList<>();
Map<String, Integer> map1 = new HashMap<>();
map1.put("age", 25);
map1.put("score", 80);
list.add(map1);
Map<String, Integer> map2 = new HashMap<>();
map2.put("age", 30);
map2.put("score", 90);
list.add(map2);
// JSP에서 첫 번째 Map 객체의 "age" 값을 출력하려면:
<p>Age: ${list[0]["age"]}</p> <!-- 출력 결과: Age: 25 -->
'JSP_Servlet' 카테고리의 다른 글
서블릿에서 설정한 세션 HTML로 가져오기 (0) | 2024.10.23 |
---|---|
두 서블릿 간 속성/속성값 공유 (0) | 2024.10.23 |
[Web] Forward와 Redirect 차이 (0) | 2024.10.20 |
Servlet(서블릿) (0) | 2024.10.20 |