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서버
-
DriverManager (JDBC 드라이버 로드)
-
Connect ion (데이터베이스와 연결)
-
Statement (SQL문 실행)
-
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>
'FULLSTACK > SERVLET&JSP' 카테고리의 다른 글
SERVLET&JSP 6차시 - MVC모델(CRUD) (0) | 2020.11.13 |
---|---|
SERVLET&JSP 5차시 - 쿠키, 세션 (0) | 2020.11.13 |
SERVLET&JSP 4차시 - memberCRUD 복습, 동적쿼리, 익스프레션언어, JSTL(EL태그) (0) | 2020.11.13 |
SERVLET&JSP 3차시 - CRUD(JSP, MYBATIS) (0) | 2020.11.13 |
SERVLET&JSP 1차시 - 기본개념 & 회원가입폼미션 (0) | 2020.11.13 |