:필요한 라이브러리를 pom.xml에 정의해 놓으면 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 NW를 통해서 자동으로 다운
package com.oracle.mvc02;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HomeController {
//해당 컨트롤러의 메소드 실행시 콘솔에 정보 나타냄
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
</body>
</html>
<!-- 한글처리 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
logger.info() 값▼
INFO : com.oracle.mvc02.HomeController - Welcome home! The client locale is ko_KR.
: 파라미터 방식으로 메소드에 넣어주고 String 형태로 리턴
: 값을 넣을 때 addAttribute()사용
<HomeController.java>
@RequestMapping("/board/content")
public String content(Model model) {
System.out.println("content controller sysout board/content");
model.addAttribute("id", 30);
return "board/content";
}
<content.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
content.jsp입니다.<br />
id:${id}
</body>
</html>
<결과>
: 컴포넌트 방식으로 ModelAndView객체를 생성해서 객체형태로 리턴
: 값을 넣을 때 addObject()사용
: setViewName()으로 보낼 곳 View를 세팅
<HomeController.java>
@RequestMapping("/board/reply")
public ModelAndView reply() {
ModelAndView mv = new ModelAndView();
mv.addObject("id", 30);
mv.setViewName("board/reply");
return mv;
}
<reply.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
reply.jsp입니다.<br/>
id:${id}
</body>
</html>
<결과>
src/main/java 폴더에서 새로운 패키지(com.oracle.mvckkk) 생성하여 controller를 만들면 해당 controller 작동 시 오류가 발생한다.
--> servlet-context.xml에는 legacy 파일 기본패키지만 작동하게 쓰여있다.
<context:component-scan base-package="com.oracle.mvc02" />
',' 를 이용해 새로운 패키지명을 같이 적어줘도 되지만 많이 쓰이지 않는 방식이다.
<HomeController.java>
@RequestMapping("board/confirmId")
public String confirmId(HttpServletRequest request, Model model) {
System.out.println("Controller confirmId start...");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
System.out.println("Controller confirmId id->"+id);
System.out.println("Controller confirmId pw->"+pw);
model.addAttribute("id", id);
model.addAttribute("pw", pw);
return "board/confirmId";
}
<confirmId.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>confirmId</h1>
ID : ${id}<br/>
PW : ${pw}
</body>
</html>
<결과>
url에 파라미터값을 지정해주지 않으면 confirmId.jsp가 나타나지만 값은 null로 넘어온다.
파라미터값 넘겨주기▼
<HomeController.java>
@RequestMapping("board/checkId")
public String checkId(@RequestParam("id") String idd, @RequestParam("pw") String pswd, Model model) {
System.out.println("Controller checkId id->"+idd);
System.out.println("Controller checkId pw->"+pswd);
model.addAttribute("identify", idd);
model.addAttribute("password", pswd);
return "board/checkId";
}
<checkId.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
ID : ${identify }<br>
PW : ${password }
</body>
</html>
<결과>
@RequestParam을 사용하면 위와 다르게 url에 파라미터값을 지정해주지 않으면 400오류가 발생한다.
파라미터값 넘겨주기▼
<Member.java>
package com.oracle.mvc03.dto;
public class Member {
private String name;
private String id;
private String pw;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
<HomeController.java>
@RequestMapping("member/join")
public String joinData(@RequestParam("name") String name, @RequestParam("id") String id,
@RequestParam("pw") String pw, @RequestParam("email") String email, Model model ) {
Member member = new Member();
member.setName(name);
member.setId(id);
member.setPw(pw);
member.setEmail(email);
model.addAttribute("member", member);
return "member/join";
}
<join.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름 : ${member.name }<br>
아이디 : ${member.id }<br>
비밀번호 : ${member.pw }<br>
메일 : ${member.email }
</body>
</html>
<결과>
<index.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
function chk(){
if(!frm.id.value){
alert("id입력하세요!!!");
frm.id.foucs();
return false;
}
return true;
}
</script>
<body>
<form action="student" method="get">
student id : <input type="text" name="id"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
<HomeController.java>
@RequestMapping("/index")
public String goIndex() {
System.out.println("Controller Index Start...");
return "index";
}
@RequestMapping(method=RequestMethod.GET, value="/student")
public String goStudent(HttpServletRequest request, Model model) {
System.out.println("RequestMethod.GET");
String id = request.getParameter("id");
System.out.println("GET id:"+id);
model.addAttribute("studentId",id);
return "student/studentId";
}
<StudentId.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
student ID : ${studentId }
</body>
</html>
<결과>
<index.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
function chk(){
if(!frm.id.value){
alert("id입력하세요!!!");
frm.id.foucs();
return false;
}
return true;
}
</script>
<body>
<form action="student" method="post" name="frm" onsubmit="return chk()">
student id : <input type="text" name="id"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
<HomeController.java>
@RequestMapping("/index")
public String goIndex() {
System.out.println("Controller Index Start...");
return "index";
}
@RequestMapping(method=RequestMethod.POST, value="/student")
public ModelAndView goStudent(HttpServletRequest request) {
System.out.println("RequestMethod.POST");
String id = request.getParameter("id");
System.out.println("POST id:"+id);
ModelAndView mv = new ModelAndView();
mv.addObject("studentId", id);
mv.setViewName("student/studentId");
return mv;
}
<studentId.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
student ID : ${studentId }
</body>
</html>
<결과>
학생 정보를 입력받고 controller로 돌아와서 처리
@ModelAttribute를 사용하면 String타입의 메소드를 작성하고 매개변수로 Model을 지정하지 않아도 된다.
<StudentInformation.java>
package com.oracle.mvc042;
public class StudentInformation {
private String name;
private String age;
private String gradeNum;
private String classNum;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getGradeNum() {
return gradeNum;
}
public void setGradeNum(String gradeNum) {
this.gradeNum = gradeNum;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
}
<index.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%//mvc모델은 스크립틀릿을 쓰면안되지만 context는 예외
String context = request.getContextPath(); //mvc042가 들어감
%>
context:<%=context %><p>
<form action="<%=context %>/studentView1" method="post">
이름 : <input type="text" name="name"><br>
나이 : <input type="text" name="age"><br>
학년 : <input type="text" name="gradeNum"><br>
반 : <input type="text" name="classNum"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
<HomeController.java>
@RequestMapping("/index")
public String goIndex() {
System.out.println("Controller Index Start...");
return "index";
}
@RequestMapping("/studentView1")
public String studentView1(@ModelAttribute("studentInfo") StudentInformation studentInformation) {
System.out.println("HomeController studentView1 Start...");
return "studentView2";
}
<StudentView2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름:${studentInfo.name }<br>
나이:${studentInfo.age }<br>
학년:${studentInfo.gradeNum }<br>
반:${studentInfo.classNum }
</body>
</html>
<결과>
<StudentInformation.jsp>
package com.oracle.mvc042;
public class StudentInformation {
private String name;
private String age;
private String gradeNum;
private String classNum;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getGradeNum() {
return gradeNum;
}
public void setGradeNum(String gradeNum) {
this.gradeNum = gradeNum;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
}
<index.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%//mvc모델은 스크립틀릿을 쓰면안되지만 context는 예외
String context = request.getContextPath(); //mvc042가 들어감
%>
context:<%=context %><p>
<form action="<%=context %>/studentView2" method="post">
이름 : <input type="text" name="name"><br>
나이 : <input type="text" name="age"><br>
학년 : <input type="text" name="gradeNum"><br>
반 : <input type="text" name="classNum"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
<HomeController.java>
@RequestMapping("/index")
public String goIndex() {
System.out.println("Controller Index Start...");
return "index";
}
@RequestMapping("/studentView2")
public String studentView2(StudentInformation studentInformation, Model model) {
System.out.println("HomeController studentView2 Start...");
model.addAttribute("studentInfo", studentInformation );
return "studentView2";
}
<StudentView2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름:${studentInfo.name }<br>
나이:${studentInfo.age }<br>
학년:${studentInfo.gradeNum }<br>
반:${studentInfo.classNum }
</body>
</html>
<결과>
<RedirectController.java>
package com.oracle.mvc043;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RedirectController {
@RequestMapping("/studentConfirm")
public String studentRedirect(HttpServletRequest request, Model model) {
String id = request.getParameter("id");
String pw = "1234";
System.out.println("RedirectController studentConfirm Start...");
model.addAttribute("id", id);
model.addAttribute("pw", pw);
if(id.equals("abc")) {
return "redirect:studentOk";
}
return "redirect:studentErr";
}
@RequestMapping("/studentOk")
public String studentOk(HttpServletRequest request, Model model) {
String id = request.getParameter("id");
String password = request.getParameter("pw");
System.out.println("RedirectController studentOk Start....");
System.out.println("password->"+password);
model.addAttribute("id", id);
model.addAttribute("password", password);
return "student/studentOk";
}
@RequestMapping("/studentErr")
public String studentErr(HttpServletRequest request, Model model) {
String id = request.getParameter("id");
model.addAttribute("id", id);
System.out.println("Redirectcontroller studentErr Start...");
return "student/studentErr";
}
}
<StudentOk.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
studentOk.jsp<p>
id:${id }<p>
pw:${password }
</body>
</html>
<StudentErr.jsp>
선생님의 유머코드가 의심되는 부분,,,ㅋㅋㅋ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
넌 누구냐<p>
<h1>20년간 만두만 </h1> 주고...<p>
id : ${id }
</body>
</html>
<결과>
id=abc로 넘겨준 경우
id!=abc인 경우
<Student.java>
package com.oracle.mvc152;
public class Student {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
<StudentController.java>
package com.oracle.mvc152;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class StudentController {
@RequestMapping("/studentForm")
public String studemtForm() {
System.out.println("Controller studentForm");
return "createPage";
}
@RequestMapping("/student/create")
public String studentCreate(@ModelAttribute("student") Student student, BindingResult result) {
//BindingResult -> 유효성 검증결과를 담아두는 객체
String page = "createDonePage";
StudentValidator validator = new StudentValidator();
validator.validate(student, result);
if(result.hasErrors()) {
System.out.println("StudentValidator 오류 발생...");
page="createPage";
}
return page;
}
}
<createPage.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="student/create">
이름 : <input type="text" name="name" value="${student.name }"><br>
아이디 : <input type="text" name="id" value="${student.id }"><br>
<input type="submit" value="전송"><br>
</form>
</body>
</html>
<StudentValidator.java>
package com.oracle.mvc152;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class StudentValidator implements Validator {
@Override
public boolean supports(Class<?> arg0) {
//검증할 객체의 클래스 타입 정보
return Student.class.isAssignableFrom(arg0);
}
@Override
public void validate(Object target, Errors errors) {
System.out.println("validate()");
Student student = (Student)target;
String studentName = student.getName();
if(studentName==null || studentName.trim().isEmpty()) {
System.out.println("studentName is null or empty");
errors.rejectValue("name", "이름이 없거나 비어 있습니다");
}
int studentId = student.getId();
if(studentId==0) {
System.out.println("studentId is 0");
errors.rejectValue("id", "trouble");
}
}
}