- Servers/Tomcat v8.0 Server at localhost-config/server.xml 의 <Context> 태그의 Path 확인
- 실행 시킨 서버의 각종 정보가 들어 있음
1. Login 만들기
- 객체 생성 확인 : 객체 생성이 안됐을 경우, 명령어 처리가 안됨 (시작 전에 반드시 확인할 것)
★객체 생성이 안 됐을 경우, ★@Controller 넣었는지 확인할 것!!!
- 결과 확인
http://localhost:8090/basicspring/login.do
LoginVO.java
package kr.co.basicspring.test03;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller //URL에서 요청한 명령어를 처리하는 클래스
//→ 스프링컨테이너 (서버)에 의해서 자동으로 객체가 생성 됨
public class LoginCont { //외부 접근을 할 수 있어야 함
public LoginCont() {
System.out.println("----- LoginCont() 객체 생성 됨");
}//LoginCont() end
//결과 확인
//http://localhost:8090/basicspring/login.do
//로그인이기 때문에 session 필요
//하나의 요청 명령어당 실행의 주체는 메소드
@RequestMapping(value="login.do", method = RequestMethod.GET)
public String loginForm() {
/* prefix에 등록 된 것 → /WEB-INF/views/
return 받을 내용 → login/loginForm
→ .jsp
*/
return "login/loginForm";
}//loginForm() end
loginCont.java
- 사용자가 요청한 정보를 가져와서 처리하는 다양한 방법
1-1) request로 받아오기
@RequestMapping(value = "login.do", method = ReqeustMethod.POST)
public ModelAndView loginProc(HttpServletRequest req){
String id=req.getParameter("id");
String pw=req.getParameter("pw");
}//loginProc() end
1-2) 변수에 RequestParam 사용
@RequestMapping(value = "login.do, method = RequestMethod.POST)
public ModelAndView loginProc(@RequestParam("id"), String id,
@RequestParam("pw"), String pw_
}//loginProc() end
1-3) form에 들어가는 name과 동일하게 사용
@RequestMapping(value = "login.do", method = RequestMethod.POST)
public ModelAndView loginProc(String id, String pw) {
//form (.jsp) 에 들어가는 name과 동일해야 함
}//loginProc() end
1-4) VO로 받아오기
@RequestMapping(value = "login.do", method = RequestMethod.POST)
public ModelAndView loginProc(LoginVO vo, HttpServletRequest req, HttpSession session) { //필요한 것들 다 선언하고 사용 가능
String id = vo.getId();
String pw = vo.getPw();
ModelAndView mav=new ModelAndView();
if(id.equals("fullmoon") && pw.equals("1234")){ //id는 fullmoon으로 pw는 1234가 들어올 때 로그인 성공
//로그인 성공
mav.setViewName("login/loginResult");
session.setAttribute("s_id", id);
session.setAttribute("s_pw", pw);
}else{
//로그인 실패
//view 페이지를 if, else로 나눠서 표현 가능
mav.setViewName("login.msgView");
req.setAttribute("msg", "<p>아이디와 비밀번호가 일치하지 않습니다.</p>");
/* = mav.addObject("msg", "<p>아이디와 비밀번호가 일치하지 않습니다.</p>");
mav.addObject("link", "<a href='javascript:history.back()'>[다시 시도]</a>");
*/
}//if end
return mav;
}//loginProc() end
<수정내용> 1. <default-servlet-handler/> 태그 추가 2. beans:property name="prefix" 의 value="/"수정
- resources 대신에 사용할 css, images, js 생성(경로- basicAjax/src/main/webapp/ ~~ )
3-2) AJAX 정의
- AJAX = Asynchronous JavaScript And XML - 페이지 전체를 reload하지 않고 일부분만 reload 할 수 있음 - 응답 받아온 메세지를 처리하는 함수를 'callback' 함수 라고 함 - Ajax 를 사용하기 위해 js 폴더에 위의 2개 파일 복사 붙여넣기
webapp/member/01_ajaxTest.jsp
<페이지 단위> idCheck.jsp → idCheckProc.jsp : 서버에서 새로운 페이지로 응답
<AJAX 방식> idCheck.jsp ↔ 서버에서 응답시, 요청 페이지로 응답 (갔다가 → 오는 것 ←) : url이 바뀌지 않고 다시 원래 요청 했던 곳으로 돌아옴 : 서버에서 응답을 한 메세지를 받는 것 - 메소드 (= callback)
- button을 눌렀을 때 반응을 확인하기 위해 alert 사용하여 확인
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>01_ajaxTest.jsp</title>
</head>
<body>
<!--
AJAX (Asynchronous JavaScript And XML)
- 페이지 전체를 reload하지 않고 일부분만 reload할 수 있다
- jQuery 오픈 소스 중 ajax()함수를 이용한다
- 응답받아온 메세지를 처리하는 함수를 callback 함수라 한다
-->
<button>* 서버에서 응답받기 *</button> <!-- '댓글 더보기' 버튼과 동일한 역할 -->
<div id="panel"></div>
<script src="../js/jquery.js"></script>
<script>
$("button").click(function(){
//alert() ; 잘 돌아가는지 확인차 이용
$.ajax({
url : "test.do", //요청명령어
method : "get", //get | post 방식, 아무것도 적히지 않으면 get 방식
dataType : "text", //문자열
error : function(xhr, status, error){ //callback함수, 원인 (xhr, status), ★ 에러메세지 (error)★ 제대로 답변을 받지 못한 경우 (error가 났을 때는 해줄 수 있는 것이 없음)
alert("에러 !! " + error);
}, //error end
success : function(result, status, xhr){ //★ callback함수, 성공한 경우 메세지 (result), 제대로 답변을 받은 경우
//1) alert(result);
//2)
$("#panel").append(result);
}//success end
}); //ajax() end
}) //click() end - button을 클릭하면 function 으로 가라
</script>
</body>
</html>
package kr.co.form1.test01;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class AjaxTestCont {
public AjaxTestCont() {
System.out.println("-----AjaxTestCont() 객체 생성 됨");
}//AjacTestCont() end
@RequestMapping("/member/test.do")
public void ajaxTest(HttpServletRequest req, HttpServletResponse resp) {
try{
resp.setContentType("text/plain; charset=UTF-8"); //01_ajaxTest.jsp 1행의 contentType 내용 복사 html→plain 으로 수정 (평범한 문자열이라는 의미)
PrintWriter out = resp.getWriter();
out.println("서버에서 응답해 준 메세지 : ");
out.println("호텔 델루나");
out.flush(); //재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비운다. (깔끔하게 만듦)
out.close(); //외부랑 연결된 자원 닫기
}catch(Exception e){
System.out.println("응답 실패 : "+ e);
}//try end
}//ajaxTest() end
}//class end