1. context.path 경로 수정하는 법
1] pom.xml에서 artifactId 수정
2] 서버 더블 클릭하고 module 들어가서 path 수정



그러면 controller에서 basic으로 변경 완료
2. @controller, @RequestMapping을 이용한 URL 맵핑, Controller의 화면 처리




예시 1. )




1-1) requestController, ex01.jsp
package com.simple.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/request") //메서드 앞에 공통으로 들어가는 요청 경로
public class RequestController {
@RequestMapping("/ex01") //요청 경로
public String ex01() {
return "request/ex01"; //출력 경로
}
}
<%@ 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>
ex01화면
<a href="basic1">요청1</a>
<a href="basic2">요청2</a>
<a href="basic3">요청3</a>
</body>
</html>
1-2 ) RequestController에서 RequestMapping, PostMapping, GetMapping 사용해보기
package com.simple.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/request") //메서드 앞에 공통으로 들어가는 요청 경로
public class RequestController {
// String메서드 - 출력 화면을 직접 지정
@RequestMapping("/ex01")//요청경로
public String ex01() {
return "request/ex01";//출력경로
}
// //void메서드 - 요청 경로가 출력경로가 동일할 경우 아래와 같이 작성해도된다.
// @RequestMapping("ex01")
// public void ex01() {
//
// }
//get만 허용
//@RequestMapping(value = "/basic1", method = RequestMethod.GET)
@GetMapping("/basic1")
public String basic1() {
System.out.println("get만 허용");
return null;
}
//post만 허용
//@RequestMapping(value = "/basic2", method = RequestMethod.POST)
@PostMapping("/basic2")
public String basic2() {
System.out.println("post만 허용");
return null;
}
//get, post 둘 다 허용
@RequestMapping("/basic3")
public String basic3() {
System.out.println("get, post");
return null;
}
}
여기서 @RequestMapping(value = "/basic1", method = RequestMethod.GET)에 있는 value는 다중 값이 들어갈 때 사용
1-3) 화면출력

3. 요청 파라미터 처리 3가지 ★★



예시 1. )
1-1) Controller ( Request )
package com.simple.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.sample.command.PracVO;
import com.sample.command.ReqVO;
@Controller
@RequestMapping("/request") //메서드 앞에 공통으로 들어가는 요청경로
public class RequestController {
// ex02화면요청
@RequestMapping("/ex02")
public String ex02() {
return "request/ex02";
}
//1st 전통적 방식 맵핑
@RequestMapping(value = "/doAction", method = RequestMethod.POST)
public String doAction (HttpServletRequest request) {
String name = request.getParameter("name");
String age = request.getParameter("age");
String[] inter = request.getParameterValues("inter");
System.out.println(name);
System.out.println(age);
System.out.println(Arrays.toString(inter));
return "request/ex02_ok";
}
//2nd 어노테이션을 이용한 맵핑
@RequestMapping("/doAction")
public String doAction(@RequestParam(value = "name", required = false) String name,
@RequestParam("age") int age,
@RequestParam(value = "inter", required = false, defaultValue = "") List<String> list) {
//requestParam은 공백과 null데이터가 전달되면 요청을 거절하게 됩니다.
//필수가 아닌 파라미터는 required=false속성을 지정하면 됩니다.
//필수가 아닌 파라미터인 경우에는 null or ""을 지정하게 되는데 defaultValue로 기본값을 줄 수 있습니다.
System.out.println(name);
System.out.println(age);
System.out.println(list.toString());
return "request/ex02_ok";
}
//3rd - 커맨드 객체를 통해서 맵핑( 넘어오는 데이터의 name과 setter명이 같아야합니다. )
@RequestMapping("/doAction")
public String doAction(ReqVO vo) {
System.out.println(vo.toString());
return "request/ex02_ok";
}
}
1-2 ) ex02.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>
ex02화면
<form action="doAction" method="post">
이름 :<input type="text" name="name">
나이 :<input type="number" name="age">
<input type="checkbox" name="inter" value="1">java
<input type="checkbox" name="inter" value="2">Spring
<input type="checkbox" name="inter" value="3">Boot
<input type="submit" value="확인">
</form>
</body>
</html>

1-3 ) 커맨드 객체를 활용한 맵핑 - VO생성
package com.sample.command;
import java.util.List;
public class ReqVO {
private String name;
private int age;
private List<String> inter;
@Override
public String toString() {
return "ReqVO [name=" + name + ", age=" + age + ", inter=" + inter + "]";
}
public ReqVO() {
super();
}
public ReqVO(String name, int age, List<String> inter) {
super();
this.name = name;
this.age = age;
this.inter = inter;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getInter() {
return inter;
}
public void setInter(List<String> inter) {
this.inter = inter;
}
}
1-4 ) 결과 (consol출력) -> 페이지는 ex02_ok.jsp 로 이동



* 연습 문제(RequestController, req_quiz01, req_quiz01_ok, req_quiz01_no)
controller
package com.simple.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.sample.command.PracVO;
import com.sample.command.ReqVO;
@Controller
@RequestMapping("/request") //메서드 앞에 공통으로 들어가는 요청경로
public class RequestController {
// 실습
@RequestMapping("/req_quiz01")
public String req_quiz01() {
return "request/req_quiz01";
}
//1번방식
@RequestMapping(value = "/doAction", method = RequestMethod.POST)
public String doAction( HttpServletRequest req ) {
if( req.getParameter("id").equals("abc123") && req.getParameter("pw").equals("xxx123")) {
return "request/req_quiz01_ok";
}else {
return "request/req_quiz01_no";
}
}
//2번 어노테이션 방식
@RequestMapping("/doAction")
public String doAction( @RequestParam(value = "id", required = false) String id,
@RequestParam(value = "pw", required = false) String pw) {
if(id.equals("abc123") && pw.equals("xxx123")) {
return "request/req_quiz01_ok";
}else {
return "request/req_quiz01_no";
}
}
//3번 커멘드 객체방식
@RequestMapping("/doAction")
public String doAction(PracVO vo) {
String id = vo.getId();
String pw = vo.getPw();
if(id.equals("abc123") && pw.equals("xxx123")) {
return "request/req_quiz01_ok";
}else {
return "request/req_quiz01_no";
}
}
}
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>
<hr>
<%--
맵핑
1.RequestController에 현재 파일의 화면 처리를 하는 메서드를 생성.
2.폼 전송을 처리하는 메서드 생성(login맵핑 - POST만 허용)
3.아이디가 abc123, 비밀번호가 xxx123이라면 req_quiz01_ok.jsp 로 화면 이동
4.아니라면 req_quiz01_no.jsp로 화면이동
--%>
<form action="doAction" method="post">
ID:<input type="text" name="id"><br>
PW:<input type="password" name="pw"><br>
<input type="submit" value="로그인" >
</form>
</body>
</html>

아이디와 비밀번호 일치/ 비일치시 화면구현


4. Model전달자: 화면에 데이터를 전달하기 위한 객체




예시 1 )
1-1) Controller ( Response )
package com.simple.controller;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/response")
public class ResponseController {
//1. 화면
@RequestMapping("/ex01") //입력경로
public String ex01() {
return "response/ex01"; //출력경로
}
//result01 요청 - model객체
@RequestMapping("/result01")
public String result01(Model model) {
model.addAttribute("data", "홍길동"); //(키, 값)
model.addAttribute("serverTime", new Date());
return "response/result01";
}
//result02요청 - ModelAndView객체
@RequestMapping("/result02")
public ModelAndView result02() {
//뷰의 정보, data정보를 함께 저장할 수 있는 객체
ModelAndView mv = new ModelAndView();
mv.addObject("data", "홍길동");
mv.addObject("name" , "이순신");
mv.setViewName("response/result02");
return mv;
}
}
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>
<h3>res ex01</h3>
<a href="result01">model객체 사용</a>
<a href="result02">modelAndView객체 사용</a>
</body>
</html>

1-2) Model객체를 사용한 데이터 전달 (자주 사용하는 방식)
result01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
<%
String data = (String)request.getAttribute("data");
%>
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- <%=data %> --%>
모델을 사용해서 가져온 데이터의 결과
${data }<br/>
${serverTime }
</body>
</html>

1-3) ModelAndView 객체를 사용한 데이터 전달( 필터를 받아서 처리할 때 주로 사용함 )
result02.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>
결과
${data }<br/>
${name }
</body>
</html>

모델객체를 사용하면 getAttribute() 를 이용해서 값을 가져오지 않아도 컨트롤러를 통해 나오는 화면에서 바로 데이터를 꺼내서 가져올 수 있다.
'Spring' 카테고리의 다른 글
| 스프링 MVC 웹서비스 (0) | 2023.02.02 |
|---|---|
| 스프링 MVC 객체구현 (@Controller) -(3) (0) | 2023.02.02 |
| 스프링 MVC 객체구현 (@Controller) -(1) (2) | 2023.02.01 |
| JSP에 스프링 조립하기 (0) | 2023.01.31 |
| DI / IoC (0) | 2023.01.30 |