본문 바로가기

JSP&JSTL 수업 정리

JSP/JSTL 2일차.

web.xml 설정

display-name은 프로젝트명 반드시 일치해야함.

 

welcom-file-list

 

context-param

- 인코딩 설정 반드시 들어가야함.

- log4j2 설정 : log 찍을때 log4j2.xml 을 따라 찍어줘

 

src-main-java : controller, service ,dao  / => java 

src-main-web-app : jsp 

화면 입장에서 / => webapp

 

log4j2.xml 설정

<Configuration status="INFO">
<Appenders> //로그가 출력되는 위치를 설정
	<Console name="Console" target="SYSTEM_OUT">
		<PatternLayout pattern="%d - %msg%n" />
	</Console>
</Appenders>
<Loggers>
	<Root level="INFO">
		<AppenderRef ref="Console" />
	</Root>
</Loggers>
</Configuration>

 


DB 설정

-- 2024-10-22

-- javaUser / mysql / javadb

-- 게시판 ( board )

●  bno ai pk 

●  title varchar(500) not null

●  writer varchar(100) not null

● content text

● regdate datetime default now()

● moddate datetime default now()

 

구문

create table board(

bno int auto_increment,

title varchar(500) not null,

writer varchar(100) not null,

content text,

regdate datetime default now(),

moddate datetime default now(),

primary key(bno))


웹 프로젝트시 용어

 

● 객체 

- VO(Value Object) : 단순한 객체의 타입을 표현하기 위한 객체

- DTO(Data Transfer Object)  : 계층간의 데이터를 교환하기 위한 객체

- DAO(Data Access OBject) : DB의 데이터에 접근하기 위한 객체 -- model

- ORM(Object Relational Mapping) : 객체를 DB에 맵핑 시키기위한 기술

● controller : servelt에서 처리하는 객체

화면 ↔ service

● service : controller 에서 받은 객체를 DB에 저장하기 좋은 형태로 나누어 주는 역할

controller ↔ dao 

● DAO :  db에 접근하기 위한 객체

dao ↔ db

● ORM : db에 맵핑 객체 - mybatis - mapper.xml 사용 

 

mapper.xml

namespace는 daoImpl <-> mapper를 연결하기위한 이름

sql별 id를 생성하여 id를 통해 daoImpl이 어떤 sql 구문을 실행하는지 인지 id는 중복불가

parameterType = 매개변수의 객체타입 (생략가능), resultType = 결과로 나가는 객체


보드 구현 ( 오늘은 게시글 추가, 리스트, 상세페이지 기능 구현 )

◉ 로그객체는 각 클래스에 하나씩 생성해야함. ( 컨트롤러, 서비스, 다오 )

미리 만들어둔 연결할 DB의 board 테이블의 인스턴스에 맞게 보드 클래스를 만들어서 구현.

● board 폴더를 만들어서 각 기능들이 작동하는 걸 보여줄 .jsp 파일 생성

컨트롤러를 만드는데 필요한 요소들
- jsp에서 받은 요청을 처리하고 그 결과를 다른 jsp로 보내는 역할을 하는 객체

- 응답할 jsp의 주소를 저장하는 변수

- service 구현 객체

다 선언해서 구성하고 get과 post를 service에서 처리하도록 설정.

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 실제 get post 요청처리
		log.info("log 객체 test");
		
		// request, response 객체의 인코딩 설정
		request.setCharacterEncoding("UTF-8"); // 요청객체
		response.setCharacterEncoding("UTF-8"); // 응답객체 
		// response는 jsp로 갈 응답 객체 => 화면을 생성해서 응답 => jsp 형식으로 ...
		// contentType="text/html; charset=UTF-8"
		response.setContentType("text/html; charset=UTF-8"); // html5 형식으로 보내라 
		
		// 경로 가져오기 /brd/register 
		String uri = request.getRequestURI();
		log.info(uri); // /brd/register
		
		String path = uri.substring(uri.lastIndexOf("/")+1);
		log.info(path);
		
		switch (path) {
		case "register":
			// 정보가 필요하다면... 정보를 DB에서 요청 request를 객체에 싣고 보내기 
			destPage ="/board/register.jsp";
			break;
		case "insert" :
			try {				
				log.info("insert case in~!!");
				// jsp 화면에서 보내온 파라미터 값을 저장 => Service 전송
				String title = request.getParameter("title");
				String writer = request.getParameter("writer");
				String content = request.getParameter("content");
				BoardVO bvo = new BoardVO(title, writer, content);
				log.info(">>>> bvo inesert 객체 >>>> {}", bvo);
				
				isOk = bsv.register(bvo);
				
				log.info(">>>> bvo insert >>>>" + ( isOk > 0 ? "성공":"실패") );
				// 처리 후 목적지
				destPage = "/index.jsp";
				
			} catch (Exception e) {
				log.info("insert error");
				e.printStackTrace();
			}
			break;		
		case "list":
			try {
				// 전체 리스트를 가지고 list.jsp로 전달
				List<BoardVO> list = bsv.getList();
				log.info(">>>> list >>>> {}", list);
				// request 객체에 파라미터로 값을 보내는 방법
				request.setAttribute("list", list);
				destPage = "/board/list.jsp";
				
			} catch (Exception e) {
				log.info("list error!!");
				e.printStackTrace();
			}
			break;
		case "detail":
			try {
				int bno = Integer.parseInt(request.getParameter("bno"));
				BoardVO bvo = bsv.getDetail(bno);
				log.info(">>>> detail bvo >> {}", bvo);
				
				request.setAttribute("bvo", bvo);
				destPage="/board/detail.jsp";
				
			} catch (Exception e) {
				log.info("detail error");
				e.printStackTrace();
			}
			
			
		}
		
		// 목적지 주소(destPage)로 데이터를 전달(RequestDispatcher)
		rdp = request.getRequestDispatcher(destPage);
		// 요청에 필요한 객체를 가지고 destPage에 적힌 경로로 이동
		rdp.forward(request, response);

	}

이런식으로 구현

 

● 구현한 컨트롤러의 메서드들을 서비스 => 다오로 연결

● 다오 임플먼츠에서 DB와 연결 => mybatis 사용하여 연결 (mybatisConfig, db연결클래스, mapper)

 

연결 객체

	// DB의 연결을 위한 객체
	private SqlSession sql;
	
	public BoardDAOImpl() {
		new DatabaseBuilder();
		sql = DatabaseBuilder.getFactory().openSession();
	}

 

연결한 메서드 구현

@Override
	public int insert(BoardVO bvo) {
		// mapper로 연결
		log.info(">>>> insert DAO in !!");
		// sql.insert(mapper의 namespace.id, 객체);
		// insert / update / delete 구문은 반드시 commit 필요 
		int isOk = sql.insert("BoardMapper.add", bvo);
		if(isOk > 0) {
			sql.commit();
		}	
		return isOk;
	}

	@Override
	public List<BoardVO> getList() {
		log.info(">>>> getList DAO in !!");
		
		return sql.selectList("BoardMapper.list");
	}

	@Override
	public BoardVO getDetail(int bno) {
		log.info(">>>> getDetail DAO in !!");	
		return sql.selectOne("BoardMapper.detail", bno);
	}

 

mapper의 namespace.id, 객체

insert / update / delete 구문은 반드시 commit 필요

 

- mybatisConfig

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/javadb" />
				<property name="username" value="javaUser" />
				<property name="password" value="mysql" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="mapper/boardMapper.xml" />
	</mappers>
</configuration>

 

- mapper

실제 SQL 구문은 mapper에서 사용.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="BoardMapper">
  <!-- namespace는 daoImpl <-> mapper를 연결하기위한 이름 -->
  <!-- sql별 id를 생성하여 id를 통해 daoImpl이 어떤 sql 구문을 실행하는지 인지 id는 중복불가 -->
  <!-- parameterType = 매개변수의 객체타입 (생략가능), resultType = 결과로 나가는 객체 -->  
  <!-- 실제 SQL 구문 사용 -->
  <insert id="add" parameterType="domain.BoardVO">
  	insert into board(title,writer,content)
  	values(#{title},#{writer},#{content})
  </insert>
  <select id="list" resultType="domain.BoardVO">
	select * from board order by bno desc  
  </select>
  
  <select id="detail" parameterType="int" resultType="domain.BoardVO">
  	select * from board where bno = #{bno}
  </select>
  
  </mapper>

 

 

 

 

 

 

 

'JSP&JSTL 수업 정리' 카테고리의 다른 글

JSP/JSTL 5일차.  (0) 2024.10.25
JSP/JSTL 4일차.  (0) 2024.10.24
JSP/JSTL 3일차.  (0) 2024.10.23
JSP/JSTL 1일차.  (0) 2024.10.21