뉴렉처 JSP[47 ~ 57]

김상복·2022년 4월 6일
0

뉴렉처JSP

목록 보기
3/5

47. EL

[Controoler - View의 형태일때]
request.setAttribute("cnt",30) - request.getAttribute("cnt")
이런 식으로 데이터를 꺼내야하는데

EL을 사용하면 View에서는 JAVA코드를 사용하지 않을 수 있다
[사용법]
JSP 파일에서 → ${cnt}
이렇게 되면 java 파일의 request.setAttribute("cnt",30)으로 저장 된 cnt에 들어있는 값을 불러온다 = 30출력

그렇다면 List 같은 여러가지 데이터가 들어있다면 어떻게 출력될까??

1. List list = new ArrayList( ){"1", "test", ..., ...};
request.setAttrivute("list",list); 로 저장
2. ((List)request.getAttribute("list")).get(0)으로 출력
을 해야 했지만

EL을 사용하게 되면 ${list[0]}으로 순서대로 출력이 가능해진다는 장점이 있다

다음은 Map의 경우는 어떨까??
Map n = new HashMap("key", value)의 형태를 띄게 되는데

Map은 항상 key값과 value 값이 함께 저장되어야 한다

((Map)request.getAttribute("n")).get("key")로 출력을 하게 된다
하지만 EL을 사용하면

${n.key}으로 출력할 수 있게 된다

48. EL의 데이터 저장소

page 객체 : pageContext.setAttribute("aa", "hello")로 해당 페이지에서 사용할 수 있는 EL 데이터 객체 이다, ${aa}로 해당 JSP에서 pageContext를 선언 후 사용 할 수 있다

예를 들어 JAVA 페이지에서 request.setAttribute("result", "bye") 로 값을 저장해두고 JSP 파일에서 pageContext.setAttribute("result", "hello")라는 값을 저장해보자
그렇게 되면 둘 다 result라는 값에 저장을 해뒀기 때문에
EL문으로 데이터를 출력하려고 ${result}라고 출력하게 되면 해당 페이지에 있는 데이터가 우선 순위가 높아서 hello라는 출력 문을 출력하게 된다
이럴 경우에는 어떻게 해야될까??

${requestScope.result }라고 출력하게 되면 requestScope가 해당 request에 있는 저장소의 데이터를 불러와서 출력해주게 되고 그렇게 되면 JAVA 페이지의 result를 출력해서 bye가 출력되는 것을 확인 해볼 수 있다

그 외의 내장 객체

49. EL 연산자

https://codedragon.tistory.com/6009

해당 블로그를 참조하자 대부분의 연산자는 비슷하다

50.51.5 JSP를 이용해서 자바 웹 프로그램 시작하기

JSP는 HTML과 다르게 반드시 UTF-8로 인코딩을 해줘야만 한글이 깨지지 않는다

1. ALT + ENTER 옵션 중 Text File옵션 Other의 UTF-8 변경
2. 지시어 추가 - <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

52. JDBC 설정

String url = "jdbc:oracle:thin:@localhost:1521/xe";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"jsp", "tigar");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);

라는 셋팅과 ojdbc8을 라이브러리에 추가해주면 자동으로 연결 되는 것을 확인할 수 있다

각각의 기능 정리

53.54.55.56 MVC model 1, 2 변형

영상 참조

57.

JAVA 파일

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {

	List<Notice> list = new ArrayList<>();
	
	
	String url = "jdbc:oracle:thin:@localhost:1521/xe";
	String sql = "select * from notice";
	
	try
	{
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection con = DriverManager.getConnection(url,"jsp", "tigar");
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql);

		
		while(rs.next()){
			int id = rs.getInt("ID");
			String title = rs.getString("TITLE") ;
			Date regdate = rs.getDate("REGDATE") ;
			String writerId =rs.getString("WRITER_ID") ;
			String hit = rs.getString("HIT") ;
			String files = rs.getString("FILES") ;
			String content = rs.getString("CONTENT") ;

		Notice notice = new Notice(
				id,
				title,
				regdate,
				writerId,
				hit,
				files,
				content
				);
			
			list.add(notice);
		}
		rs.close();
		st.close();
		con.close();
	}catch(Exception e)
	{
		e.printStackTrace();
	}
	
	request.setAttribute("list", list);
	
	request.getRequestDispatcher("/notice/list.jsp").forward(request, response);
}

JAVA 파일에서 주목해야 할 점은 아래의 VO 클래스를 활용해서 각 데이터를 저장한 뒤 List에 추가한다. 그리고 난 뒤 해당 List를 forward를 통해 해당 jsp파일로 보내준다

VO 클래스

	public class Notice {

        private int id;
        private String title;
        private Date regdate;
        private String writerId;
        private String hit;
        private String files;
        private String content;


    public Notice(int id, String title, Date regdate, 
    String writerId, String hit, String files, String content) {
        this.id = id;
        this.title = title;
        this.regdate = regdate;
        this.writerId = writerId;
        this.hit = hit;
        this.files = files;
        this.content = content;
    }}
    
    

JSP 파일

<%
				List<Notice> list = (List)request.getAttribute("list");
				for(Notice n : list){ 
                pageContext.setAttribute("n", n);
				%>	
                
				<tr>
					<td>${n.id }</td>
					<td class="title indent text-align-left">
                    <a href="detail?id=${n.id }">${n.title }</a></td>
					<td>${n.writerId }</td>
					<td>
						${n.regdate }
					</td>
					<td>${n.hit }</td>
				</tr>
				<%} %>

그러고 난뒤 해당 코드를 보자
1. List객체에 request.getAttribute("list")로 JAVA파일에서 온 데이터를 저장
단, List는 request로 넘어올 시 형변환이 필요하다
2. for(Notice n : list)의 의미는 Notice의 n이라는 변수를 가진 객체를 만들고 그곳에 아까 가져온 List를 넣어준다
3. 그리고 나서 바로 변수 n을 사용해서 해당 데이터를 하나씩 꺼낼 수 있으면 좋겠으나 그렇게편하게 사용할 수 없다. 페이지 저장소중 하나인 pageContext를 사용해서 해당 변수를 다시 한 번 해당 페이지에 저장해준 뒤 사용해야한다
4. ${n.title}과 같이 EL을 사용해서 출력할 수 있다

profile
초보 개발자

0개의 댓글