시작하기에 앞서
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- 서버처리 -....
- 클라이언트 동시 브라우저 화면 구성
현재화면의 전체는 그대로 부분만 바꿔보자!
- 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}";
}
}