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 |