일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 생성자오버로드
- 메소드오버로딩
- abstract
- 오라클
- 다형성
- 자동차수리시스템
- 예외처리
- GRANT VIEW
- 환경설정
- 컬렉션 타입
- oracle
- 인터페이스
- cursor문
- exception
- 참조형변수
- 집합_SET
- 컬렉션프레임워크
- 정수형타입
- 예외미루기
- 자바
- 어윈 사용법
- 한국건설관리시스템
- EnhancedFor
- 추상메서드
- Java
- 대덕인재개발원
- NestedFor
- 사용자예외클래스생성
- 제네릭
- 객체 비교
- Today
- Total
거니의 velog
(19) 스프링 애너테이션 기능 2 본문
3. 스프링 애너테이션 이용해 로그인 기능 구현하기
* 이번에는 스프링 애너테이션을 이용해 로그인 기능을 구현해 보자.
1. 다음은 로그인 기능과 관련된 자바 파일과 JSP 위치이다.
2. 실습 시 한글 깨짐 현상을 방지하기 위해 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>
3. 스프링 애너테이션 기능을 이용해 로그인 시 전송된 ID와 이름을 JSP에 출력하도록 LoginController 클래스를 작성한다. method={RequestMethod.GET, RequestMethod.POST}) 설정은 GET 방식과 POST 방식을 모두 처리할 수 있다. 또한 @RequestMapping(...)을 사용하면 한 메서드에 여러 개의 요청 URL을 설정하여 동시에 호출할 수 있다.
package com.spring.ex02; // com.spring 하위 패키지에 클래스가 위치해야 애너테이션이 적용된다.
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
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("loginController") // 컨트롤러 빈을 자동으로 생성한다.
public class LoginController {
@RequestMapping(value = { "/test/loginForm.do", "/test/loginForm2.do" }, method = { RequestMethod.GET }) // /test/loginForm.do와 /test/loginForm2.do로 요청 시 loginForm()을 호출한다.
public ModelAndView loginForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView();
mav.setViewName("loginForm");
return mav;
}
@RequestMapping(value = "/test/login.do", method={RequestMethod.GET, RequestMethod.POST}) // GET 방식과 POST 방식 요청 시 모두 처리한다.
public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
String userID = request.getParameter("userID");
String userName = request.getParameter("userName");
mav.addObject("userID", userID);
mav.addObject("userName", userName);
return mav;
}
}
4. 로그인창에서 ID와 이름을 전송하도록 loginForm.jsp를 다음과 같이 작성한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form method="post" action="${contextPath}/test/login.do">
<!-- <input type="hidden" name="email" value="hong@test.com" /> -->
<table width="400">
<tr>
<td>아이디 <input type="text" name="userID" size="10"></td>
</tr>
<tr>
<td>이름 <input type="text" name="userName" size="10"></td>
</tr>
<tr>
<td>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
5. 로그인창에서 전송된 ID와 이름이 결과창에 나타나도록 result.jsp를 다음과 같이 작성한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<h1>아이디 : ${userID }</h1>
<h1>이름 : ${userName }</h1>
</body>
</html>
6. 다음의 주소로 요청하여 로그인 창에 ID와 이름을 입력한 후 로그인을 클릭한다.
- http://localhost:8090/pro26/test/loginForm.do
7. http://localhost:8090/pro26/test/login.do로 요청을 보낸다.
(1) 메서드에 @RequestParam 적용하기
* 지금까지는 브라우저에서 매개변수를 전송하면 getParameter() 메서드를 이용해 값을 얻었다. 그런데 전송되어 온 매개변수의 수가 많아지면 일일이 getParameter() 메서드를 이용하는 방법은 불편하다. 이번에는 @RequestParam을 메서드에 적용해 쉽게 값을 얻는 방법을 알아보자. @RequestParam을 이용해 로그인창에서 전송받은 매개변수를 설정한 후 브라우저에서 매개변수를 전달하면 지정한 변수에 자동으로 값이 설정된다. 그러면 getParameter() 메서드를 이용하지 않아도 된다.
1. spring.ex02 패키지를 만들고 LoginController 클래스를 다음과 같이 작성한다.
@RequestMapping(value = "/test/login2.do", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView login2(@RequestParam("userID") String userID, // @RequestParam을 이용해 매개변수가 userID이면 그 값을 변수 userID에 자동으로 설정한다.
@RequestParam("userName") String userName, // @RequestParam을 이용해 매개변수가 userName이면 그 값을 변수 userName에 자동으로 설정한다.
HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
// String userID = request.getParameter("userID");
// String userName = request.getParameter("userName"); // getParameter() 메서드를 이용할 필요가 없다.
System.out.println("userID: "+userID);
System.out.println("userName: "+userName);
mav.addObject("userID", userID);
mav.addObject("userName", userName);
return mav;
}
2. 로그인 창에서 ID와 이름을 컨트롤러로 전송하도록 loginForm.jsp를 작성한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form method="post" action="${contextPath}/test/login2.do">
<!-- <input type="hidden" name="email" value="hong@test.com" /> -->
<table width="400">
<tr>
<td>아이디 <input type="text" name="userID" size="10"></td> <!-- @RequestParam에서 설정한 userID와 같다. -->
</tr>
<tr>
<td>이름 <input type="text" name="userName" size="10"></td> <!-- @RequestParam에서 설정한 userName과 같다. -->
</tr>
<tr>
<td>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
3. 다음의 주소로 요청하여 ID와 이름을 입력하고 로그인을 클릭한다.
- http://localhost:8090/pro26/test/loginForm.do
4. 그러면 http://localhost:8090/pro26/test/login2.do로 요청을 보내어 다음과 같은 결과 화면을 출력한다.
(2) @RequestParam의 required 속성 사용하기
* 로그인하는 경우 ID와 비밀번호 같은 정보는 반드시 컨트롤러에 전달되어야 한다. @RequestParam의 required 속성을 이용하면 반드시 전달해야 하는 필수 매개변수인 경우와 그렇지 않은 경우를 설정할 수 있다.
- @RequestParam 적용 시 required 속성을 생략하면 기본값은 true 이다.
- required 속성을 true로 설정하면 메서드 호출 시 반드시 지정한 이름의 매개변수를 전달해야 한다(매개변수가 없으면 예외가 발생한다).
- required 속성을 false로 설정하면 메서드 호출 시 지정한 이름의 매개변수가 전달되면 값을 저장하고 없으면 null을 할당한다.
1. loginController 클래스를 다음과 같이 작성한다.
@RequestMapping(value = "/test/login2.do", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView login2(@RequestParam("userID") String userID, // required 속성을 생략하면 required의 기본값은 true 이다.
@RequestParam(value="userName", required=true) String userName, // required 속성을 명시적으로 true로 설정한다.
@RequestParam(value="email", required=false) String email, // required 속성을 명시적으로 false로 설정한다.
HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
ModelAndView mav = new ModelAndView();
mav.setViewName("result");
System.out.println("userID: "+userID);
System.out.println("userName: "+userName);
System.out.println("email: "+ email);
mav.addObject("userID", userID);
mav.addObject("userName", userName);
return mav;
}
2. 로그인 창에서 <hidden> 태그를 이용해 이메일 정보를 컨트롤러로 전송한다.
[loginForm.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form method="post" action="${contextPath}/test/login2.do">
<input type="hidden" name="email" value="hong@test.com" />
<table width="400">
<tr>
<td>아이디 <input type="text" name="userID" size="10"></td> <!-- @RequestParam에서 설정한 userID와 같다. -->
</tr>
<tr>
<td>이름 <input type="text" name="userName" size="10"></td> <!-- @RequestParam에서 설정한 userName과 같다. -->
</tr>
<tr>
<td>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
3. 브라우저에 요청하여 로그인 창이 나타나면 ID와 비밀번호를 입력하고 로그인을 클릭하면 콘솔에 이메일 정보를 출력한다.
- http://localhost:8090/pro26/test/loginForm.do
4. 로그인 창에서 이메일 관련 <hidden> 태그를 주석 처리한 후 요청하면 이메일 정보를 null로 출력한다.
'Java_Spring Framework part1' 카테고리의 다른 글
(21) 스프링 애너테이션 기능 4 (0) | 2023.11.13 |
---|---|
(20) 스프링 애너테이션 기능 3 (0) | 2023.11.11 |
(18) 스프링 애너테이션 기능 1 (0) | 2023.11.11 |
(17) 스프링 트랜잭션 기능 사용하기 2 (0) | 2023.11.11 |
(16) 스프링 트랜잭션 기능 사용하기 1 (0) | 2023.11.11 |