2018-5-29 포비 컨트롤러강의

@Controller
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/form")
    public String form() {
        return "/user/form";
    }

    @PostMapping("")
    public String create(User usr) {
        userRepository.save(usr);
        return "redirect:/users";
    }

    @GetMapping("")
    public String list(Model model) {
        model.addAttribute("users", userRepository.findAll());
        return "user/list";
    }

  • url은 같지만 HTTP메서드가 다르기때문에 서버상에서 구분을 할 수 있다.
  • 클라이언트에서 어떻게 요청을 보내느냐에 따라서 서버가 분기처리를 할 수 있다.
  • path에 대한 중복은 있을 수 있지만, HTTP메서드에 대한 중복까지는 허용을 해서는 안된다.
  • <a href> 태그를 통해서 요청을 보내면 무조건 GET방식으로 전달이 되어있다.
  • post으로 보내는 방법은 form태그를 이용해서 거기서 methods=”post”로 하는 방식으로만 post메서드를 보낼 수 있다.
  • form태그에서 GET으로 전송을 누르면 url상에 정보가 노출이 된다. 하지만 post방식으로 보내면 url상에 정보가 가려지고 보안이 get방식보다 더 좋다.
  • GET방식은 key-value형태로 전달이 되서 url에 노출이 되지만 이 부분은 http의 헤더영역으로 전달이 된다.
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/styles.css" rel="stylesheet">
<script src="webjars/bootstrap/3.3.7-1/css/bootstrap.min.css"></script>
  1. 서버에 요청을 보내는 순간 우선 html부터 내려받아 온다.
  2. 브라우저는 index.html을 읽어오면서 css타입을 보고서 GET방식으로 서버에 다시 요청을 한다.

classpath?

  • 프로덕션 자바 코드는 src/main/java/에 들어간다.
  • 테스트코드는 src/test/java/에 들어간다.
  • 그 외의 자원들은 src/main/resources/에 들어감.
  • 기본적인 classpath의 루트는 자바의 루트는 java/의 하위가 루트, 그외의 자원은 resources/ 하위디렉토리가 루트이다.
  • 상대경로는 url을 기준으로 잡히는 것이다.
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/styles.css" rel="stylesheet">
  • 이것은 상대경로가 아니라 절대경로를 통해서 접근을 한것이다.
  • 일반적으로 상대경로보다는 절대경로롤 접근을 하는것이 편하다.
@PostMapping("/users")
    public String create(User usr) {
        userRepository.save(usr);
        return "redirect:/users";
    }
  • redirect는 url로 요청을 위임을 하는것인데, 만약에 /users에 해당을 하는 GetMapping이 없다면 에러가 발생을 한다.

  • 같은 패키지 내에 있어야 컨트롤러 어노테이션이 동작이 된다.

소켓에 대해서 공부를 해보기 :)

Written on May 29, 2018