공부일지
231220 (Spring)
CD가참둥그렇다
2023. 12. 20. 17:41
스프링 장점
- IoC (Inversion of Control) :제어반전
- 객체 생성을 개발자가 하지 않고 스프링이 해준다.
- 스프링 컨테이너가 관리를 한다.
- DI (Dependency Injection) :
- 생성된 객체의 주소를 외부에서 주입시켜주는 것
- 변수 선언 시 어노테이션을 추가하여 객체 주소를 가져온다.
- @Autowired A a;
클래스를 만들 때 어노테이션을 만들어 용도를 지정한다.
스프링 프로젝트 생성
- 스프링 프로젝트를 생성한다.
- 메이븐 새로고침을 통해 디펜던시 파일을 새로고침한다.
- 서버를 만들어준다.
스프링에서 서블릿
- 서블릿 매핑마다 메소드를 만들어서 관리한다.
- 서블릿에서 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을 가지는 메소드를 만들어서 관리해야 한다.
- 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"; }
- 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 태그의 값들을 접근하는 방법
- 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";
}
- @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";
}
- 데이터객체(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";
}