JBuilder2005 실제 JSP 스위칭 제어 (3)
저자:Eve Cole
업데이트 시간:2009-07-02 17:10:13
login.jsp 폼의 action 속성을 통해 응답 JSP 파일로 switch.jsp를 지정하므로 사용자가 login.jsp에서 로그인 사용자를 선택하고 비밀번호를 입력하여 폼을 제출하면 클라이언트는 다음으로 HTTP 요청을 보냅니다. 즉, 이 요청에 응답하려면 switch.jsp를 호출하십시오.
양식의 사용자 이름 및 비밀번호 구성 요소 데이터는 HTTP 요청을 통해 서버의 switch.jsp에 전달됩니다. 서버는 이 정보를 요청 개체에 캡슐화하여 switch.jsp에 전달하므로 switch.jsp를 검색할 수 있습니다. request.getParameter(String paraName)을 통해 이 두 값을 가져옵니다.
String userId = request.getParameter("userId"); 문자열 비밀번호 = request.getParameter("password"); |
login.jsp의 형식에 10개 이상의 데이터 구성 요소가 있는 경우 해당 값은 switch.jsp의 해당 개수의 request.getParameter() 메서드를 통해 얻어야 합니다. 또한, 데이터가 필드 스트링 타입이 아니고 정수나 부동소수점 숫자라면 request.getParameter() 메소드에서 반환하는 값이 모두 스트링이기 때문에 이 작업만 수행하면 되는 것이 아니다. 지루하지만 오류가 발생하기 쉽습니다.
JSP를 사용하면 매핑 방식으로 Bean을 통해 웹 양식 데이터를 받을 수 있습니다. Bean은 다음 규칙에 따라 양식 데이터를 매핑합니다. Bean 속성 이름 = 양식 데이터 구성 요소 이름, 즉 동일한 Bean 속성 이름을 가진 모든 양식 데이터 필드가 자동으로 채워집니다. Bean.을 선택하고 데이터 유형 변환을 완료합니다. 예를 들어, login.jsp 양식에는 두 개의 데이터 구성요소가 있습니다. 하나는 userId로 명명되고 다른 하나는 userId 및 비밀번호 속성과 동일한 이름으로 User.java Bean을 정의합니다. 데이터 구성요소 값입니다.
User.java 작성
먼저 User.java Bean을 작성하고 프로젝트에 User.java를 생성해 보겠습니다.
코드 목록 7 User.java
1. 패키지 서점; 2. 3. 공개 클래스 사용자 4. { 5. 개인 문자열 userId;//userId 6. 개인 문자열 비밀번호;//password 7. 개인 문자열 userName;//사용자 이름 8. 공개 문자열 getPassword() { 9. 비밀번호 반환 10. } 11. 공개 문자열 getUserId() { 12. 사용자 ID를 반환합니다. 13. } 14. 공개 문자열 getUserName() { 15. 사용자 이름을 반환합니다. 16. } 17. public void setPassword(문자열 비밀번호) { 18. this.password = 비밀번호; 19. } 20. public void setUserId(String userId) { 21. this.userId = 사용자ID; 22. } 23. public void setUserName(String userName) { 24. this.userName = 사용자이름; 25. } 26. } |
두 가지 속성 이름 userId 및 userName 외에도 이 속성의 값은 login.jsp 양식에서 수신되지 않습니다. 사용자 이름과 비밀번호가 올바르게 확인되면 데이터에서 사용자 이름을 가져옵니다. 테이블 T_USER 테이블을 다른 곳에서 참조할 수 있도록 이 속성에 저장하고 이 클래스를 저장하고 컴파일합니다.
힌트:
JBuilder의 Bean Express 도구를 통해 신속하게 User.java 코드를 생성할 수 있습니다. 일반적인 상황에서는 Bean Express를 통해 Bean 속성을 생성해야 합니다. 이렇게 하면 get/set 속성 액세스 메서드가 자동으로 생성될 뿐만 아니라 Bean 명명 규칙도 보장됩니다. |
페이지 프로그램 작성
User.java의 Bean을 생성한 후 계속해서 switch.jsp를 생성하고 switch.jsp에서 이 Bean을 참조합니다.
파일->새로 만들기..->웹->JSP 아이콘을 두 번 클릭하여 JSP 작성 마법사를 시작하십시오.
1. switch.jsp 이름 지정
그림 10 switch.jsp의 이름 지정 |
마법사의 3단계로 이동하려면 계속해서 다음을 누르세요.
2. 참조 User.java 빈
그림 11 JSP에서 참조되는 Bean 지정 |
Add Bean... 버튼을 클릭하여 클래스 선택 대화 상자를 표시합니다. 다음 그림과 같이 대화 상자에서 bookstore.User 클래스를 선택합니다.
그림 12 클래스를 Bean으로 선택 |
확인을 누른 후 마법사의 3단계 대화 상자로 돌아오면 대화 상자의 Bean 목록에 추가 레코드 행이 ID 열에 지정될 수 있습니다. 아래 그림과 같이 Scope에 Bean의 범위를 지정합니다.
그림 13 빈에 대한 참조 |
User's Bean의 이름을 userBean으로 지정하고 해당 범위를 페이지 도메인으로 설정했습니다. 페이지 도메인은 페이지 범위이며 현재 페이지 범위 내에서 사용할 수 있습니다. JSP가 응답을 반환하거나 요청이 다른 JSP 페이지로 전송되면 다른 세 가지 범위는 다음과 같이 설명됩니다.
·요청 범위: 요청이 생성되면 응답이 반환될 때까지 범위 내에서 유효합니다. 예를 들어 a.jsp에서 요청 범위로 선언된 Bean을 통해 a.jsp가 해당 요청을 b.jsp 페이지로 전달할 때입니다. <jsp:forward> 올해 중반에도 사용 가능합니다.
·세션 범위: 사용자 세션 주기 내에서 사용 가능합니다. 세션 주기는 사용자가 시스템에 로그인한 시점부터 시스템에서 로그아웃할 때까지입니다.
·응용 범위: 이 범위는 가장 길며 웹 컨테이너가 시작될 때까지 닫힐 때까지 유효함을 나타냅니다.
다음 단계로 이동하려면 다음을 누르세요.
3. 실행 구성 항목 설정
마법사의 마지막 단계에서는 생성된 JSP에 대한 런타임 구성 항목을 생성할 수 있습니다. 마법사 세트에서는 기본 옵션으로 런타임 구성 항목을 생성하지만 이는 합리적인 기본값이 아니라고 생각합니다. 런타임 구성 설정 항목을 생성하고 다음 그림과 같이 JSP 실행 구성 항목을 생성하지 마십시오.
Finish 버튼을 눌러 다음 코드로 switch.jsp 파일을 생성합니다.
코드 목록 8 마법사가 생성한 switch.jsp
1. <%@ 페이지 contentType="text/html; charset=GBK" %> 2. <html> 3. <머리> 4. <제목> 5.스위치 6. </제목> 7. </머리> 8. <jsp:useBean id="userBean"scope="page" class="bookstore.User" /> 9. <jsp:setProperty name="userBean" property="*" /> 10. <바디 bgcolor="#ffffff"> 11. <h1> 12. JBuilder가 생성한 JSP 13. </h1> 14. </body> 15. </html> |
8행은 Bean을 참조하는 JSP 태그이다. 9행은 Bean의 속성값을 폼 데이터로 채운다. 즉, 요청 매개변수를 이름 매칭으로 Bean의 속성에 채우는 동시에 타입 변환도 완료한다. 기본 데이터 유형 또는 생성자가 지원하는 경우에만 변환을 완료할 수 있습니다. 9행을 실행한 후 userBean의 userId 및 비밀번호 속성은 login.jsp 페이지에서 전송된 사용자 이름 및 비밀번호 값으로 설정됩니다.
switch.jsp는 제어에만 사용되며 클라이언트에 콘텐츠를 표시할 필요가 없으므로 switch.jsp에서 HTML 코드를 제거하고 switch.jsp를 다음과 같이 조정합니다.
코드 목록 9 정적 HTML 코드를 제거한 후의 switch.jsp
1. <%@ 페이지 contentType="text/html; charset=GBK" %> 2. <jsp:useBean id="userBean"scope="page" class="bookstore.User" /> 3. <jsp:setProperty name="userBean" property="*" /> |
userId와 비밀번호를 데이터베이스로 전송하고 이를 T_USER 테이블의 사용자와 비교하여 합법적인 사용자인지 확인하고, 확인 결과에 따라 다른 페이지로 리디렉션되도록 switch.jsp에 Scriptlet을 제공합니다. switch.jsp의 최종 코드는 다음과 같습니다.
코드 목록 10 최종 switch.jsp
1. <%@page contentType="text/html; charset=GBK"%> 2. <%@page import="bookstore.*"%> 3. <%@page import="java.sql.*"%> 4. <jsp:useBean id="userBean"scope="session" class="bookstore.User"/> 5. <jsp:setProperty name="userBean" property="*"/> 6.<% 7. 연결 연결 = null; 8. {를 시도해보세요 9. conn = DBConnection.getConnection(); 10. 준비된Statement pStat = conn.prepareStatement( 11. "T_USER에서 USER_NAME을 선택합니다. 여기서 USER_ID는?이고 비밀번호는 ?입니다."); 12. pStat.setString(1, userBean.getUserId()); 13. pStat.setString(2, userBean.getPassword()); 14. ResultSet rs = pStat.executeQuery(); 15. if (rs.next()) { //비밀번호가 정확합니다. 16. userBean.setUserName(rs.getString(1));//사용자 이름 설정 17. session.setAttribute("ses_userBean", userBean);//userBean을 세션 객체에 넣습니다. 18. %><jsp:forward page="welcome.jsp"></jsp:forward> 19. <%} else { //비밀번호가 틀렸습니다%> 20. <jsp:forward page="fail.jsp"></jsp:forward> 21.<% 22. }} 마침내 { 23. if(conn != null) conn.close(); 24. } 25. %> |
·2~3행에서는 Scriptlet 코드에 필요한 클래스를 소개합니다.
·코드의 7~14번째 줄은 쿼리 SQL 문을 데이터베이스로 보내고 결과를 반환합니다.
·라인 15에서는 결과 집합의 레코드 수를 확인하여 사용자 비밀번호가 올바른지 간접적으로 확인합니다.
· 16~18행은 올바른 사용자 비밀번호에 대한 응답 코드입니다. 먼저 userBean의 userName 속성 값을 결과 세트의 USER_NAME 속성으로 채운 다음 userBean 객체를 Session에 넣고 마지막으로 Welcome.jsp 페이지로 전환합니다.
·사용자가 잘못된 비밀번호를 입력하면 결과 세트에 기록이 남지 않게 됩니다. 이때 rs.next()는 false를 반환하고 프로그램은 20번째 줄로 이동합니다. 20번째 줄의 코드는 페이지를 잘못된 페이지로 리디렉션합니다. 비밀번호 입력 처리 페이지fail.jsp.
·22~24행의 코드는 데이터베이스 연결을 종료하는 데 사용됩니다.
어쩌면 9~21번째 줄에서 SQLException이 발생하지만 해당 예외 포착 블록이 없다는 것을 발견했을 수도 있습니다. 표준 Java 프로그램에서는 컴파일 타임 오류가 발생하지만 JSP에서는 순차적으로 컴파일될 수 있습니다. 이는 JSP 페이지 자체가 페이지에서 발생한 모든 예외를 포착하기 때문입니다.
사용자 테이블 이름이 실수로 User(정확하게는 T_USER)로 기록되는 등 라인 11의 SQL 쿼리 문에 오류가 있다고 가정합니다. switch.jsp가 호출되면 라인 14에서 SQLException이 발생하고 전환됩니다. jsp는 예외 스택 추적의 추적 정보 페이지를 다음과 같이 표시합니다.
그림 14 끔찍한 오류 처리 페이지 |
위 사진에 보이는 오류 처리 페이지는 밋밋하고 잔인하며 매우 불친절하다고 설명할 수 있습니다. 이런 종류의 오류 보고 페이지는 많은 오류 추적 정보를 제공하므로 개발자에게는 적합할 수 있지만 끝까지는 불가능합니다. 사용자는 이런 종류의 오류 페이지를 수락해야 합니다. JSP를 사용하면 <%@ page errorPage%>를 통해 오류 처리를 위한 JSP 페이지를 구체적으로 지정할 수 있으므로 오류를 친숙하고 직관적인 형식으로 표시할 수 있습니다. 다음 섹션에서는 오류 처리를 위한 JSP 페이지를 생성한 후 switch.jsp에 대한 오류 처리 JSP 페이지를 지정합니다.