자바빈즈 태그란?
jsp에서 빈즈 형식에 맞춰서 데이터를 세팅해주고 getter로 가지고 오는 태그를 제공해준다.
객체생성방법
- java: MemberBean member = new MemberBean();
- jsp : <jsp:useBean class="패키지명.MemberBean" id="member">
setter()생성방법
- java: member.setName("자바학생");
- jsp: <jsp:setProperty name = "member" property="name" value="자바학생">
getter()생성방법
- java: member.getName();
- jsp: <jsp:getProperty name = "member" property="name">
예시
*com.koreait.beans 패키지 안의 MemberBean.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
|
<%@ 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>
</head>
<body>
<!-- 객체선언 -->
<jsp:useBean class="com.koreait.beans.MemberBean" id="member" />
<jsp:setProperty name="member" property="name" value="김자바" />
<jsp:setProperty name="member" property="age" value="22" />
<table border="1">
<tr>
<th>이름</th>
<th>나이</th>
</tr>
<tr>
<td><jsp:getProperty property="name" name="member" /></td>
<td><jsp:getProperty property="age" name="member" /></td>
</tr>
</table>
</body>
</html>
|
cs |
*MemberBean.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
|
package com.koreait.beans;
public class MemberBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
|
cs |
프론트단에서 자바코드가 섞여있는 것을 걷어내고자 하는 목적으로 빈즈태그가 작성이 된 것이다.
선언만 하고 set과 get부분을 자바코드를 사용해야하면 그것도 가능하다.
MemberBean 클래스를 member라는 이름의 객체로 만들어서
name은 김자바, age는 22살, getter라는 프로퍼티 부분에 name과 age를 선언하여 가지고 오는 방법이다.
응용
*age_search.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
|
<%@ 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>
</head>
<body>
<!--form태그로 이동--> <form action="age_db.jsp">
<label>
이름: <input type="text" name="name"/><br>
<input type="submit">
</label>
</form>
<!--input태그로 이동--> <input type="button" value="전체확인하기" onclick="selectAll();" >
<script>
function selectAll(){
location.href="age_all.jsp";
}
</scripT>
</body>
</html>
|
cs |
|
|
age_search를 웹으로 보면 이런모양인데
제출을 누르면 age_db.jsp로, 전체확인하기를 누르면 age_all.jsp로 넘어가는 기능을 구현할 것이다.
-. age_search.jsp의 point
어떤 태그를 사용하는지에 따라 백단으로 이동시켜주는 방법이 다르다.
위의 박스는 form 태그로 이동하는 방법이고 밑의 박스는 input 태그로 이동하는 방법이다.
*DBConnection.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
|
package com.koreait.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
public static Connection getConnection() throws SQLException{
Connection conn = null;
try {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "wjsp";
String password = "wjsp";
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패");
e.printStackTrace();
} catch(SQLException e) {
System.out.println("DB접속오류");
e.printStackTrace();
} catch(Exception e) {
System.out.println("알수없는오류");
e.printStackTrace();
}
return conn;
}
}
|
cs |
DB와 연결할 부분을 하나의 파일로 따로 빼서 관리하며
관리할 때 오류처리를 모두 해준다.
conn을 return 시켜 conn을 통해 DB에 접근할 수 있도로 ㄱ해준다.
*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
59
60
61
62
63
|
package com.koreait.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.koreait.beans.MemberBean;
public class MemberDAO {
public int getAge(String name) {
int age = 0;
String sql = "SELECT age FROM MEMBER WHERE name= ?";
try {
Connection conn = DBConnection.getConnection();
PreparedStatement pstm;
pstm = conn.prepareStatement(sql);
pstm.setString(1, name); //? : param
ResultSet rs = pstm.executeQuery();
if(rs.next()) {
age = rs.getInt(1); //return age;
}
} catch (SQLException e) {
e.printStackTrace();
}
return age;
}
public ArrayList<MemberBean> selectAll(){
String sql = "select * from member";
ArrayList<MemberBean> result = new ArrayList<MemberBean>();
Connection conn;
try {
conn = DBConnection.getConnection();
PreparedStatement pstm = conn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
while(rs.next()) {
MemberBean member = new MemberBean();
member.setName(rs.getString(1));
member.setAge(rs.getInt(2));
result.add(member);
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
|
cs |
age_all과 age_db에서 공통적으로 들어가는 java 코드를 따로 파일을 생성하여 정리해준다.
이 java파일은 import로 연결 가능하다.
-. MemberDao.java의 point
"제출"버튼을 눌러 특정 파라미터값만 불러오기위한 age_db.jsp에서 사용할 메서드이다.
첫번째 박스를 보면 String name으로 파라미터를 받는데 이는 클라이언트가 input창에 입력한 이름이다.
두번째 박스는 DB처리부분이다.
DBConnection 클래스를 객체로 받아왔다.
PreparedStatement는 DB와 java간 데이터를 주고받을 수 있는 기능을 하는데 객체로 SQL문을 받는 특징이 있다.
pstm.setString(1,name)에서의 name은 ? 안에 넣어진다.
이로인해 where = 클라이언트가 입력한 name 으로 where값이 변경되고 특정 컬럼만 찾는 sql문으로 변경된다.
앞의 1은 그 name 중 1번째 값을 넣으라는 의미로서 중복된 값이 없으면 해당 데이터만 가지고오게된다.
세번째 박스에 있는 rs.next()로 값이 있는지를 확인 후 return을 위한 최종 준비를 마친다.
전체값 모두를 가지고 오는 코드로서 age_all.jsp에서 사용할 메서드이다.
이는 전체를 모두 가져와야함으로 ArrayList라는 배열에 담았는데 자바빈즈를 활용한 Memberbeans라는 클래스를 하나 만들어 이를 통해 배열로 담아준다.
*MemberBean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.koreait.beans;
public class MemberBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
|
cs |
두번째 박스는 DB 처리 코드이다.
역시 DBConneciton 클래스를 객체화시키고 import시킴으로서 해당 메서드에서 사용하게 했으며
preparedStatement를 사용하여 sql문을 처리해준다.
위의 코드와 동일한 기능이나 좀 더 깔끔하게 정리된 버전이다.
세번째박스는 MemberBean의 객체를 생성하여 getString(1)을 통해서 DB값을 MemberBean 클래스에 대입한다. 그래야 age_all.jsp에서 get메서드를 통해서 MemberBean에서 값을 꺼낼 수 있게 된다.
*age_db.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
|
<%@page import="com.koreait.dao.MemberDAO"%>
<%@ 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>
</head>
<body>
<%
String name = request.getParameter("name");
MemberDAO mda = new MemberDAO();
int age = mda.getAge(name);
%>
<%
if(age !=0){
%>
이름 : <%=name %> <br>
나이: <%=age %> <br>
<%
}else{
%>
찾는 이름이 없습니다.
<%
}
%>
<input type="button" value="재검색" onclick="location.href='age_search.jsp'">
</body>
</html>
|
cs |
여기는 클라이언트를 통해 파라미터를 직접적으로 가지고오는 jsp파일이다.
여기서 name이란 이름으로 클라이언트가 원하는 값을 받아왔고 name이라는 변수에 할당한다.
그리고 MemberDao( )의 객체를 생성하여 소속되어있는 getAge의 메서드를 사용할 수 있게 하였으며 getAge의 파라미터에 받아온 name의 값을 넣어주고 해당 결과를 int age 값으로 받는다.
해당 과정은 name을 입력할 경우, 이름의 나이까지 출력하기 위해 진행하는 과정으로
만약 게시글에서 해당 글찾기 등의 기능만 구현할꺼라면 24행만 작성하여 이름만 출력이 가능하다.
*age_all.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
|
<%@page import="com.koreait.beans.MemberBean"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
</head>
<body>
<jsp:useBean id="mdao" class="com.koreait.dao.MemberDAO" />
<%
ArrayList<MemberBean> result = mdao.selectAll();
%>
<table border="1">
<tr>
<td>이름</td>
<th>나이</th>
</tr>
<%
for(MemberBean member : result){
%>
<tr>
<td><%=member.getName() %></td>
<td><%=member.getAge() %></td>
</tr>
<% } %>
</table>
<input type="button" value="다시검색"
onclick="location.href='age_search.jsp'">
</body>
</html>
|
cs |
첫번째 박스는 자바객체를 생성하는 방법으로 이 jsp파일에서 selectAll이라는 메서드를 사용할 수 있도록 자바빈즈태그를 활용해서 MemberDao를 import 해주었다.
또한 selectAll 메서드를 활용해 MemberBean형식으로 담겨있는 배열을 result로 꺼낼 수 있도록 서로 연결해주었다.
두번째 박스는 향상된 for문을 활용하여 return 값은 여전히 MemberBean형태로 하되 result에 담겨있는 값들을 member를 통해 출력시켜주는 기능을 하고있다.
age_all.jsp는 어떠한 파라미터를 받아오는 기능이 없다.
단순히 전체목록조회를 위한 페이지로서 getParameter를 할 필요가 없고
selectAll의 세번째 박스에서 해당 데이터들을 모두 꺼내 return 하는 기능을 하는 코드가 있음으로 해당 사이트는 출력만 위한 코드를 작성한다.
'국비필기노트 > jsp' 카테고리의 다른 글
jsp_Ajax (0) | 2022.06.13 |
---|---|
jsp_로그아웃 (0) | 2022.06.13 |
jsp_DB에서 여러 데이터 가져오기 (0) | 2022.06.08 |
jsp_DB 연결(DB계정생성, Java-DB연결) (0) | 2022.06.03 |
jsp_MVC패턴 (0) | 2022.06.03 |