728x90

JSP의 기초 문법(스크립팅 요소, 지시자, 주석)

 

<%=> 표현식 : 기본적인 jsp표현 , ${} : EL태그

 

"/JSP/SumServlet" = 경로문제중요!!

Servlet : doGET, doPost로 request & response사용

JSP : 내장객체(자바객체) 9개를 사용하여 request, response사용가능함 -> 다만 스크립트 안에 써야함 자바코드이기 때문에 <% %> 안에 써줘야 함.

 

null값이 들어오면 문자열이 아니기 때문에 integer.parseInt에서 nullpoint exception이 발생함

if(request.getParameter("num1") != null)로 잡아줘야 함!!

 

out.println(result);

<%=result>

${result}

 

<%request.setCharacterEncoding("urf-8");%> =>한글 안깨지게 해주는 마법의 주문

 

String path = "/message/formMission.html";

String fullPath = application.getRealPath(path);

 

 

<액션>

<jsp:include page> -> : 표준액션 - 본래 지원해주는 표준액션

<c:set var> -> 커스텀 액션 -  별도의 라이브러리 설치해야 함. 태그라이브러리 지시자가 반드시 필요

 

  • []--include 1 예제

module

footer.jsp

header.jsp

logo.jsp

menu.jsp

template.jsp

join.jsp

main.jsp

-template.jsp(페이지의 템플릿을 담당해서 수정/삭제에 용이하게 나눠서 관리)

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

String body = request.getParameter("body");

if(body == null){ //body값 기본값 설정

body = "../main.jsp";

}

%>   

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<div>오늘의 날씨 : 추움</div>

<jsp:include page="logo.jsp"/>

<hr> <!-- 줄하나 긋기 -->

<jsp:include page="header.jsp"/>

<hr>

<jsp:include page="menu.jsp"/>

<hr>

<jsp:include page="<%= body %>"/>

<hr>

<jsp:include page="footer.jsp"/>

<hr>

</body>

</html>

 

 

-menu.jsp

 

<%@ 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>

<ul>

<li><a href = "template.jsp?body=../main.jsp">메인</a></li>

<li><a href = "template.jsp?body=../join.jsp">회원가입</a></li>

</ul>

</body>

</html>

 

오늘의 날씨 : 추움

로그내용


헤더내용



메인 페이지 (이부분이 바뀜) -> 이곳이 바로 body부분!


footer내용

 

 

 

  • []-forward폴더  예제

select.jsp에서 시작

 

★★👮‍♂️👮‍♂️forward 액션태그란 무엇인가?

<jsp:forward> : 다른 사이트로 이동할 때 사용</forward>

<jsp:include> : 정적 혹은 동적인 자원을 현재 페이지의 내용에 포함, 페이지 모듈화

 

--select.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="contorl.jsp" method="get">

보고싶은 페이지:

<select name="page">

<option value="a.jsp">A페이지</option>

<option value="b.jsp">B페이지</option>

<option value="c.jsp">C페이지</option>

</select>

<input type="submit" value="이동">

</form>

</body>

</html>

 

--control.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

String code = request.getParameter("page");

%> 

<jsp:forward page="<%= code %>"></jsp:forward>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

어떤 내용이 있어도 출력이 되지 않는다.

</body>

</html>

 

보고싶은 페이지: A페이지 B페이지 C페이지 이동

 

 

**자바빈 : 객체생성을 편하게 하기 위한 방법 (get, set을 한번만 써주기 위해)

jsp에서 데이터를 저장할 때

-> DAO(Data Access Object) - 데이터 접근 객체

객체화해서 데이터를 저장하고 싶을 때 자바빈을 사용

 

<jsp:useBean>  : 객체생성요소

ProductInfo obj = new ProductInfo();

<jsp : useBean id ="obj" class ="mall.PersonalInfo"/>

<jsp:setProperty name "obj" property="age" value = "27"/> : set메소드를 호출하는 용도

 

<jsp : setProperty name = "mybean" property="*"/> -> 모든 객체들의 set값 설정됨

 

폼에서 넘어오는 데이터값들을 보드객체로 포장해서 보드DAO까지 넘겨주고 싶다

insert_form -> insertAction  -> BoardDAO(보드데이터객체 보관함) 메소드함

 

디자인- 싱글톤 방식(static 선언 하는 방식 - 한번만 선언)

 

객체에 있는  멤버변수와  폼에 있는 name의 이름이 동일해야 한다.

insert-form.jsp -> insertAction.jsp

Board.java -> BoardDAO.java

 

registerForm.jsp -> registerProc.jsp

Member.java -> MemberDAO.java

 

 

**JDBC

-자바로 만든 애플리케이션이 DB에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스의 집합

 

c:\\oraclexe -> product ->  jdbc -> lib -> ojdbc6.jar 파일을 c://tomcat9 -> lib에 넣기

 

JDBC 드라이버 로드 : Oracle 서버

DB : URL서버

  1. DriverManager (JDBC 드라이버 로드)

  2. Connect ion (데이터베이스와 연결)

  3. Statement (SQL문 실행)

  4. ResultSet (데이터베이스와 연결을 끊는다.)

 

----BoardDAO

package kosta.bean;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

 

public class BoardDAO {

private static BoardDAO dao = new BoardDAO(); //static 한번만 선언!!

public static BoardDAO getInstance() { //이 메소드만 호출하면 dao객체 가져옴

return dao;

}

public int insert(Board board) {

Connection conn = null;

PreparedStatement pstmt = null;

               

                    //4단계 : query문 작성

String sql = "insert into board values(board_seq.nextval,?,?,?,sysdate,0)";//board_seq :시퀀스

int re = -1;

String url = "jdbc:oracle:thin:@localhost:1521:XE";

String user = "kosta202";

String password = "1234";

try {

        //1단계 : JDBC 드라이버 로딩

Class.forName("oracle.jdbc.driver.OracleDriver");

        //2단계 : Connection객체 생성(DB연결)

conn = DriverManager.getConnection(url,user,password);

        //3단계 : PreparedStatement객체 생성 (query전송객체)

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, board.getTitle());

pstmt.setString(2, board.getWriter());

pstmt.setString(3, board.getContents());

                              //5단계 : 쿼리문 전송

re = pstmt.executeUpdate(); //업데이트 한만큼 넘겨줌 (insert값을 판단할 수 있음.)

 

} catch (Exception e) {

e.printStackTrace();

}

return re;

}

}

--insert_form.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Insert title here</title>

</head>

<body>

<h3>글쓰기</h3>

<hr>

<form action="insertAction.jsp" method="post">

작성자 : <input type="text" name="writer"><br>

제목 : <input type="text" name="title"><br>

내용 <br>

<textarea rows="6" cols="70" name="contents"></textarea>

<br>

<input type="submit" value="등록">

</form>

 

</body>

</html>

--insertAction.jsp

<%@page import="kosta.bean.BoardDAO"%>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("utf-8");

%>

 

<jsp:useBean id = "board" class ="kosta.bean.Board"/> <!-- 보드객체 생성 -->

<jsp:setProperty property="*" name="board"/> *-객체 하나생성

 

<%

BoardDAO dao = BoardDAO.getInstance();

int re = dao.insert(board);

if(re == 1){  //데이터 입력에 성공하면

out.println("성공");

}else{

out.println("실패");

}

%>

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

 

</body>

</html>

 

*****디버깅하는법!!

->그 줄에 Breaking Point 걸고 실행한다음 디버깅모드로 보시겠습니까 yes누른 후

F5누르면 그 메소드 안에 들어가고 F6눌러서 다음줄로 이동.

null값이 있나 확인가능

 

 

**커넥션 풀로 JSP와 데이터베이스 연동

-DBCP 기법

DBCP : 접속인원이 많은 웹 페이지에서 데이터베이스의 효율성과 속도를 높이기 위해서 사용

JNDI :

 

리소스 등록 -> Servers -> server.xml 의 맨 마지막 context안에 생성

name = "jdbc/oracle"

 

--BoardDAO

 

//DBCP방식으로 Connection객체 구하기

public Connection getConnection() {

DataSource ds = null;

try {

Context ctx = new InitialContext();

ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");

return ds.getConnection(); //data소스에 있는 getConnection

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//글목록 가져오기

public List<Board> listBoard(){

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

List<Board> list = null;

 

String sql = "select * from board order by seq desc";

try {

conn = getConnection();

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();//질의된 결과를 rs에 담음

list = new ArrayList<Board>();

//row 하나 -> if

//row 여러개 -> while

while(rs.next()) { //데이터 로우들을 보드객체에 하나하나씩 담아서 배열 출력

Board board = new Board();

board.setSeq(rs.getInt("seq"));

board.setTitle(rs.getString("title"));

board.setWriter(rs.getString("writer"));

board.setContents(rs.getString("contents"));

board.setRegdate(rs.getString("regdate"));

board.setHitcount(rs.getInt("hitcount"));

list.add(board);

}

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

 

--insertAction.jsp

<%

BoardDAO dao = BoardDAO.getInstance();

int re = dao.insert(board);

if(re == 1){

response.sendRedirect("list.jsp");

}else{

out.println("실패");

}

%>

 

--list.jsp

<%@page import="kosta.bean.Board"%>

<%@page import="java.util.List"%>

<%@page import="kosta.bean.BoardDAO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

   

<%

BoardDAO dao = BoardDAO.getInstance();

List<Board> list = dao.listBoard();

%>

<!DOCTYPE html>

 

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<a href = "insert_form.jsp">글쓰기</a>

<table border = "1">

<tr>

<td>글번호</td>

<td>글제목</td>

<td>작성자</td>

<td>작성일자</td>

<td>조회수</td>

</tr>

<%

for(int i=0; i<list.size();i++){

Board board = list.get(i);

%>

<tr>

<td><%= board.getSeq() %></td>

                        <td><a href = "detail.jsp?seq=<%= board.getSeq() %>"><%= board.getTitle() %></a></td>

 

<td><%= board.getWriter() %></td>

<td><%= board.getRegdate() %></td>

<td><%= board.getHitcount() %></td>

</tr>

<% } %>

</table>

</body>

</html>

 

 

 

 

--detail.jsp

<%@page import="kosta.bean.Board"%>

<%@page import="kosta.bean.BoardDAO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

int seq = 1;

if(request.getParameter("seq")!=null){

seq = Integer.parseInt(request.getParameter("seq"));

}

BoardDAO dao = BoardDAO.getInstance(); //객체생성

Board board = dao.detailBoard(seq);

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<ul>

<li><%=board.getSeq() %></li>

<li><%=board.getTitle() %></li>

<li><%=board.getWriter() %></li>

<li><%=board.getContents() %></li>

<li><%=board.getHitcount() %></li>

</ul>

</body>

</html>

 

--BoardDAO.java

public Board detailBoard(int seq) {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = "select * from board where seq=?";

Board board = new Board();

try {

conn = getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, seq);

rs = pstmt.executeQuery();

if(rs.next()) {

board.setSeq(rs.getInt("seq"));

board.setTitle(rs.getString("title"));

board.setWriter(rs.getString("writer"));

board.setContents(rs.getString("contents"));

board.setRegdate(rs.getString("regdate"));

board.setHitcount(rs.getInt("hitcount"));

}

} catch (Exception e) {

e.printStackTrace();

}

return board;

}

---주말 MISSION (CRUD완성)

<a href = "updateForm.jsp?seq=<%=board.getSeq() %>">글수정</a>

<a href = "delete.jsp?Seq=<%=board.getSeq() %>">글삭제</a>

 

728x90

+ Recent posts