[spring] spring 정리

Dawon Ruby Choi·2023년 11월 12일
  1. webapp아래에 대문 (index.jsp) 파일 만들기
    -필요에 따라 이미지에 넘어갈 경로 지정하기
<a href="${ pageContext.servletContext.contextPath }/home.do"><img src="resources/image/spring.png"></a>
  1. url 요청이 들어왔으니 url을 받아줄 web.xml에서 url이 맞는지 검사해줌
    (그 url이 만일 맞다면 DispatcherServlet이 그 url에 해당하는 controller를 찾아줌)

-url-pattern안에 *.do로 적어주면 ~.do로 끝나는 url 실행시켜줌

<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
  1. home.do가 실행되면 HomeController에서 생성해놓은 메소드가 실행되게 만들고 싶음
  • value안에 home.do 로 매핑 설정(DispatcherServlet이이 handllerMapping과 함께 실행시켜야할 것을 찾을 수 있음)
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = ⭐"/home.do", method = RequestMethod.GET)
  1. home.jsp 생성
  • loginView.me로 넘어가는 onclick 생성 (url 요청)
<button class="btn btn-primary btn-lg" type="button" onclick="location.href='${ contextPath }/loginView.me'">SIGN IN</button>
  1. web.xml로 돌아가 .me를 처리해줄 코드 작성
	<servlet>
		<servlet-name>memberServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> //💡실행될 클래스! (spring.io document 확인)
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param> //💡viewResolver
	</servlet>
	<servlet-mapping>
		<servlet-name>memberServlet</servlet-name>
		<url-pattern>*.me</url-pattern>
	</servlet-mapping>
  ----------------------------------------------------------------------------------------------------------------------------  
    ⭐<servlet-name>memberServlet</servlet-name> 동일 해야함!!
    
    
  1. package com.kh.meatpizza.member.controller 패키지에 MemberController 클래스 생성 후 RequestMapping안에 매핑할 주소 쓰기
    (value를 안써도 기본적으로 갖고온다고 여기기 때문에 굳이 안적어도 됨)
import org.springframework.web.bind.annotation.RequestMapping;

public class MemberController {
	
	@RequestMapping("loginView.me")
	public String moveToLoginView() {
		return "login";
	}
}
  1. controller 역할의 클래스 객체 생성 (2가지 방법)

1) @Controller를 이용한 객체 생성

@Controller
public class HomeController {

2) bean 태그를 이용한 객체 생성

  1. views에 member 폴더 생성후 login.jsp 생성
    -이 때 미리 login.me로 넘어가게 form action 태그 생성
<body class="text-center">
	<main class="form-signin w-100 m-auto"><form action="${ contextPath }/login.me" method="post">
  1. viewResolver가 앞에 "/WEB-INF/views를 붙이니까 return을 할때 앞에 member라는 폴더명 까지 붙여주기!
@Controller
public class MemberController {
	
	@RequestMapping("loginView.me")
	public String moveToLoginView() {
		return "member/login";
	}
}
  1. 매번 member 경로를 붙일 수 없으니 member전용으로 쓰는 viewResolve 만들어주기
    ① appServlet안에 member-context.xml 생성

② 선택 하지 않고 바로 finish

③ servlet-context내용 그대로 복사하되,
일부 수정

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/🍒beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- 어노테이션 설정 방식 사용 -->
	<mvc:annotation-driven />

	<!-- 정적인 데이터 파일들의 위치 매핑, 작은 resources -->
	<mvc:resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/🍒member/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 등록된 bean들의 annotation을 활성화 -->
	<context:component-scan base-package="com.kh.meatPizza" />

</beans>

💡bean은 객체를 만들어주는 태그
💡beans를 대표로 xml로 지정했기 때문에 beans: beans 이렇게 두 번 안써도 됨
🍒member를 안쓰려고 생성한 것이기 때문에 views/member/ 경로 지정해주기

④ web.xml로 돌아가 servlet-context였던 것을 member-context로 변경해주기

<param-value>/WEB-INF/spring/appServlet/member-context.xml</param-value>

⑤ return login으로 재변경

@RequestMapping("loginView.me")
	public String moveToLoginView() {
		return "login";
  1. MemgberController로 돌아가 login 메서드 생성
@RequestMapping("loginView.me")
	public String login() {
		return null;
	}
  1. 파라미터 전송 받는 방법
    ① HttpServletRequest를 통해 전송 받기(jsp servlet 방식)
@RequestMapping("login.me")
	public String login(HttpServletRequest request) {
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		
		System.out.println("id1 : " + id);
		System.out.println("pwd1 : " + pwd);
		return null;

② @RequestParam 어노테이션 방식
스프링에서 조금 더 간단히 파라미터를 받아올 수 있는 @RequestParam 제공

  • value : view에서 받아 올 파라미터 이름이 들어가는 곳 @RequestParam 속성이 하나 뿐이라면 value 생략 가능

  • defaultValue : 값이 null이거나 들어오지 않았을 때 기본적으로 들어갈 데이터를 지정하는 속성
    데이터가 들어온 경우에는 defaultValue에 설정된 값이 들어가지 않음

  • required : 기본 값은 true, 지정한 파라미터가 꼭 필요한(필수적인) 변수인지 설정하는 속성
    만일 해당 파라미터가 없어도 된다, 혹은 없을 수도 있다라고 한다면 false 값을 주어 해당 자료형의 기본값을 받아옴

@RequestMapping("login.me")
	public String login(@RequestParam(value="id", defaultValue="hello") String userId,
						@RequestParam(value="pwd", defaultValue="world") String userPwd,
						@RequestParam(value="test", required=false) String test){
		System.out.println("id2 : " + userId);
		System.out.println("pwd2 : " + userPwd);
		System.out.println(test);
		return null;
	}

넘겨받을 인자가 너무 많을 떄 사용 좋음(mode Attribute) 단, getter setter가없으면 사용할 수 없음

③ RequestParam 생략 (jsp의 name 파라미터명이랑 변수값이 같아야지 생략 가능)

@RequestMapping("login.me")
	public String login(String id, String pwd){
		System.out.println("id2 : " + id);
		System.out.println("pwd2 : " + pwd);
		return null;
	}

④ lombok을 이용한 getter / setter
4-1) member 클래스 생성

package com.kh.meatpizza.member.model.vo;

import java.sql.Date;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Member { 
	private String id;
	private String pwd;
	private String name;
	private String nickName;
	private String email;
	private String gender;
	private int age;
	private String phone;
	private String address;
	private Date enrollDate;
	private Date updateDate;
	private String status;
	private String isAdmin;
}

4-2) lombok 설치

4-3) @ModelAttribute 방식 (get / set 방식으로 id/pwd 불러오기, 파라미터명과 setter명이 같으면 자동 매핑)

@RequestMapping("login.me")
	public String login(@ModelAttribute Member m){
		System.out.println("id3 : " + m.getId());
		System.out.println("pwd3 : " + m.getPwd());
		return null;
	}

⑤ @ModelAttribute 생략

@RequestMapping("login.me")
	public String login(Member m){
		System.out.println("id5 : " + m.getId());
		System.out.println("pwd5 : " + m.getPwd());
		return null;
	}
}
profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글