스크립트 요소
- 선언문 : 변수나 메서드 선언할 때 사용
- 스크립트릿 : 자바 코드 작성할 때 사용
- 표현식 : 변수의 값을 출력할 때 사용
내장 객체(내장 변수) 기능
JSP가 서블릿으로 변환될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수가 내장 객체.
자주 사용되는 내장 객체들로는 page, request, session, application이 있음
session 내장 객체에 데이터 바인딩
<서블릿>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package sec01.ex01;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;
@WebServlet("/sess")
public class sessionTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
//세션 객체 가져옴
HttpSession session = request.getSession();
//세션 객체에 이름 바인딩
session.setAttribute("name", "홍길동");
pw.println("<html><body>");
pw.println("<h1>세션에 이름을 바인딩</h1>");
pw.println("<a href='/pro12/test01/session1.jsp'>첫 번째 페이지로 이동하기</a>");
pw.println("</body></html>");
}
}
|
cs |
<jsp>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//session1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션에 바인딩된 이름 값 가져옴
String name = (String)session.getAttribute("name");
//세션 객체에 주소 바인딩
session.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름은 <%=name%> 입니다.<br>
<a href="session2.jsp">두 번째 페이지로 이동</a>
</body>
</html>
//session2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션 객체에 바인딩된 이름과 주소 값을 가져옴
String name = (String)session.getAttribute("name");
String address = (String)session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름은 <%=name %>입니다.<br>
주소는 <%=address %>입니다.
</body>
</html>
|
cs |
application 내장 객체에 데이터 바인딩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
//appTest1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//이름과 주소를 세션과 애플리케이션 내장 객체에 바인딩
session.setAttribute("name", "홍길동");
application.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>이름과 주소를 저장</h1>
<a href="appTest2.jsp">두 번째 웹 페이지로</a>
</body>
</html>
//appTest2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = (String)session.getAttribute("name");
String address = (String)application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름은 <%=name %>입니다.<br>
주소는 <%=address %>입니다.
<!--
그냥 실행하면 이름과 주소가 모두 잘 출력된다.
하지만 다른 브라우저로 요청하면 세션 값은 null로 출력된다.
따라서 애플리케이션 내장 객체의 스코프는 애플리케이션 전체이고,
세션 내장 객체의 스코프는 같은 브라우저 임을 알 수 있다.
-->
</body>
</html>
|
cs |
request 내장 객체에 데이터 바인딩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
//requestTest1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//리퀘스트 객체에 바인딩
request.setAttribute("name", "홍길동");
request.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//리퀘스트 객체를 다른 JSP로 포워딩
RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");
dispatch.forward(request, response);
%>
</body>
</html>
//requestTest2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//첫 번째 페이지에서 포워딩 된 리퀘스트 객체에서 getAttribute를 사용해 정보 가져옴
String name = (String)request.getAttribute("name");
String address = (String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름은 <%=name %>입니다.<br>
주소는 <%=address %>입니다.
</body>
</html>
|
cs |
out 내장 객체 이용해서 데이터 출력
첫 번째 jsp페이지에서는 이렇게 데이터를 넘기는 폼을 만들어 줌
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String age = request.getParameter("age");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(name!=null || name.length()!=0){
//이름과 나이를 표현식으로 출력
%>
<h1><%=name%>, <%=age%></h1>
<%
}else{
%>
<h1>이름을 입력하세요</h1>
<%
}
%>
<%
if(name!=null || name.length()!=0){
//이름과 나이를 out 내장 객체로 출력
%>
<h1><% out.println(name+", "+age); %></h1>
<%
}else{
%>
<h1>이름을 입력하세요</h1>
<%
}
%>
</body>
</html>
|
cs |
표현식과 out 내장객체 중 무엇을 사용해도 출력 결과는 같음
JSP 페이지 예외 처리
jsp 예외 처리는 먼저 예외 처리 jsp를 만든 후 디렉티브 태그 속성 중 isErrorPage 속성을 true로 설정한다. 그리고 일반 jsp 페이지의 디렉티브 태그 속성 중 errorPage 속성을 예외 처리 페이지 이름으로 지정한다.
이러한 폼을 하나 생성
값을 계산하고 출력하는 페이지 하나 생성하고 이 페이지에서 예외가 발생하면 갈 페이지 하나 생성
예외가 발생하면 이동하는 페이지
에러 코드에 따른 예외 처리 페이지 지정
web.xml에서 xml로 각각의 에러코드에 대한 예외 처리 페이지를 지정할 수 있다.
<error-page>
<error-code>오류 코드</error-code>
<location>오류 페이지 위치</location>
</error-page>
코드 형식은 위와 같이 작성하면 된다.
위 처럼 해당 에러코드에 대해서 예외 처리를 할 페이지를 만들어 두고, web.xml파일에서 에러코드에 따른 예외 처리 페이지를 지정하면 해당 에러코드가 발생하면 지정한 jsp페이지로 이동해서 지정해 둔 화면을 보여줄 수 있도록 한다.
JSP welcome 파일 지정하기
웹 애플리케이션 첫 화면에 해당하는 홈페이지를 아래와 같이 web.xml에 등록해 두면 브라우저에서는 컨텍스트 이름마으로 요청하여 간단하게 표시할 수 있음
<welcome-file-list>
<welcome-file>jsp 또는 html 파일 이름</welcome-file>
<welcome-file>jsp 또는 html 파일 이름</welcome-file>
</welcome-file-list>
여러개의 파일을 지정하면 요청 시 첫 번째로 지정한 welcome 파일부터 차례로 찾아 홈페이지로 보여준다.
web.xml에서 위와 같이 작성하고
브라우저에서 컨텍스트 이름을 아래와 같이 요청하면
main.jsp 페이지가 출력된다.
스크립트 요소 이용해서 회원 정보 조회
먼저 위와 같이 회원 이름으로 조회하기 위한 입력 폼을 생성한다.
<member.jsp>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<%@page import="java.util.Date"%>
<%@page import="java.util.List"%>
<%@page import="sec02.ex01.MemberDAO"%>
<%@page import="sec02.ex01.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
h1{
text-align: center;
}
</style>
</head>
<body>
<h1>회원 정보 출력</h1>
<%
request.setCharacterEncoding("utf-8");
String _name = request.getParameter("name");
MemberVO memberVO = new MemberVO();
memberVO.setName(_name);
MemberDAO dao = new MemberDAO();
//memberVO를 listMember()메서드로 전달해 조회 조건에 해당되는 회원 정보를 조회
List list = dao.listMember(memberVO);
%>
<table border=1 width=800 align=center>
<tr align="center" bgcolor="#ffff66">
<td>아이디</td>
<td>비밀번호</td>
<td>이름</td>
<td>이메일</td>
<td>가입일자</td>
</tr>
<%
//MemberDAO에서 조회한 회원 정보를 for 반복문으로 출력
for(int i=0;i<list.size();i++){
MemberVO vo = (MemberVO)list.get(i);
String id = vo.getId();
String pwd = vo.getPwd();
String name = vo.getName();
String email = vo.getEmail();
Date joinDate = vo.getJoindate();
%>
<tr align="center">
<td><%=id %></td>
<td><%=pwd %></td>
<td><%=name %></td>
<td><%=email %></td>
<td><%=joinDate %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
|
cs |
<MemberDAO.java>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
public class MemberDAO {
private Connection con;
private PreparedStatement pstmt;
private DataSource ds;
public MemberDAO() {
try {
Context ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
} catch (NamingException e) {
e.printStackTrace();
}
}
public List<MemberVO> listMember(MemberVO memberVO){
List<MemberVO> list = new ArrayList<MemberVO>();
//조회할 이름을 가져옴
String _name = memberVO.getName();
try {
con = ds.getConnection();
String sql = "select * from t_member";
//_name 값이 존재하면 쿼리에 where절을 추가하여 해당 이름으로 조회함
if (_name!=null && _name.length()!=0) {
sql+=" where name = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, _name);
} else {
//_name값이 없으면 모든 회원 정보를 조회
pstmt = con.prepareStatement(sql);
}
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joindate = rs.getDate("joindate");
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setEmail(email);
vo.setJoindate(joindate);
list.add(vo);
}
rs.close();
pstmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
|
cs |
listMember메서드 부분만 잘라온 것
이름을 입력하지 않고 그냥 조회하면 이렇게 DB에 있는 모든 정보가 조회된다.
DB에 있는 이름을 입력하면 해당 회원에 대한 정보만 조회할 수 있다.
'자바 웹 > jsp' 카테고리의 다른 글
JSP에서 파일 업로드, 다운로드 (0) | 2022.06.19 |
---|---|
JSP 표준 태그 라이브러리(JSTL) (0) | 2022.06.19 |
표현 언어 (0) | 2022.06.18 |
액션 태그 (0) | 2022.05.15 |
JSP 정의와 구성요소 (0) | 2022.05.14 |