공부일지

231220 (Spring)

CD가참둥그렇다 2023. 12. 20. 17:41

스프링 장점

  1. IoC (Inversion of Control) :제어반전
    • 객체 생성을 개발자가 하지 않고 스프링이 해준다.
    • 스프링 컨테이너가 관리를 한다.
  2. DI (Dependency Injection) :
    • 생성된 객체의 주소를 외부에서 주입시켜주는 것
    • 변수 선언 시 어노테이션을 추가하여 객체 주소를 가져온다.
    • @Autowired A a;

클래스를 만들 때 어노테이션을 만들어 용도를 지정한다.

스프링 프로젝트 생성

  1. 스프링 프로젝트를 생성한다.
  2. 메이븐 새로고침을 통해 디펜던시 파일을 새로고침한다.
  3. 서버를 만들어준다.

스프링에서 서블릿

  • 서블릿 매핑마다 메소드를 만들어서 관리한다.
  • 서블릿에서 jsp로 데이터를 전달할 때 Model에 담아서 보낸다.
    • addAttribute로 넣어준다.
  • web.xml에서 서블릿 매핑을 받을 때 url 패턴을 인식하고, 어떤 서블릿으로 동작할지 name으로 지정한다.
  • 서블릿 클래스를 서블릿 태그로 관리해야 한다.
<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

servlet-context의 역할

  • controller 어노테이션을 통합 관리한다.
  • Beans Graph로 어떤 컨트롤러가 있는지 확인할 수 있다.

스프링에서 필터 처리

<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>false</param-value>
		</init-param>
	</filter-mapping>

스프링에서 화면응답과 데이터 출력 방법

  • 기본 방법은 @RequestMapping을 가지는 메소드를 만들어서 관리해야 한다.
  1. Model객체 사용
    • 일반적으로 사용되는 방식이다.
    • 파라메터로 Model을 받아준다.
    • model.addAttribute로 데이터를 넘겨줄 수 있다.
    • return에 해당하는 내용은 servlet-context.xml 파일에 지정된 위치에 있는 파일 이름을 작성한다.
    @RequestMapping("/first")
    	public String first(Model model) {
    		
    		model.addAttribute("today", new SimpleDateFormat("yyyy년 MM월 dd일").format(new Date()));
    		return "index";
    	}
    
  2. ModelAndView객체 사용
    • ModelAndView 객체를 초기화한다.
    • mv 객체에 setViewName으로 servlet-context.xml 파일에 지정된 위치에 있는 파일 이름을 작성한다.
    • mv.addObject를 이용하여 데이터를 넘겨줄 수 있다.
    • mv를 반환타입으로 한다.
    @RequestMapping("/second")
    	public ModelAndView second() {
    		ModelAndView mv = new ModelAndView();
    		mv.setViewName("index");
    		mv.addObject("today", new SimpleDateFormat("hh시 mm분 ss초").format(new Date()));  
    		
    		return mv;
    	}
    

jsp에서 서블릿 매핑으로 url 요청 방법

  • 루트에서부터의 url을 사용하기 위해 jstl의 url태그를 사용하여 작성해준다.
<a href="<c:url value='/'/>">홈으로</a>

form 태그의 값들을 접근하는 방법

  1. HttpServletRequest를 사용한 접근 방법
    • 파라메터로 HttpServletRequest와 Model을 받아준다.
    • req.getParameter로 값을 받아오고 model에 값을 넣어서 다음 뷰로 데이터를 전달한다.
@RequestMapping("/joinRequest")
	public String join(HttpServletRequest req, Model model) {
		model.addAttribute("name", req.getParameter("name"));
		model.addAttribute("gender", req.getParameter("gender"));
		model.addAttribute("email", req.getParameter("email"));
		model.addAttribute("age", Integer.valueOf(req.getParameter("age")));
		model.addAttribute("method", "HttpServletRequest방식");
		return "member/info";
	}
  1. @RequestParam을 사용한 접근 방법
    • 파라이터에 @RequestParam를 사용하고 String name을 받아준다고 하고 사용할 수 있다.
    • 요청에 들어온 파라미터가 파라미터에 선언된 파라미터의 이름과 같다면 자동으로 연결된다.
    • 파라미터로 넘어온 이름과 다른 이름으로 선언하고 사용하고 싶은 경우 @RequestParam("email")처럼 어노테이션 안에 원래 파라미터 이름을 적고 메소드 파라미터에 원하는 이름을 작성할 수 있다.
    • 파라미터로 int 등으로 사용 가능하다. 자동으로 파싱 처리를 해주게 된다.
@RequestMapping("/joinParam")
	public String join(Model model, @RequestParam String name, String gender, @RequestParam("email") String mail, int age) {
		model.addAttribute("method", "@RequestParam 방식");
		model.addAttribute("name", name);
		model.addAttribute("gender", gender);
		model.addAttribute("email", mail);
		model.addAttribute("age", age);
		
		return "member/info";
	}
  1. 데이터객체(DTO, VO)를 사용한 접근 방법
  • VO파일을 만들고 필드와 게터세터를 설정한다.
    • 생성자를 추가할 경우 오류가 발생하게 된다.
  • 메소드의 파라미터에 데이터 객체를 넣어준다.
  • 모델에 데이터 객체를 그대로 넘겨준다.
  • jsp에서 el코드로 {vo.data}의 식으로 데이터를 사용해준다.
@RequestMapping("/joinData")
	public String join(Model model, MemberVO vo) {
		model.addAttribute("method", "DataObject 방식");
		model.addAttribute("vo", vo);
		
		return "member/info";
	}