HttpServeltRequest 객체의 빈 스코프에 대해 질문 드립니다.
304
28 câu hỏi đã được viết
안녕하세요! 스프링에 대한 기초 지식이 부족한 개발자 입니다.
프로젝트 개발 중 해결은 하였지만 이해가 가지 않아 질문 드립니다.
너무 궁금해서 강의를 시작하기도 전에 질문 먼저 드리는 점 죄송합니다..ㅠ
기존에 돌아가던 프로젝트를 이관하는 중에
client로부터 page라는 parameter가 request에 중복으로 들어오는 경우가 생겼습니다.
가장 좋은 방법은 하나를 빼고 request를 보내도록 수정하는 것이겠지만, 다른 부분에서도 쓰이는 util쪽 코드라 쉽게 건들이지 못해서 RequestWrapper를 사용하게 되었습니다.
public class RequestWrapper extends HttpServletRequestWrapper {
Map<String, Object> hashMap ;
public RequestWrapper ( HttpServletRequest req ) {
....
hashMap = new HashMap<String, Object>( req.getParameterMap );
}
이런 식으로 request로 들어온 parameter들을 받아서 중복된 page를 제거하고 hashMap에 넣은 후,
getParameterValues와 getParameter에서 저 hashMap에서 값을 꺼내오도록 변경하였습니다.
제가 이해가 안가는 부분은 아래와 같은 상황인데요..
특정 request 를 받아 controller를 거쳐 xxx.jsp를 리턴 한 후 ( A과정 ) 해당 jsp안에서
jstl의 <c:import>와 <c:param>을 통해 다시 한번 임의의 다른 controller를 호출해서 값을 받아오는 ( B과정 ) 부분이 있었습니다.
그런데 wrapper를 적용하기 전에는 정상작동하던 것이 wrapper를 사용하기 시작하니까
<c:param>으로 넘겨주는 값들은 넘어가지가 않고 그 전에 호출되던 A과정의 request parameter들이 넘어가더라구요..
request객체는 scope가 request이니까 A과정에서 jsp를 return하고 나면 사라지고
B과정에서 jstl 태그를 이용해 다시 특정 컨트롤러를 호출하면 새로운 request 객체가 생성되서 <c:param>들이 넘어가야 맞는 것 아닌가요...?
getParameter를 통해 <c:param>으로 보내준 값을들 찍어봐도 전부 null값으로 나왔습니다..
제가 추측하는 이유는
1) jsp안에서 jstl로 다른 컨트롤러 호출 시 request의 scope이 종료되지 않은 경우
2) request는 A과정과 B과정 모두 각각 생성되고 사라지는데, wrapper의 생성자에서 hashMap을 세팅했기 떄문에 이후에는 wrapper 객체가 새로 생성되는 경우가 없어 hashMap 값이 바뀌지 않는 경우
2)번이 이유인 경우에 그럼 wrapper의 scope도 prototype이나 request로 변경해줘야 할까요..??
상태값을 가지고 있는 class 의 경우 싱글톤으로 관리하면 안된다고 배우긴 했는데 ... requestWapper이니 request별로 뭔가 초기화 되거나 새로 만들어질 것이라고 생각을 했습니다..ㅠ
제가 스프링 지식이 부족해서 질문을 너무 복잡하게 작성한 것 같습니다..
혹시 위 말고 다른 이유가 있는 걸까요??..
답변 기다리고 있겠습니다...ㅠ 감사합니다!
Câu trả lời 0
BeanFactory와 ApplicationContext 중 사용하고 싶은 컨테이너를 설정 할 수 있나요?
0
381
1
프로젝트 생성에 관련한 질문
0
376
1
안녕하세요 강의 내용을 듣다가 궁금점이 생겨 글을 남기게 되었습니다.
0
371
1
PropertyEditor non thread-safe 한 이유
0
491
1
빈의 초기화 시점이 궁금합니다.
0
393
1
이 강의 예제소스 없나요?
0
345
1
릴로딩 기능에 대해
0
404
1
Bean 을 특정 Application...Event 발생 후, 등록하는 방법이 궁금합니다
0
612
3
IoC/DI와 POJO의 관계
1
749
2
기선님 RetentionPolicy에 대해서 질문이 있습니다.
0
291
1
안녕하세요 기선님!
3
486
3
비동기적으로 실행할때
0
314
2
"Prototype/프록시"로 설정했는데 동일한 객체로 나옵니다
0
530
4
@Autowired 로 가져오는 Bean은 ?
2
280
1
Type-Safety 의미
0
538
1
Null Point
0
318
1
WebDataBinder를 특별히 쓰는 이유가 있나요?
0
384
1
안녕하세요?
0
336
2
애노테이션이 없습니다(?)
0
279
3
코드 중 변수 앞에 적는 것이 무엇인지 알고 싶습니다.
0
295
2
강의 하시면서 사용하는 resolving 이란 단어는 어떤 의미인가요?
1
1499
1
IOC컨테이너관련 질문입니다
0
245
3
인터페이스가 있는 경우 인터페이스 타입으로 주입하는 추가 질문입니다.
0
259
1
백기선님 , 강좌 순서 때문에 고민드립니다.
0
462
4

