국비지원학원/Spring Framework

117일차-Spring Framework_parameter 처리

초코맛 2019. 4. 30. 23:31
반응형
*Controller 만들기
  • //=class
  • method로 요청 처리
@Controller
public class XxxController{
    @RequestMappein(value="/요청이름.do" , method(요청이름에 대한 요청방식)=RequestMethod.GET|POST)  //URL이 변경되지 않는 forward방식
    public String method명(하는일의 이름으로 해야 구별 쉬움)(매개변수-파라메터를 받을 목적){
        //method가 public이 아니면 밖에서 부를 수 없음
                return "응답할페이지명" //String타고 나가면서 VIewResolver=>기본이 forward방식으로 호출됨. (Request.setAttribute에 넣으면 이동할 페이지에서 받아사용O)
                //WEB-INF/views(prifix)/a.jsp(Suffix)=>.Servlet_context.xml
                //a=>Controller에서 전달한 값, Web Parameter 값 =>EL을 사용하면 편리. ${param.이름}
        }
}

//Spring은 Contrainer에 의존적이지 않음
//특정언어에 귀속되는 걸 쓰지 않아야한다 HTTPServletRequet같은거 X
//Spring framework를 4대로 업글할예정

//pom.xml내용을 덮어 복붙 저장
//설치


*Web Parameter 처리
  • HttpServletRequest 사용
    • 기존의 문법 그대로 사용 가능
    • request.getparameter("이름")
    • request.getParameterValues("이름")
    • //=>권장하지 않는다. 들어가면 자바EE 특정객체에 완전히 귀속되어 단위테스트를 하려면 컨테이너가 필요해 지기 때문.
    • =>권장x -단위테스트 불편함(반드시 Container 필요,Container에 배포)
    • //우리의 Container는 Tomcat
    • @RequestParam( )
    • public String method(HttpServletRequest request){
      • request.getparameter("이름")  |
      • request.getParameterValues("이름")
    • }
  • 자바 데이터형 : String
    • Web Parameter 가 하나일 때.
    • //class는 - 사용자정의 데이터형 / 참조형데이터형
    • 주의 할것) 매개변수명과 웹파라메터가 동일해야 한다.
    • @RequestParam(  )
    • Public String method(string name) {
    • }
    • <form ...>
    • <input type="text" name="name"/> //이 name가 String name 타고 들어감
    • </form>
    • 또는
    • <a href="x.do?name="name">00</a> //이 name가 String name 타고 들어감
    • //하나로 다닐일이 없어 잘 안쓰게됨(하나의 데이터 형으로 이름을 맞추어 주는것 하난데 vo만들기 귀찮으니까)
    • //썻던거라는 장점이 있지만 POJO가 깨져 권장x
  • VO
    • Web Parameter가 여러개일 때.
    • //주로 아래의 두가지를 권장함. 단위테스트의 편리함 POJO형식의 클래스가 된다.(Plain Old Java Object - 순수하게 자바SE기술만 써서 만든것)
    • //순수한 Java 기술로만 작성하는 클래스 (어디에도 속하지 않는)=>HttpServletRequest는 JavaEE의 기술로 Se가 아니라 x
    • //단위테스트가 편리
    • 주의 할 것) VO의 instance 변수명과 Web Parameter명이 일치해야 받을 수 있다. (이름이 같으면 배열을 만들면 됨)
    • <a href='x.do?name=이재현&age=27">
    •  
    • public class VO{
      • private String name;
      • private int age;
      • ...
    • }//pasint안써도 친절히 넣어줌..
    •  
    • @RequestMapping(  )
    • public String method (vo v){
      • v.getName();  //이재현이 타고 들어와 나옴
      • v.getAge();  //27이 타고 들어오게 됨
    • }//가장권장하고 가장많이 쓰게됨
//index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
     location.href="index.do";
</script>
</head>
<body>
</body>
</html>
//MainController.java
package kr.co.sist.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import static  org.springframework.web.bind.annotation.RequestMethod.GET;
import static  org.springframework.web.bind.annotation.RequestMethod.POST;
@Controller
public class MainController {   
     @RequestMapping(value="/index.do", method=GET)
     public String indexPage() {
           
           return "index";
     }//indexPage
     
     @RequestMapping(value="/request_get.do", method=GET)
     public String requestGet() {
           return "get";
     }//requestGet
     
     @RequestMapping(value="/request_post.do", method=POST)
     public String requestPost() {
           return "post";
     }//requestPost
     
     //하나의 요청(method)처리 method가 GET/POST 방식을 모두  처리해야할 때
     //method를 배열로 처리한다. emthod={GET,POST}
     @RequestMapping(value="/request_all.do", method= {GET,  POST})
     public String requestAll() {
           return "all";
     }//requestAll
     
}//class
//index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import url="common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>
     <div id="container">
     
     
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//get.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import url="common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>
     <div id="container">
           
           GET방식으로 요청된 페이지(공통부분은 import)<br/>
           요청 방식 : <%=request.getMethod() %>
           
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//post.jsp
     <div id="container">
           
           POST방식으로 요청된 페이지<br/>
           요청 방식 : <%=request.getMethod() %>
           
     </div>
//all.jsp
     <div id="container">
           
           모든 요청 방식을 처리하는 페이지<br/>
           요청 방식 : <%=request.getMethod() %>
           
     </div>






*Controller에서 JSP로 값 전달
  • HttpServletRequest
    • request.setAttribute("이름", 값);
  • Model(interface)(권장)
    • 객체화를 Framework가 하여 Arguments로 입력해준다.
    • service객체가 업무처리한 결과를 jsp로 보낼때 사용. scope객체일을 함(request, session의 일)
  • ModelAndView(class)
    • public class Controller{
    • @RequestMapping(..)
    • public String method(Model m){ //1.모델을 parameter로 선언
      • //2.값(service에서 업무처리한 결과 값)을 추가
      • //게시판에서 시작과끝을 처리했으면(service) model에 주고 jsp에 뿌려
      • //파라미터는 vo + 값을 넘겨야 되면 model
      • m.addAttribute("이름", 값);   //jsp에서는 EL로 가져다 쓴다.. ${이름} | ${requestScope.이름}
      • //내가 객체화를 해야해서 권장하지 않음?
    • }
//ParamController.java
package kr.co.sist.controller.webparam;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import kr.co.sist.vo.ParamVO;
import static  org.springframework.web.bind.annotation.RequestMethod.GET;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
@Controller
public class ParamController {
     //GET 방식으로 요청을 처리할 때에는 URL만 넣어도 된다.
     //value="URL", method=RequestMethod.GET)
     @RequestMapping(value="/request_form.do")
     public String requestForm() {
           return "param/request_form";
     }//requestForm
     
     
     @RequestMapping(value="/use_request_process.do",  method=GET)
     //HttpServletRequest를 사용한 파라메터 처리 : 권장x
     public String requestFormProcess(HttpServletRequest  request) {
           
           String name=request.getParameter("name");
           String age=request.getParameter("age");
           String[] lang=request.getParameterValues("lang");
           
          System.out.println(name+"/"+age+"/"+Arrays.toString(lang));
           request.setAttribute("lang", lang);
           
           return "param/request_process";
     }//requestFormProcess
     
   @RequestMapping("/vo_form.do")
   public String voForm() {
      return "param/vo_form";
   }//voForm
     
     //vo를 사용한 Parameter 처리
     @RequestMapping(value="/vo_process.do", method=GET)
     public String voProcess(ParamVO pv, Model m) {
           
           m.addAttribute("langData", pv.getLang()); //이 값은  JSP로 전달된다.포워드형식으로
           m.addAttribute("nameData", pv.getName()); //이 값은  JSP로 전달된다.포워드형식으로
           m.addAttribute("ageData", pv.getAge()); //이 값은  JSP로 전달된다.포워드형식으로
           //객체화를 프레임워크가 해주고 서비스는 내가 함..DI배우면 서비스객체화 내가x
           //System.out.println("----"+pv);
           return "param/vo_process";
     }//voProcess
     
}//class
//request_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>   
     <div id="container">
     <form action="use_request_process.do">
     <label>이름</label>
     <input type="text" name="name" class="inputBox"/><br/>
     <label>나이</label>
     <input type="text" name="age" class="inputBox"/><br/>
     <label>관심언어</label><br/>
     <input type="checkbox" name="lang" value="Java"/>Java<br/>
     <input type="checkbox" name="lang"  value="C/C++"/>C/C++<br/>
     <input type="checkbox" name="lang"  value="Python"/>Python<br/>
     <input type="checkbox" name="lang" value="VB"/>VB<br/>
     <input type="submit" value="전송" class="btn"/>
     
     </form>    
           
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//request_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>   
     <div id="container">
           <ul>
                <li>${param.name}님 안녕하세요?</li>
                <li>${param.age}살</li>
                <li>
                <c:if test="${empty param.lang}">관심언어가  없습니다.</c:if>
                <c:forEach var="lang"  items="${requestScope.lang}">
                     <c:out value="${lang}"/>
                </c:forEach>
                </li>
                <li>
                     <a href="#void"  onclick="history.back()">다시입력</a>
                     <a href="#void"  onclick="location.href='request_form.do'">다시입력</a>
                     
                </li>
           </ul>
           
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//ParamVO.java
package kr.co.sist.vo;
import java.util.Arrays;
public class ParamVO {
     private String name;
     private int age;
     private String[] lang;
     
     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 String[] getLang() {
           return lang;
     }
     public void setLang(String[] lang) {
           this.lang = lang;
     }
     @Override
     public String toString() {
           return "ParamVO [name=" + name + ", age=" + age + ",  lang=" + Arrays.toString(lang) + "]";
     }
     
}//class
//vo_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>   
     <div id="container">
           <ul>
                <li>VO 값 처리</li>
                <li>${param.name}(${nameData})님  안녕하세요?</li>
                <li>${param.age}(${ageData})살</li>
                <li>
                <c:if test="${empty langData}">관심언어가  없습니다.</c:if>
                <c:forEach var="lang"  items="${requestScope.langData}">
                     <c:out value="${lang}"/>
                </c:forEach>
                </li>
                <li>
                     <a href="#void"  onclick="history.back()">다시입력</a>
                     <a href="#void"  onclick="location.href='vo_form.do'">다시입력</a>
                </li>
           </ul>
           
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//vo_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
      position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
         /* padding-top: 35px */ position:absolute; top:40px;  left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    
});//ready
</script>
</head>
<body>
<div id="wrap">
   <div id="header">
      <div id="headerTitle">SIST Class4</div>
      <div style="padding-top:100px; ">
      <c:import url="../common/jsp/main_menu.jsp"></c:import>
      </div>
   </div>
   <div id="container">
      
      <form action="vo_process.do">
         <label>이름</label>
         <input type="text" name="name" class="inputBox"/><br/>
         <label>나이</label>
         <input type="text" name="age" class="inputBox"/><br/>
         <label>관심언어</label>
         <input type="checkbox" name="lang" value="Java"/>Java
         <input type="checkbox" name="lang" value="C/C++"/>C/C++
         <input type="checkbox" name="lang"  value="Python"/>Python
         <input type="checkbox" name="lang" value/>VB
         <br/>
         <input type="submit" value="전송"/>
      </form>
      
   </div>
   <div id="footer">
      <div id="footerTitle">copyright&copy; all right reserved.  class 4.</div>
   </div>
</div>
</body>
</html>
//main_menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- smartmenu 시작 -->
   <!-- SmartMenus core CSS (required) -->
   <link  href="http://localhost:8080/mybatis_prj/common/smartmenu/css/sm-core-css.css" rel="stylesheet" type="text/css" />
   
   <!-- "sm-blue" menu theme (optional, you can use your own  CSS, too) -->
   <link  href="http://localhost:8080/mybatis_prj/common/smartmenu/css/sm-simple/sm-simple.css" rel="stylesheet" type="text/css" />
   
   <!-- jQuery -->
    <!-- <script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> -->
    <!-- SmartMenus jQuery plugin -->
    <script type="text/javascript"  src="http://localhost:8080/mybatis_prj/common/smartmenu/jquery.smartmenus.js"></script>
    <!-- SmartMenus jQuery init -->
    <script type="text/javascript">
       $(function() {
          $('#main-menu').smartmenus({
             subMenusSubOffsetX: 1,
             subMenusSubOffsetY: -8
          });
       });
       function requestAll(){
            var method="";
            if(confirm("GET방식으로 요청 하시겠습니까?")){
                 method="GET";
            }else{
                 alert("POST방식으로 요청합니다.");
                 method="POST";
            }//end else
            
            document.hidFrm.action="request_all.do"
            document.hidFrm.method=method;
            document.hidFrm.submit();
      }//requestAll
      function sendPost(){
            //chrome은 javaScript에서 action을 변경하면 form의  actino이 계속 유지된다.
            document.hidFrm.action="request_post.do"
            document.hidFrm.submit();
      }//sendPost
    </script>
<form action="request_post.do" name="hidFrm" id="hidFrm"  method="post"></form>
<!-- smartmenu 끝 -->
     <nav id="main-nav">
      <!-- Sample menu definition -->
      <ul id="main-menu" class="sm sm-simple">
        <li><a href="#void">홈으로</a></li>
        <li><a href="#void">Spring MVC 사용</a>
          <ul>
            <li><a href="#void">1일차</a>
              <ul>
                <li><a href="request_get.do">GET방식  요청</a></li>
                <li><a href="#void"  onclick="sendPost()">POST방식 요청</a></li>
                <li><a href="#void"  onclick="requestAll()">GET/POST모두 요청</a></li>
                <li><a  href="request_form.do">HttpServletRequest로 파라메터  처리</a></li>
                <li><a href="vo_form.do">VO로 파라메터  처리</a></li>
              </ul>
            </li>
            </ul>
            <li><a href="#">동기방식 차량조회</a></li>
        </ul>
     </nav>





 

반응형