<servlet>
<!-- 그냥 이름 정하기 -->
<servlet-name>dispatcher</servlet-name>
<!-- 사용할 클래스 -->
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 불러올 설정파일 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/todo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- DispatcherServlet 으로 보낼 url -->
<!-- http://localhost:8080/spring-mvc/으로 시작하는 모든 url이 DispatcherServlet으로 감 -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/spring-mvc/*</url-pattern>
</servlet-mapping>
http://localhost:8080/spring-mvc/login 으로 브라우저에서 요청
DispatcherServlet 에서 맞는 Controller를 찾아서 보냄
/login이니까 LoginController로
// MVC의 Controller (Handler)명시
@Controller
public class LoginController {
// 의존성 주입
@Autowired
LoginService service;
// // 어떤 url에 매핑할것인가.
// // 여기서는 http://localhost:8080/spring-mvc/login이 되겠다.
// @RequestMapping(value = "/login")
// // view page로 출력되는게 아닌 HTTP Response Body 에 직접 쓰여지게 됩니다.
// // 쉽게 말해서 지금은 return이 String이니까 어떤 페이지로 보내는게 아니고 String값 자체가 return 됨
// @ResponseBody
// public String sayHello() {
// return "hello world dummy";
// }
// method옵션으로 get, post 정할수있음
@RequestMapping(value = "/login", method = RequestMethod.GET)
// view page를 찾아서 보냄. 여기서는 login.jsp
public String showLoginRequest() {
return "login";
}
// @RequestParam: request.getParameter("name") 처럼 name 이름을 가진 parameter를 받아줌
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String handleLoginRequest(@RequestParam String name, @RequestParam String password, ModelMap model) {
if(!service.validateUser(name, password)) {
model.put("errorMessage", "Invalid Error!!");
return "login";
}
// ModelMap: model객체에 넣고 전달하면 view page에서 사용가능
model.put("name", name);
model.put("password", password);
return "welcome";
}
}
Service
@Service
public class LoginService {
public boolean validateUser(String name, String password) {
return name.equalsIgnoreCase("in28Minutes") && password.equals("dummy");
}
}
근데 login이라는 걸로는 login.jsp를 찾을수없음
/WEB-INF/views/login.jsp 이렇게 써줘야 찾음
그래서 ViewResolver에 설정을 해주면 댐. 여기서는 todo-servlet.xml 이 되겠음.
<!-- ViewResolver 설정 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
이러면 내가 login만 써주면 알아서 앞뒤에 연결시켜서 /WEB-INF/views/login.jsp를 찾음.
그래서 최종적으로 login.jsp가 브라우저에게 가서 브라우저에서 로그인페이지가 잘나옴