Spring 정리 -03

시작하기에 앞서

4일차 스프링 정리

Spring Post 사용시 한글 깨짐 해결

  • web.xml 에 이런 코드를 작성한다.
	<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>
	</filter>

	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

왜 깨지는걸까?? 한번 생각해보자

컨트롤러 메소드 리턴타입

  • ModelAndView : 모델 + 뷰 가 둘다 필요할때 (명시하면 그대로, 아니면 자동)
  • String : 뷰(수동) (return "뷰이름")
  • void : 뷰(url 자동)
  • Map : 모델 + 뷰(url 자동)

어떤 경우에도 뷰가 없을 수는 없다. 이유를 생각해보자.

컨트롤러 메소드 매개변수

  • HttpServletRequest : 무언가 전달받아 그것을 Servlet 페이지로 전달할때 사용
@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(HttpServletRequest request) {
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    ModelAndView mv = new ModelAndView();
    if (id.equalsIgnoreCase("spring") && pw.equals("spring")) {
        mv.addObject("loginresult", true);
    } else {
        mv.addObject("loginresult", false);
    }
    mv.setViewName("loginsuccess");
    return mv;
}
  • String, int, double, boolean : form 에서 input 으로 전달되는 파라미터의 name이 같은 이름일 때 사용가능.
@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(String id, String pw) {
    //form input name = "id" : 요청파라미터이름이 id인 것으로 전송한다.
    //요청 파라미터이름과 컨트롤러 메소드 매개변수 이름이 동일하면 자동으로 저장된다.
    //form 입력 name 값 = 매개변수이름 동일 = db 컬럼명과 동일 하게 만들어서 저장하면 매우 단순해지고 좋음.
    ModelAndView mv = new ModelAndView();
    if (id.equalsIgnoreCase("spring") && pw.equals("spring")) {
        mv.addObject("loginresult", true);
    } else {
        mv.addObject("loginresult", false);
    }
    mv.setViewName("loginsuccess");
    return mv;
}

@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(@RequestParam("id") String id2, String pw) { // @RequestParam("id")라고 써있는 부분 = > id2 에 자동 저장되게 해줌.
    위와 동일...
}

@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(@RequestParam(value = "id", required = false, defaultValue = "spring") String id2,String pw, int age) 
//jsp 에서 age에 입력하는 값이 반드시 int 로 변형가능한 값이면 자동으로 연결해 준다.
}
  • Object(객체)
@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(LoginVO vo) {
// 요청 파라미터이름과 컨트롤러 메소드 매개변수가 객체일 떄 객체 내부 멤버 변수가 이름이 동일하면 자동 저장.

    //컨트롤러 메소드 매개변수 객체일 때 자동 모델로 사용가능하다
    // 모델 이름은 클래스 이름으로 자동 결정이 된다: 앞글자 소문자로 만들고 사용 가능 
    // 즉 mv.addObject("loginVO",vo);  라고 써준것과 같은 효과가 적용됨.
    //ex)loginVO
    ModelAndView mv = new ModelAndView();
    if (vo.getId().equalsIgnoreCase("spring") && vo.getPw().equals("spring")) {
        mv.addObject("loginresult", true);
    } else {
        mv.addObject("loginresult", false);
    }
    mv.setViewName("loginsuccess");
    return mv;
}

@RequestMapping(name = "/login", method = RequestMethod.POST)
public ModelAndView loginSuccess(@ModelAttribute("login")LoginVO vo) {
    //이번에는 vo 객체를 "login"이란 이름으로 보낸닷!
   ...
}
  • LoginVO.java
package edu.multi.mvc;

public class LoginVO {
	// ID PW AGE 요청 파라미터 입력 저장 변수들
	String id;
	String pw;
	int age;

	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 int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}
  • loginform.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>loginform.jsp 파일이 보입니다.</h1>
	<form action="http://localhost:8080/mvc/login" method="post">
		ID: <input type="text" name="id"> <br> 
		PW : <input type="password" name="pw"> <br> 
		나이: <input type="text" name="age"> <br> 
		<input type="submit" value="로그인">
	</form>
</body>
</html>

컨트롤러 매핑된 메소드 매개 변수

  • @RequestParam(value = "", required = , defaultValue= " ")
  • @ModelAttribute("") LoginVO vo 또는 객체

$("jquery")

${jspl}

초창기 ajax

asynchronous javascript and xml(초창기는 xml을 써서 xml로 주고받았지만 후에 태그가 너무 많다보니 json으로 많이쓴당)

json = javascript object notaion

javascript 의 객체는 var obj = {name:"홍길동", age:21}

AJAX

  1. 요청1- 서버처리 -....
  2. 클라이언트 동시 브라우저 화면 구성

현재화면의 전체는 그대로 부분만 바꿔보자!

  • ajax클라이언트

$.ajax(

{

url : '/test'

data : {"id" : "spring" }

type : 'get'

dataType : 'json'

success : function(server){

​ server = "{\"status\" : true}"; //이미 저장되어 있음.

​ $("div").html(server.status);

​ server.status

​ }

​ }

);

  • ajax서버

@Controller

class A{

@RequestMapping("/test")

@ResponseBody

a(String id){

//처리

//결과 응답

return "{\"status\" : true}";

}

}

© 2020 JunhoBaik, Built with Gatsby