60. Spring(3)

sumin·2023년 10월 4일
0

아카데미

목록 보기
61/82
post-thumbnail

ViewResolver 도움 없이 경로 만들기


servlet-context.xml에서 viewResolver 부분을 삭제한다.
controller을 만들고

아래와 같이 viewResolver가 만들어 주었던 prefix와 suffix 부분을 다 적어 준다.

Parameter 받을때 한글 처리

JSP 에서 filter 클래스에서 컨트롤러가 실행되기 이전에 처리되는 부분에서 request 인토딩을 하였다. 이부분을 web.xml에 추가한다.



web.xml에 filer 태그를 추가해 준다.



forceEncoding 은 웹 어플리케이션에서 클라이언트와 서버간의 문자 인코딩을 강제로 설정하거나 지정하는데 사용된다. 인코딩에 관련해서 문자깨짐, 보안문제, 검색 밑 분석 문제가 발생할 수 있는데
문자깨짐은 클라이언트와 서버 간에 서로 다른 문자 인코딩이 사용되는 경우, 특수 문자나 다국어 문자가 포함된 경우 문자가 꺠질수도 있다.
보안 문제는 인코딩과 관련 취약점을 악용한 공격이 발생할 수 있다.
검색 및 문석 문제는 텍스트 데이터를 저장하소 검색할때 올바른 문자 인코딩을 사용하지 않으면 검색 및 분석문제가 발생할 수 있다.


이런 문제를 해결 하고자 사용된다. 전달되는 데이터의 문자 인코딩을 일관되게 설정하는데 도움을 준다. 인코딩을 강제로 설정하는데 사용될수 있으며 이를 통해 문자열 테이터의 안정성과 일관성을 유지할 수 있다.
  false로 설정되어 있으면 문자 인코딩을 강제로 하지 않는다는 것이다. 문자 인코딩을 강제로 변경하지 않는 것은 웹 애플리케이션에서 사용되는 문자 데이터의 인코딩을 클라이언트 또는 서버에서 자동으로 처리하도록 하려는 경우에 사용될 수 있다. 이런 설정은 데이터가 전달될 때 원래의 문자 인코딩이 그대로 유지되며 클라이언트 또는 서버에서 추가적인 문자 인코딩처리가 필요하지 않는다.

Redirect 하기

redirect 하는 방법
1. 스프링이 지원하는 방식
  return "redirect:이동경로";
  public String add(){
    return "redirect:/list.do";
   }
2. 자바스크립트 코드를 만든다.
  location.href='이동경로';
  public String add(HTTPServletResponse response){
   PrintWriter out = response.getWriter();
   out.println("<script");
   out.println("location.href='이동경로'");
   out.println("<script'>'");
  } -주로 alert창을 이용할때 쓴다.


redirect 이동 경로
1. 반드시 URLMapping 값을 작성한다.
2. 이동할 JSP 경로를 작성할 수 없다.

//@RequestMapping(value = "/faq/add.do", method = RequestMethod.POST)
  public String add(HttpServletRequest reqeust) {
    String title = reqeust.getParameter("title");
    String content = reqeust.getParameter("content");
    // title이 빈 문자열이면 add 실패로 가정(DB 처리할 때 insert 성공은 1, 실패는 0이다.)
    int addResult = title.isEmpty() ? 0 : 1;
    
    // addResult를 가지고 faq 목록 보기로 이동(리다이렉트에서 모델에 담아서 전달하면 안된다. )
        
    return "redirect:/faq/list.do?addResult=" + addResult;  //jsp가 오면 작동을 안함(redirect하면)
  }
  
  //@RequestMapping(value="/faq/list.do", method=RequestMethod.GET)
  public String list(@RequestParam(value="addResult", required=false) String addResult, Model model) { //@RequestParam은 우리가 파싱하지 않아도 알아서 변환해 준다. 
    
    model.addAttribute("addResult", addResult);  //1 or 0을 전달한다. 
 
    return "faq/list";  //WEB-INF/views/faq/list.jsp
  }
  
  
  @RequestMapping(value = "/faq/add.do", method = RequestMethod.POST)
  public String add2(HttpServletRequest request
                   , RedirectAttributes redirectAttributes) { // redirect 상황에서 값을 전달할 때 사용한다. 
    //요철 파라미터 
    String title = request.getParameter("title");
    
    //title이 빈문자열이면 add 실패 
    int addResult = title.isEmpty() ? 0 : 1 ;
    
    // faq 목록 보기로 redirect 할 때 addResult를 "flash attribute"로 곧바로 전달하기 
    redirectAttributes.addFlashAttribute("addResult", addResult);
    
    // faq 목록보기로 redirect
    return "redirect:/faq/list.do";
  }
  
  @RequestMapping(value="/faq/list.do", method=RequestMethod.GET)
  public String list2() {
    return "faq/list";
  }

DI


1. Dependency Injection
2. Spring Container에 저장된 객체를 가져오는 방식이다.
3. 주요 Annotation
  1) @inject
   (1) javax.inject.Inject
   (2) 타입이 일치하는 객체를 찾아서 가져온다. 없으면 오류가 발생한다.
   (3) 동일한 타입의 객체가 2개 이상 있다면 이름이 일치하는 객체를 가져온다.
2) @resource
  (1) javax.annotation.Resource
  (2) javax-annotation-api dependency를 pom.xml 에 추가해야 사용할 수 있다.

   (3) 이름이 일치하는 객체를 찾아서 가져온다. 없으면 오류가 발생한다.
  3) @AutoWired
   (1) org.springframework.beans.factory.annotation.Autowired
   (2) @Inject 기반의 Spring Annotation이다. (타입 기반)
   (3) 객체 이름을 기준으로 가져올 수 있도록 @Qualifier(org.springframework.beans.factory.annotation.Qualifier)를 사용 할 수 있다.

BoardService DI 처리 방법


1. BoardService 타입의 BoardServiceImpl 객체를 Spring Container에 넣는다. (아래 3가지 방법 중 하나 사용)
  1) <"bean">태그 : /WEB-INF/spring/root-context.xml
  2) @Configuration + @Bean :com.gdu.app05.config.AppConfig.java
  3) @Component
2. @Autowired 를 이용해서 Spring Container에서 BoardService 타입의 객체를 가져온다.
  1) 필드에 주입하기
  2) 생성자에 주입하기
  3) setter 형식의 메소드에 주입하기


profile
백엔드 준비생의 막 블로그

0개의 댓글