#전송 메소드 종류
GET (R)
GET /board/10
======body=======
POST (C)
POST /board
======body=======
userno=10&title=qweqwe&contents=hello
PUT (U)
PUT /board/10
======body======
title=qweqwe&contents=world
DELETE (D)
DELETE /board/10
=======body======
# 보안(Spring Security)은 처리는 컨트롤러에서 처리하는것이 아니라 Access Control Layer(ACL)에서 처리한다.
=> ACL 은 컨틀롤러에 들어오기 전에 처리한다.
# 예외 처리: Runtime Exception
[GlobalExceptionHandler.java] : Runtime시 모든 예외처리를 담당하는 클래스
=> 예외 발생시 콘솔로 찍어주고, exception.jsp 페이지를 Client에게 보여준다.
@ControllerAdvice // 컨트롤러의 Exception 이기때문에 ControllerAdvice 어노테이션 붙여준다.
public class GlobalExceptionHandler {
// 모든 예외가 모여서 처리하는 메서드
@ExceptionHandler(Exception.class)
public void handleException(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
// 1. 로그 작업
System.out.println(e);
// 사과문 페이지로 전달(컨트롤러가 아니기때문에 직접 request를 받아서 dispatcher에 전달해야한다.)
request.setAttribute("error", e.toString());
request.getRequestDispatcher("/WEB-INF/views/error/exception.jsp").forward(request, response);
}
}
※ @ControllerAdvice 어노테이션을 스캔하기위해서 spring-servlet.xml 에서 스캔 설정을 해주어야한다.
<context:component-scan base-package="com.bitacademy.mysite.controller, com.bitacademy.mysite.exception" />
# MyBatis 설정
1) confiuration.xml (src/main/resources 폴더내에 만든다.)
(참고, src/main/java는 컴파일되서 올라가고 src/main/resources는 그냥 올라가기에 static파일들이 모여있다.)
: sql문이 작성되어있는 xml 파일이 mapper 되어 있는 파일
- typeAlias (클래스타입 별칭): 원래는 패키지명+클래스명 으로 전부 선언해야하는걸 별칭으로
간단하게 만듬
- sql문이 적혀있는 .xml파일 맵핑
2) user.xml
: user에 관련된 SQL문이 작성되어있다.
3) applicationContext.xml 에서
- Connection Pool 인 DataSource 빈 등록
=> driverClassName, url, username, password 가 property로 들어감
- MyBatis SqlSessionFactory 빈 등록
=> datatSource 빈 객체가 들어감
=> sql문이 들어가있는 파일 confiuration 이 들어감
- MyBatis SqlSession 빈 등록
=> 생성자로 sqlSessionFactory가 들어감
=> SqlSession 으로 insert, delete, update 등을 할 수 있다.
ex. [applicationContext.xml] 에서 설정함
<!-- Connection Pool DataSource Bean-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/webdb?characterEncoding=utf8&serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="369369" />
</bean>
<!-- MyBatis SqlSessionFactory Bean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/configuration.xml" />
</bean>
<!-- MyBatis SqlSessionTemplate Bean-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
# <![CDATA[ ]]>
=> sql문 쓸때 where 문 비교값(>, <) 에러를 방지
=> CDATA 안에는 sql문 데이터라는 것을 명시
<![CDATA[
insert into user
values(null, ?, ?, ?, ?, now())
]]>
# insert 된 데이터의 pk값을 구하고자 할때
<insert id="insert" parameterType="uservo">
<![CDATA[
insert into user
values(null, #{name }, #{email }, #{password }, #{gender }, now())
]]>
<!-- 마지막으로 들어간 데이터의 pk값을 가져온다. 여기서는 위에 쿼리문으로 들어간 데이터의 pk값을 가져온다.-->
<selectKey keyProperty="no" resultType="long" order="AFTER">
<![CDATA[
select last_insert_id()
]]>
</selectkey>
</insert>
# 게시판에 hello 라는 제목이 들어간 게시판을 찾고자할때
- #{keyword} 로 했을때 SQL문: select * from board where title like '"hello"'
=> ''안에 ""가 또 들어가는 오류를 범한다.
- ${keyword} 로 했을때 SQL문: select * from board where title like 'hello'
=> 데이터 값으로 치환되는 것을 볼 수있다.
따라서, 제목으로 게시판 검색할떄 '%#{keyword}%' 으로 #을 붙이면 치환이 안되고 ${} 을 붙여서 넣어줘야 치환된다.
<select id="find" parameterType="long" resultType="boardvo">
<![CDATA[
select * from board
where title like '%${keyword}%'
]]>
</select>
'비트교육센터[전문가반]' 카테고리의 다른 글
Spring MVC [비트교육센터] _ 복습04 _ Security (Interceptor + Annotation) (0) | 2021.04.24 |
---|---|
Spring MVC [비트교육센터] _ 복습04 _ API 전용 컨트롤러 (0) | 2021.04.24 |
Spring MVC [비트교육센터] _ 복습02 (0) | 2021.04.21 |
Spring MVC [비트교육센터] _ 복습01 (0) | 2021.04.21 |
JavaScript 복습02 (0) | 2021.03.23 |