반응형
pom.xml 수정
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
servlet-context.xml
<context:component-scan base-package="edu.springboard.filter" />
package edu.springboard.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Order(1) //여러개의 필터 중 실행 순서 지정
@WebFilter({"/board/writeOk.do","/join.do"})
//해당 어노테이션으로 자동으로 filter 적용 web.xml 작업 없음
@Component
public class ContentFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//경로 지정시 하나의 가상 경로에 대한 get,post를 구분할 수 없으므로
//하나의 가상경로에서 post만 필터를 적용할 수 없다
String title = request.getParameter("title");
title = title.replaceAll("<", "<");
title = title.replaceAll(">", ">");
request.setAttribute("title", title);
System.out.println("Filter request title =>" + title);
String content = request.getParameter("content");
content = content.replaceAll("<", "<");
content = content.replaceAll(">", ">");
content = content.replaceAll("\n", "<br>");
request.setAttribute("content", content);
System.out.println("Filter request content =>" + content);
chain.doFilter(request, response); //다음 요청으로 전달
}
@Override
public void destroy() {
}
}
@WebFilter("/board/**") //단일 경로 매핑
@WebFilter(urlPatterns = "/board/**") //단일 경로 매핑
@WebFilter(urlPatterns = "/board/**","/free/**") //여러 경로 매핑
init
- 설명: 필터가 처음 생성될 때 단 한 번만 호출됩니다.
- 주요 목적:
- 초기화 작업 수행.
- 설정값 읽기 또는 리소스 할당 등 초기 설정.
- FilterConfig 객체를 통해 서블릿 컨테이너의 설정 정보를 가져올 수 있음.
- 특징:
- 필터 객체는 서블릿 컨테이너에서 인스턴스화되며, 필터의 생애 주기 동안 이 메서드는 단 한 번 실행됩니다.
doFilter
- 설명: 클라이언트 요청이 필터를 통과할 때마다 호출됩니다.
- 주요 목적:
- 요청(request) 또는 응답(response) 가공.
- 요청 처리 전/후의 추가 로직 실행.
- 필터 체인(FilterChain)을 통해 다음 필터 또는 서블릿으로 요청 전달.
- 특징:
- HTTP 메서드(GET, POST 등)에 따라 별도로 동작하도록 설정할 수 없습니다.
- 하나의 경로에 대해서 모든 HTTP 메서드에 필터가 적용됩니다.
- 특정 메서드에 대해 필터를 적용하려면 **HttpServletRequest의 getMethod()**를 사용해 조건문으로 처리해야 합니다.
destroy
- 설명: 필터 객체가 소멸될 때 호출됩니다.
- 주요 목적:
- 리소스 해제 또는 정리 작업 수행.
- 데이터베이스 연결 종료, 파일 스트림 닫기 등.
- 특징:
- 서블릿 컨테이너가 종료되거나 필터가 제거될 때 호출됩니다.
@RequestMapping(value="/board/writeOk.do", method = RequestMethod.POST)
public String write(NoticeVO noticeVO,HttpServletRequest request) {
HttpSession session = request.getSession();
noticeVO.setUno(((UserVO)session.getAttribute("loginUser")).getUno());
noticeVO.setTitle((String)request.getAttribute("title"));
noticeVO.setContent((String)request.getAttribute("content"));
int result = noticeService.insert(noticeVO);
if(result > 0) {
System.out.println("글등록완료");
/* int nno = noticeService.selectLast(); */
System.out.println("nno:"+noticeVO.getNno());
return "redirect:view.do?nno="+noticeVO.getNno();
}else {
System.out.println("글등록실패");
return "redirect:write.do";
}
}
반응형
'Spring' 카테고리의 다른 글
[Spring] 스케줄러(Scheduler),시큐리티(Security) (1) | 2024.12.04 |
---|---|
[Spring] 인터셉터(interceptor) (0) | 2024.12.02 |
[Spring] 파일 업로드 (0) | 2024.12.01 |
[Spring] AJAX 여러건의 데이터 받기 (0) | 2024.11.30 |
[Spring] AJAX 한 건의 데이터 받기 (1) | 2024.11.29 |