본문 바로가기

JSP

JSP_1강

  URL Mapping

URL이란 사용자가 서버에 접속해서 서비스를 받기 위한 주소를 말한다.

 

URL 작성 위치)

  • 브라우저의 주소 입력 칸에 직접 작성
  • a 태그의 href 속성
  • form 태그의 action 속성
  • 자바스크립트

URL Mapping은 사용자가 요구하는 기능과 controller 클래스의 메소드를 연결하는 것이다.

 

인터넷에서의 전송은 form 태그의 method 속성을 사용하며, 두 가지가 있다.

 

  정의 어노테이션
GET 방식   전송하는 데이터(주소칸)가 노출됨 @GetMapping("url")
POST 방식   전송하는 데이터를 숨김
  => form 태그에서 method를 post로 지정한 경우
  => 자바스크립트에서 post로 지정한 경우
@PostMapping("url")

  상황처리

0. 첫 페이지

Controller를 거쳐 처리되어야 하며, http://localhost:8080 이 뒤에 '/'가 생략된다.

=> '/' = root url(시작 경로) / 시작 페이지 = jsp 페이지로 작성

 

시작 페이지로 사용하는 파일명)

  • index.jsp(html)
  • default.jsp(html)
  • home.jsp(html) - spring에서 주로 사용

- index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>처음</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>시작 페이지</h1>
<p>환영합니다~~</p>
<p>JSP로 만든 페이지 입니다~</p>
</body>
</html>

 

- package.controller.HomeController.java

package com.jsframe.sringjsp01.controller;

import lombok.extern.java.Log;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@Log
public class HomeController {
    // 사용자 요청 url과 메소드 매핑
    @GetMapping("/")
    public String start(){
        log.info("start()"); // 정상 작동되었는지 확인할 수 있음
        //System.out.println("start()"); // 쓰지 않음
        String viewName = "index"; // jsp 파일의 이름
        return viewName;
    }
} // class end

 

1. 페이지(jsp) -> 페이지(jsp)

두 개의 jsp를 준비해 전환 처리용 메소드를 작성한다.

 

- index.jsp

mypage.jsp 파일 추가한 후 내용을 채운 뒤 <body> 태그 안에 아래 코드 추가

<a href="mp">[내페이지]</a>

 

- package.controller.HomeController.java

// 사용자 요청 url과 메소드 매핑
// => index.jsp 파일의 <a> 태그에 연결된 값과 같게 작성
@GetMapping("mp")
public String mypageMethod(){
    log.info("mypageMethod()");
    return "mypage"; // mypage.jsp 반환
}

 

2. 페이지(jsp) - [데이터] -> 페이지(jsp)

사용자의 입력값을 프로그램에서 받는다. => form 태그와 input 태그를 사용한 데이터 입력

  • 개별 데이터의 전달 => jsp에서 전송하는 모든 데이터는 문자열이며, input 태그의 name 속성에 작성한 값(키워드)가 변수명이 됨
  • 묶음 데이터의 전달(Dto 활용) => jsp 페이지에서 처리하는 부분은 개별 데이터 처리와 동일하며, 전송할 데이터(입력 태그)에 해당하는 Dto 클래스가 필요함

개별 데이터 전달 방식)

- inputFrm.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>입력 화면</title>
</head>
<body>
<h1>사용자 입력</h1>
<form action="inputProc">
    <input type="text" name="str" placeholder="문자열 입력"><br>
    <input type="number" name="num" placeholder="숫자 입력"><br>
    <input type="submit" value="전송">
</form>
</body>
</html>

 

- package.controller.HomeController.java

// 1번 방식을 이용해 페이지 연결
@GetMapping("inputFrm")
public String inputFrm(){
    log.info("inputFrm()");
    return "inputFrm";
}

@GetMapping("inputProc")
public String inputProc(String str, String num){
    log.info("inputProc()");
    log.info("str : " + str);
    log.info("num : " + num);
    
    int n = Integer.parseInt(num); // 문자열 => 정수 변환
    // jsp는 숫자도 String
    int data = n + 30; // 다양한 산술 연산 처리
    return "index";
}

 

묶음 데이터 전달 방식)

- joinFrm.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>회원가입 양식</title>
</head>
<body>
<h1>회원 가입</h1>
<form action="joinProc" method="post">
    <table>
        <tr>
            <th width="100">ID</th>
            <td width="200">
                <input type="text" name="id" placeholder="아이디를 입력하세요.">
                </td>
        </tr>
        <tr>
            <th>PASS</th>
            <td>
                <input type="password" name="pwd" placeholder="비밀번호를 입력하세요.">
            </td>
        </tr>
        <tr>
            <th>NAME</th>
            <td>
                <input type="text" name="name" placeholder="이름을 입력하세요.">
            </td>
        </tr>
        <tr>
            <th>AGE</th>
            <td>
                <input type="number" name="age" placeholder="나이를 입력하세요.">
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="가입">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

 

- package.dto.MemberDto.java

package com.jsframe.sringjsp01.dto;

import lombok.Data;

@Data
public class MemberDto {
    private String id;
    private String pwd;
    private String name;
    private int age;
    // jsp에서는 문자열이지만 string이 자동으로 정수 변환
}

 

- package.controller.HomeController.java

@GetMapping("joinFrm")
public String joinFrm(){
    log.info("joinFrm()");
    return "joinFrm";
}

@PostMapping("joinProc")
public String joinProc(MemberDto member){
    log.info("joinProc()");
    log.info("id : " + member.getId());
    log.info("pwd : " + member.getPwd());
    log.info("name : " + member.getName());
    log.info("age : " + member.getAge());

    return "index";
}

 

3. (jsp -> ) controller - [데이터] -> 페이지(jsp)

Model 객체 사용 방법)

    보낼 데이터만 처리 => Model

    보낼 페이지 지정 => return String

    데이터 입령용 명령어 : addAttribute("이름표", 데이터);

    => 첫 번째는 데이터의 이름표 값을 넣고, 두 번째는 보낼 데이터를 넣음 + Dto 객체(묶음 데이터)도 담을 수 있음

 

- output.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>출력 화면</title>
</head>
<body>
<h1>전송받은 데이터</h1>
<p>data1 : ${data1}</p>
<p>data2 : ${data2}</p>
<p>msg : ${msg}</p>
<hr>
<h1>회원 정보</h1>
<!-- 입력용 메소드에서 지어준 이름표를 지정 연걸 -->
<p>아이디 : ${mem.id}</p>
<p>비밀번호 : ${mem.pwd}</p>
<p>이름 : ${mem.name}</p>
<p>나이 : ${mem.age}</p>
</body>
<script>
    let message = '${msg}';
    alert(message);
</script>
</html>

 

- package.controller.HomeController.java

@GetMapping("output")
public String output(Model model){
    log.info("output()");
    
    model.addAttribute("data1", "첫번째 데이터");
    model.addAttribute("data2", 1000);
    String m = "보내는 메시지";
    model.addAttribute("msg", m);

    // Dto를 활용한 데이터 묶음 전달
    MemberDto member = new MemberDto();
    member.setId("test");
    member.setPwd("1234");
    member.setName("홍길동");
    member.setAge(30);

    model.addAttribute("mem", member); // 데이터 입력용 메소드
    
    return "output"; // 데이터가 가야 할 목적지
}

 

참고) 외부 CSS나 이미지를 프로젝트에 포함시키는 방법

application.properties에 static resources 설정

  • spring.web.resources.static-locations
  • 값 = classpath:static/

resources > static 폴더에 해당 폴더 생성 ex) 이미지는 images 폴더, 스타일시트는 css 등

jsp 문서에서 작성한 '폴더'/'파일명'으로 입력

'JSP' 카테고리의 다른 글

JSP_5강(MVC)  (0) 2022.11.01
JSP_4강  (0) 2022.10.23
JSP_3강  (0) 2022.10.22
JSP_2강  (0) 2022.10.19
JSP_0강  (0) 2022.10.17