일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 플랙스박스기본
- Flex Box 기본
- 타입
- ubuntu
- spring 환경설정
- 환경설정
- REACT
- 객체지향프로그래밍
- Hooks
- Eclipse
- 관계형데이터베이스
- SQL 연산자
- 자바 스프링
- 리액트
- 이클립스
- 오산대맛집
- java spring
- numpy
- 람다식
- 스프링
- 노마드코더
- 자바스프링
- node.js
- SQL 문제
- HTML5
- SQL 명령어
- spring
- java설치
- Flexbox Froggy
- SQL
- Today
- Total
이것저것
[Spring]환경설정(약식2) 본문
1-1. Spring 폴더 -> src -> main에서 java 폴더 하나를 만들어준다.
그리고 새로고침(f5)를 눌러주면 java폴더가 생성된다.
1-2. java폴더 안에 pack01 -> tiger.java를 생성해준다.(tiger.class를 pack01 패키지를 생성)
package명은 WEB-INF 폴더의 dispatcher-servlet.xml의 base-package에 적혀있는 package명과 맞춰줘야 한다.
2-1. @Controller를 만들어준다. public 클래스 바로 위에 붙여서 만들어준다.
import가 생기지 않으면 ctrl+space로 만들어준다.
2-2. @RequestMaping을 import해준 다음에 옆에 ("/t1")을 적어준다.
t1은 index.jsp에 가보면 링크로 t1이 걸려있는 것을 확인할 수 있다.
2-3. func01안에 출력 코드("f1")를 작성해준다.
그리고 index.jsp를 실행시켜준 다음에 링크 버튼을 눌러주면 404페이지가 뜨지만 이클립스의 console창에서는 f1이 찍힌 것을 확인할 수 있다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class tiger {
@RequestMapping("/t1")
public String func01() {
System.out.println("f1");
return null;
}
}
404 에러가 뜨더라도 console에 출력이 되는 것은 controller가 연결이 되었다는 것을 의미한다.
controller라고 하면 tiger.java 파일이고 view라고 하면 index.jsp이다.
controller에서 db작업이 이루어진다.
DB를 건드리면 무조건 백엔드 파일이다.
react와 spring을 연결하면 node.js는 없어진다와 같다.
3. tiger.java에서 func01을 복사해서(RequestMapping까지) t2, func02로 수정해준다.
index.jsp에서 t1링크가 걸려있는 곳을 복사해서 t2링크를 걸어준다.
그리고 저장 후 (ctrl+shift+s 전체 저장)(Alt+f5), index.jsp를 실행해서 링크 2를 눌러주면 f2가 출력되는 것을 확인할 수 있다.
이런 식으로 복사해서 사용한다는 것을 보여주는 예이다.
4-1. 이제 새로운 파일을 생성해보겠다.
dispatcher-servlet.xml에 들어가 보면 WEB-INF/views/라는 뷰 위치를 볼 수 있다.
하지만 우리는 views 폴더가 없기 때문에 생성해주겠다.
4-2. 같은 위치에 views 폴더를 생성해주고 tiger.java의 view파일을 생성해주겠다.
view파일을 생성해줄 때는 일반적으로 자바 파일명 View로 생성해준다. (tigerView.jsp)
4-3. view 파일에 h1태그를 하나 걸어준다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>tiger View</h1>
</body>
</html>
4-4. tiger.java와 index.jsp에 코드를 적어주겠다.
func02 파일은 지워주고 func01에 return값을 tigerView로 수정해준다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class tiger {
@RequestMapping("/t1")
public String func01() {
System.out.println("f1");
// DB data Access
//함수이름과는 전혀 무관하다.
//RequestMapping을 보고 들어온다.
return "tigerView";
}
}
4-5. index.jsp는 t1을 빼고 모두 지워준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<h2>Hello World</h2>
<a href="t1">링크1</a><br/>
</body>
그리고 index.jsp를 실행해주면 tigerView에 h1태그가 출력되는 것을 확인할 수 있다
5-1. Spring폴더를 복사해 보도록 하자.
우선 Spring01 폴더를 복사해서 Spring02 폴더로 만들어준다.
그리고 pom.xml에 들어가서 맨 위에 gourpId태그에 Spring01을 Spring02로 수정해준다.
5-2. Spring02 폴더를 우클릭 후 Properties에 들어가서 web Project Settings에서 Spring02로 수정해준다.
그리고 Apply로 저장해준다.
5-3. 다시 Spring02폴더를 우클릭 후 Run As로 서버를 실행해준다.
페이지가 localhost/Spring02로 나온다면 제대로 수정된 것이다.
6. index.jsp에서 파라미터 값을 전달하는 내용이다.
6-1. index.jsp에 t2? 뒤에 값을 넣어준다.
t2?n1=호랑이 라는 값을 전달해주겠다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<h2>Hello World</h2>
<a href="t1">링크1</a><br/>
<a href="t2?n1=호랑이">링크2</a><br/>
</body>
6-2. func02에 @RequestParam을 import 해주고 안에 value=n1이라는 값을 받아준다.
value의 n1은 index.jsp에서 전달해준 값이다.
그리고 String n2로 받아서 쓰겠다고 정의해준다.
그러면 n2를 출력하게 되면 로그에는 호랑이가 출력된다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class tiger {
@RequestMapping("/t1")
public String func01() {
System.out.println("f1");
// DB data Access
//함수이름과는 전혀 무관하다.
//RequestMapping을 보고 들어온다.
return "tigerView";
}
@RequestMapping("/t2")
public String func02(@RequestParam(value="n1") String n2) {
System.out.println(n2);
//로그 거는것은 습관을 들이도록 하자
return "tigerView";
}
}
7-1. 인수값을 2개 받아는 방법이다.
&를 이용해서 뒤에 적어주면 2개를 받을 수 있다.
띄어쓰기는 쓰지 않는다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<h2>Hello World</h2>
<a href="t3?name=호랑이&age=30">링크3</a><br/>
</body>
7-2. tiger.java로 가서 name 다음에 @RequestParam으로 age를 적어주면 된다.
그다음 실행하면 로그에 age까지 출력되는 것을 확인할 수 있다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class tiger {
@RequestMapping("/t3")
public String func03(@RequestParam(value="name") String name,
@RequestParam(value="age") int age) {
System.out.println(name);
System.out.println(age);
//로그 거는것은 습관을 들이도록 하자
return "tigerView";
}
}
8-1. 인수값을 전달하는 다른 방식이다.
index.jsp에서 t4를 생성해주는데 헷갈리지 않게 age를 40으로 수정해주겠다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<h2>Hello World</h2>
<a href="t4?name=호랑이&age=40">링크4</a><br/>
</body>
8-2. tiger.java에서 @RequestParam 부분을 모두 지워준다.
그리고 func05 괄호 안에 HttpServletRequest request를 작성해준다.
전달받을 인수들을 request.getParameter로 받는다.
(ps. age를 int로 받아보려고 했지만 안됐다. 무조건 String값인지 아니면 받는 방법이 있는지 찾아봐야겠다.)
package pack01;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class tiger {
@RequestMapping("/t4")
public String func04(HttpServletRequest request) {
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println(name);
System.out.println(age);
//로그 거는것은 습관을 들이도록 하자
return "tigerView";
}
}
ps - int로 받으려면 int age = integer.parseInt(request~)를 해주면 된다.
너무 오랜만에 java 해서 까먹었었다...
@RequestMapping("/t4")
public String func04(HttpServletRequest request) {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println(name);
System.out.println(age);
//로그 거는것은 습관을 들이도록 하자
return "tigerView";
}
9-1. index.jsp에서 t5로 보내주고 인수값은 tiger.java에서 보내는 방법이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<a href="t5">링크5</a><br/>
</body>
9-2. tiger.java에서 Model m (m은 변수이다.)를 선언해주고
m.addAttribute를 사용해서 name과 age 값을 작성해준다.
package pack01;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class tiger {
@RequestMapping("/t5")
public String func05(Model m) {
m.addAttribute("name", "사자");
m.addAttribute("age", 50);
System.out.println("f5");
//로그 거는것은 습관을 들이도록 하자
return "tigerView";
}
}
9-3. 전달받을 tigerView.jsp에서 ${name}으로 전달을 받는다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>tiger View</h1>
<h2>${name}${age}</h2>
</body>
</html>
9-ex1. 바로 view에다가 전달받는 방법이다.
index.jsp와 tiger.java는 그대로 두고 tigerView.jsp를 수정할 것이다.
tigerView.jsp에 자바 코드를 바로 사용하기 위해서 <% %>를 사용한다.
<% 안에 String name = request.getAttribute("name")을 사용하면 오류가 난다.
request 앞에 String으로 받아줘야지 오류가 나지 않는다.
age는 int 값을 받으니 (int)를 붙여준다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>tiger View</h1>
<h2>${name}${age}</h2>
<h3>
<%
String name = (String)request.getAttribute("name");
%>
<%
int age = (int)request.getAttribute("age");
%>
<%= name %>
<%= age %>
</h3>
</body>
</html>
정상으로 출력되는 것을 확인할 수 있다.
10-1. Model에 @RequestParam 값을 넣어주는 응용 버전이다.
우선 tiger.java에서 Model에 @RequestParam을 연결시켜준다.
10-2. index.jsp에서 name과 age값을 정의해준다.
10-3. tigerView.jsp로 가서 바로 출력을 해줄 것이다.
<% String name 과 <% int age로 값을 가져온 다음에
<%= name %>, <%= age %>로 값을 출력해준다.
11-1. ModelAndView를 mv로 새로운 객체로 생성을 시키고
mv에 name과 age를 정의해준다.
그리고 return값을 mv로 받기 위해서 public ModelAndView로 수정해준다.
new ModelAndView에는 views 경로를 적어준다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import oracle.net.aso.i;
@Controller
public class tiger {
@RequestMapping("/t7")
public ModelAndView func07() {
ModelAndView mv = new ModelAndView("tigerView");
mv.addObject("name", "강아지");
mv.addObject("age", 20);
System.out.println("f7");
return mv;
}
}
11-2. index.jsp에는 t7링크가 걸려있는 태그만 추가해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<a href="t7">링크7</a><br/>
</body>
12. ModelAndView를 삼항 연산자를 사용해서 true일 경우와 false일 경우 각각의 페이지로 이동하는 방식이다.
ModelAndView를 mv로 새로운 객체로 정의한 부분 뒤에 (true) ? "tigerView" : "lionView" 인 삼항 연산자를 추가한다.
우리는 지금 lionView가 없기 때문에 views에 lionView를 생성한 뒤 lion View가 출력되도록 작성한다.
그리고 Boolean b = false를 위에 추가로 생성해서 false일 경우 lion View 페이지로 이동하도록 해준다.
package pack01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import oracle.net.aso.i;
@Controller
public class tiger {
@RequestMapping("/t8")
public ModelAndView func08() {
Boolean b = false;
ModelAndView mv = new ModelAndView((b) ? "tigerView" : "lionView");
mv.addObject("name", "강아지");
mv.addObject("age", 20);
System.out.println("f8");
return mv;
}
}
index.jsp에 링크 8을 걸어준다.
그리고 출력을 해주면 Boolean이 false이므로 lionView로 이동하면서 페이지가 출력된다.
13. dispatcher-servlet.xml에서 controller(tiger.java)를 거치지 않고 바로 연결할 수 있다.
아래와 같이 연결해주면 t9을 바로 mokeyView로 연결할 수 있다.
14. pack02를 생성해서 새로운 controller를 만들려면 우선 dispatcher-servlet에 pack02를 추가해줘야 한다.
그래야지 pack02의 Cat.java controller를 사용할 수 있다.
간단한 controller를 Cat.java에 입력하고 catView를 출력해보자
15. view 폴더는 새로 생성하고 싶을 때 mvc:jsp를 똑같이 복사해서 만들 수 없다.
view에 새로운 파일을 만든 다음에 그 폴더의 경로를 controller에서 정의해주면 사용할 수 있다.
Cat.java controller에 경로를 설정해주겠다.
package pack02;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Cat {
@RequestMapping("/t3")
public String func03() {
System.out.println("강아지");
return "animal/dogView";
}
}
그리고 index.jsp에 t3링크를 걸어주면 dogView를 출력 가능하다.
t2. form 태그를 만들어서 t2의 controller에 전달해줄 값을 넣어준다. 여기서 input값은 사실상 의미가 없다....
t3. form 태그에 t3를 만들어서 t3에서 전달해주는 값을 출력해준다. 여기서도 input값은 의미가 없어야 하는데 input값이 출력된다....(머지..)
ps. 원인을 찾았다. 원인은 처음에 t2의 값을 전달할 때 getParameter로 값을 받았는데 t3에서는 action에서 t3뒤에 parameter 값이 없기 때문에 input값을 그대로 가져오기 때문이었다.
t2의 값을 받을 때는 getParameter로 받아야하고 t3의 값을 받을 때는 getAttribute로 받아줘야지 생각했던 것과 같이 정상적으로 작동한다!!
t4. form 태그에 입력된 값을 t4로 전달해주는데 여기서는 input값에 넣은 값을 전달해주도록 되어있다.
Apple.java에 get방식으로 값을 전달해주도록 해놨기 때문이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*, java.text.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<head>
<title>메인 페이지</title>
</head>
<body>
<%=new Date()%>
<h2>Hello World</h2>
<a href="t1">링크1</a><br/>
<form action="t2?name=호랑이&age=20" method="post"> <!-- controller t2로 가라 -->
<input type="text" name="name" value="홍길동" />
<input type="text" name="age" value="30" />
<input type="submit" value="전송" />
</form>
<form action="t3" method="post"> <!-- controller t3로 가라 -->
<input type="text" name="name" value="홍길동" />
<input type="text" name="age" value="30" />
<input type="submit" value="전송" />
</form>
<form action="t4" method="post"> <!-- controller t4로 가라 -->
<input type="text" name="name" value="홍길동" />
<input type="text" name="age" value="30" />
<input type="submit" value="전송" />
</form>
</body>
t2. HttpServletRequest를 사용해서 tigerView에서 name과 age가 출력되도록 하였다. 그래서 index.jsp에서 입력한 "호랑이"와 "20"이 출력된다.
t3. MdelAndView를 사용해서 name에는 고양이 age에는 30이라는 값을 넣어줬다. 그러므로 tigerView에서는 input에 어떤 값을 입력하든지 고양이와 30이 출력된다.
t4. Apple을 apple 객체를 만들어서 apple에 get.name과 get.age로 값을 전달해주도록 하였다. 그러므로 input값에 입력된 정보가 get방식으로 와서 Apple.java를 거쳐서 tigerView에 input값이 출력된다.
package pack01;
import java.applet.Applet;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class tiger {
@RequestMapping("/t1")
public String func01() {
System.out.println("f1");
return "tigerView";
}
@RequestMapping("/t2")
public String func02(HttpServletRequest request) {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println("f2");
System.out.println(name);
System.out.println(age);
return "tigerView";
}
@RequestMapping("/t3")
public ModelAndView func03() {
ModelAndView mv = new ModelAndView("tigerView");
mv.addObject("name", "고양이");
mv.addObject("age", 30);
System.out.println("f3");
return mv;
}
@RequestMapping("/t4")
public String func04(Apple apple) {
System.out.println("f4");
System.out.println(apple.getName());
System.out.println(apple.getAge());
return "tigerView";
}
}
pack01에 Apple.java를 생 성해준 다음 name과 age를 get, set을 생성해준다.
package pack01;
public class Apple {
String name;
int age;
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;
}
}
tigerView에서 값들이 출력될 수 있도록 해주었다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>tiger View</h1>
<!-- <% String name = (String)request.getParameter("name"); %> -->
<!-- t2에서 사용한다. catView로 따로 빼주어서 실행하는것이 더 좋다.-->
<% String name = (String)request.getAttribute("name"); %>
<!-- <% int age = Integer.parseInt(request.getParameter("age")); %> -->
<% String age = (String)request.getAttribute("age"); %>
<%= name %>
<%= age %>
</body>
</html>
Ps. getAttribute에 age값을 int로 받게 된다면 다른 controller를 생성한 다음에 null값을 집어넣으면 오류가 나게 된다.
age 값을 String으로 넣으면 오류가 나지 않는다. String값은 배열이므로 null값도 들어가지만 int는 null값이 들어가면 NullPointException상태가 일어나기 때문인 것 같다.
String에 배열값으로 null값을 넣어주는것과 int에 그냥 null값을 넣어주는것과 다르기때문(?) 아직 잘 모르겠다.
'Spring' 카테고리의 다른 글
[Spring] Mybatis (0) | 2020.06.19 |
---|---|
[Spring] ajax로 페이지 refresh없이 출력하기 (0) | 2020.06.18 |
[Spring] axios로 spring 구현 (0) | 2020.06.18 |
[Spring] JSTL 사용하기 (0) | 2020.06.16 |
[Spring] Spring 환경설정(약식) (0) | 2020.06.11 |