일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예외처리
- 제네릭
- oracle
- cursor문
- EnhancedFor
- 예외미루기
- 다형성
- abstract
- 추상메서드
- 환경설정
- 참조형변수
- 컬렉션 타입
- 메소드오버로딩
- GRANT VIEW
- 집합_SET
- 객체 비교
- NestedFor
- 사용자예외클래스생성
- 정수형타입
- 자동차수리시스템
- 생성자오버로드
- 컬렉션프레임워크
- 한국건설관리시스템
- 어윈 사용법
- 오라클
- Java
- 인터페이스
- exception
- 대덕인재개발원
- 자바
- Today
- Total
거니의 velog
(8) 스프링 MVC 기능 3 본문
4. MultiActionController 이용해 회원 정보 표시하기
* 이번에는 로그인창이 아닌, 회원 정보 입력창에서 회원 정보를 입력한 후 요청 시 전송된 회원 정보를 표시해 보자.
1. 회원 정보를 표시하기 위해 action-servlet.xml 을 다음과 같이 수정한다. 회원 정보 요청 URL에 대해 처리할 메서드를 추가한 후 /test/memberInfo.do로 요청하면 요청명과 같은 memberInfo() 메서드를 호출한다.
...
<bean id="userMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/test/login.do">login</prop>
<prop key="/test/memberInfo.do">memberInfo</prop> <!-- URL 요청명과 메서드 이름을 동일하게 하여 회원 정보를 요청한다. -->
</props>
</property>
</bean>
...
2. UserController 클래스를 다음과 같이 수정한다. 회원 가입창에서 전송된 회원 정보를 가져온 후 ModelAndView를 이용해 회원 정보를 바인딩하여 memberInfo.ksp로 전달하는 memberInfo() 메서드를 추가한다.
...
public ModelAndView memberInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
ModelAndView mav=new ModelAndView();
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email=request.getParameter("email");
mav.addObject("id",id);
mav.addObject("pwd",pwd);
mav.addObject("name",name);
mav.addObject("email",email); // 회원 가입창에서 전송된 회원 정보를 addObject() 메서드를 이용해 ModelAndView 객체에 바인딩한다.
mav.setViewName("memberInfo"); // memberInfo.jsp로 포워딩한다.
return mav;
}
...
3. 회원 가입창에서 회원 정보를 입력한 후 /test/memberInfo.do로 요청하도록 action 속성을 설정한다.
[memberForm.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ 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>
<style>
.text_center {
text-align: center;
}
</style>
</head>
<body>
<form method="post" action="${contextPath}/test/memberInfo.do">
<h1 class="text_center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200">
<p align="right">아이디</p>
</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200">
<p align="right">비밀번호</p>
</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200">
<p align="right">이름</p>
</td>
<td width="400">
<p><input type="text" name="name"></p>
</td>
</tr>
<tr>
<td width="200">
<p align="right">이메일</p>
</td>
<td width="400">
<p><input type="text" name="email"></p>
</td>
</tr>
<tr>
<td width="200">
<p> </p>
</td>
<td width="400"><input type="submit" value="가입하기"><input type="reset" value="다시입력"></td>
</tr>
</table>
</form>
</body>
4. memberInfo.jsp를 다음과 같이 작성한다. UserController의 memberInfo() 메서드에서 바인딩해 전달된 회원 정보를 출력한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<table border="1" align="center" width="100%">
<tr align="center" bgcolor="lightgreen">
<td><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
</tr>
<tr align="center">
<td>${id}</td>
<td>${pwd}</td>
<td>${name}</td>
<td>${email}</td>
</tr>
</table>
</body>
</html>
5. 다음의 주소로 요청하여 새 회원 정보를 입력하고 가입하기를 클릭하면 /test/memberInfo.do로 요청한 후 전송된 회원 정보를 출력한다.
- http://localhost:8090/pro21/test/memberForm.jsp
다음 표는 앞의 MultiActionController를 이용한 실습 예제들의 요청명과 수행하는 메서드 이름의 관계를 나타낸 것이다. MultiActionController와 PropertiesMethodNameResolver를 이용하면 요청명과 같은 이름으로 메서드를 설정할 수 있어 코드 가독성이 좋다.
< MultiActionController와 PropertiesMethodNameResolver를 이용한 메서드 이름 설정 방법 >
요청명 | 호출 메서드 이름 |
/test/login.do | login() |
/test/memberInfo.do | memberInfo() |
5. 요청명과 동일한 JSP 표시하기
* 앞서 우리는 실습 예제를 통해 요청명과 동일한 이름의 메서드를 호출했다. 이번에는 요청명과 동일한 JSP를 출력해 보자.
1. 3번째 예제에서 사용했던 UserController 클래스를 다음과 같이 수정한다. URL 요청명에서 .do를 제외한 요청명을 가져오는 메서드인 getViewName()을 추가한 후 request 객체를 getViewName() 인자로 전달하여 URL 요청명에서 .do를 제외한 뷰이름을 가져온다(/test/login.do 인 경우 login을 가져온다). 그리고 setViewName() 을 이용해 뷰이름으로 설정하면 /test/login.do로 요청시 폴더 이름을 포함한 JSP 이름은 /test/login.jsp가 된다(단, login.jsp는 새로 만들어야 한다).
package com.spring.ex02;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class UserController extends MultiActionController {
/*public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
String userID = "";
String passwd = "";
ModelAndView mav = new ModelAndView();
request.setCharacterEncoding("utf-8");
userID = request.getParameter("userID");
passwd = request.getParameter("passwd");
mav.addObject("userID", userID);
mav.addObject("passwd", passwd);
mav.setViewName("result");
return mav;
}*/
public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
String userID = "";
String passwd = "";
String viewName=getViewName(request); // getViewName() 메서드를 호출해 요청명에서 확장명 .do를 제외한 뷰이름을 가져온다.
ModelAndView mav = new ModelAndView();
request.setCharacterEncoding("utf-8");
userID = request.getParameter("userID");
passwd = request.getParameter("passwd");
mav.addObject("userID", userID);
mav.addObject("passwd", passwd);
//mav.setViewName("result");
mav.setViewName(viewName); // 뷰이름을 지정한다.
System.out.println("ViewName:"+viewName);
return mav;
}
public ModelAndView memberInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
ModelAndView mav=new ModelAndView();
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email=request.getParameter("email");
mav.addObject("id",id);
mav.addObject("pwd",pwd);
mav.addObject("name",name);
mav.addObject("email",email);
mav.setViewName("memberInfo");
return mav;
}
private String getViewName(HttpServletRequest request) throws Exception { // request 객체에서 URL 요청명을 가져와 .do를 제외한 요청명을 구한다.
String contextPath = request.getContextPath();
String uri = (String)request.getAttribute("javax.servlet.include.request_uri");
if(uri == null || uri.trim().equals("")) {
uri = request.getRequestURI();
}
//http://localhost:8090/member/listMember.do로 요청시
int begin = 0; //
if(!((contextPath==null)||("".equals(contextPath)))){
begin = contextPath.length(); // 전체 요청명 의 길이를 구함
}
int end;
if(uri.indexOf(";")!=-1){
end=uri.indexOf(";"); //요청 uri에 ';'가 있을 경우 ';'문자 위치를 구함
}else if(uri.indexOf("?")!=-1){
end=uri.indexOf("?"); //요청 uri에 '?'가 있을 경우 '?' 문자 위치를 구함
}else{
end=uri.length();
}
//http://localhost:8090/member/listMember.do로 요청시 먼저 '.do'를 제거한 http://localhost:8090/member/listMember를 구한 후,
//다시 http://localhost:8090/member/listMember에서 역순으로 첫번째 '/' 위치를 구한 후, 그 뒤의 listMember를 구한다.
String fileName=uri.substring(begin,end);
if(fileName.indexOf(".")!=-1){
fileName=fileName.substring(0,fileName.lastIndexOf(".")); //요청명에서 역순으로 최초 '.'의 위치를 구한후, '.do' 앞에까지의 문자열을 구함
}
if(fileName.lastIndexOf("/")!=-1){
fileName=fileName.substring(fileName.lastIndexOf("/"),fileName.length()); //요청명에서 역순으로 최초 '/'의 위치를 구한후, '/' 다음부터의 문자열을 구함
}
return fileName;
}
}
2. 다음의 주소로 요청한 후 아이디와 비밀번호를 입력하고 로그인을 클릭한다. 그러면 /test/login.do로 요청하므로 login.jsp에 결과를 출력한다.
[login.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ 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>
<table border="1" width="50%" align="center">
<tr align="center">
<td>아이디</td>
<td>비밀번호</td>
</tr>
<tr align="center">
<td>${userID}</td>
<td>${passwd}</td>
</tr>
</table>
</body>
</html>
- http://localhost:8090/pro21/test/loginForm.jsp
* 이번 실습에서는 보여줄 뷰이름을 개발자가 일일이 직접 코딩하지 않고 URL 요청명에서 뷰이름을 가져와 일정하게 연동시켰다. 실제 프로그래밍에서도 URL 요청명을 컨트롤러에서 호출되는 메서드 이름 그리고 보여주는 JSP 페이지 이름과 일치하도록 구현함으로써 가독성을 높일 수 있다. 또한 이렇게 하면 유지관리도 편하다.
* 마지막으로, 우리는 회원 가입창을 요청하고 브라우저 주소창에서 직접 memberForm.jsp로 입력했다. 이 역시 요청명에서 뷰이름을 가져와서 보여줄 수 있다. 즉, /memberForm.do로 요청하면 컨트롤러에서 memberForm() 메서드를 호출해 보여주고, 회원 정보를 입력한 후 등록을 요청하면 회원 정보를 보여줄 수 있다. 이는 직접 만들어 보기 바란다.
'Java_Spring Framework part1' 카테고리의 다른 글
(10) 마이바티스 프레임워크 사용하기 1 (0) | 2023.10.28 |
---|---|
(9) 스프링 JDBC 기능 (0) | 2023.10.28 |
(7) 스프링 MVC 기능 2 (0) | 2023.10.04 |
(6) 스프링 MVC 기능 1 (0) | 2023.10.03 |
(5) 스프링 AOP 기능 (0) | 2023.10.03 |