본문 바로가기
개발로그/JSP

JSP 18일차

by 쩜징 2022. 12. 31.

JSP 18일차


올해의 마지막 수업!

한달동안 수업을 들으면서

머릿속에 새로 들어오는 내용들이 많아서

버거울 때가 많았지만

내년에 있을 국비지원 수업을 위해

기초를 탄탄히 다질

시간을 가질 수 있었던 것 같아서

참 의미있는 시간들이였다.

 

두려움이 살짝 사라지는 느낌?

 

하지만, 아직 알아야 하는 것도 많고

지금 배웠던 것들은 또 실제 업무에서

어떻게 바뀔지 모르니

긴장을 놓치지 않는 걸로-!

암튼 오늘 수업 시작


ex5.jsp

저번 시간에 했던 예제5번의 내용을 추가했다.

<%session.setAttribute("name","박참조"); %>

<c:set var="name" value="박참조" scope="session" />

이렇게 session값을 불러오는 것도 가능하다는거 ~


ex7_login

[로그인 폼]

퀴즈

아이디/비밀번호를 전달받아 null or 빈문자열인지 체크

아이디/비밀번호가 admin/1234와 같으면 ex7_loginSuccess.jsp로 이동하고

같지 않으면 ex7_login.jsp로 이동한다.

제약조건 : <%%> <%=%> 두 태그는 사용하지 않는다.

ex7_LoginCheck

jstl을 사용할 수 있도록 core와 fmt uri를 가져오고

이전에 했던 작업들을

jstl 과 ul을 적절하게 사용해서

적용시켜 보았다.

 

++추가된 내용

<c:redirect url="ex7_loginSuccess.jsp"/>

<c:redirect url=""> → response.sendRedirect('')와 같은 역할

ex7_loginSuccess

ex7_loginSuccess 화면에서는

session의 아이디값이 비어있으면

로그인 페이지로 이동하고

로그인에 성공하면 

입력한 id의 값 + 님 로그인 되었습니다.가 출력된다.

 

위 조건상 id는 admin이 되어야 하므로

admin님 로그인 되었습니다. 가 출력된다.


ex7 결과

1) id와 pw가 비어있을 때

'필수 정보입니다.' 경고창 

 

2) id가 admin이거나 pw가 1234 일치해야 함

불일치하면 '아이디/비밀번호를 확인하세요.' 경고창

 

3) 로그인 성공하면

admin님 로그인 되었습니다.

ex7_loginSuccess.jsp페이지 이동


폴더 생성

class를 만들 actionTag패키지

jsp파일을 만들 actionTag폴더를 생성해준다.

 

액션태그란?

JSP 페이지에서 자바 코드 등의 스크립트 언어를 사용하지 않고도

(즉, HTML 태그 형태로)

다른 페이지의 서블릿이나 자바빈의 객체에

접근할 수 있도록 태그를 이용해 구현된 기능을 말한다.

beanFormEx1

사용자의 입력값을

beanResultEx1.jsp에 출력하는 유형

이전에 많이 했었던 과정이지만

액션태그를 사용할 것이기 때문에

객체를 생성할 자바파일이 필요하다.

Ex1.java

Ex1이라는 객체를 생성해서

문자 데이터를 받을 getter와 setter를 만든다.

beanResultEx1

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

out.print("data : " + request.getParameter("data"));  //스크립트릿으로 매개변수를 받아 출력하는 방법

%>

 

<!-- Ex1 ex1 = new Ex1(); -->

<jsp:useBean id="ex1" class="actionTag.Ex1" />  //액션태그로 객체 생성

 

<!-- ex1.setData(request.getParameter("data")); -->

<jsp:setProperty property="data" name="ex1"/>  //setter로 불러오기

 

<!-- out.print("data : " + ex1.getData()); -->

<br>

data : <jsp:getProperty property="data" name="ex1"/>  //getter로 불러오기

<br>

data : ${ex1.getData()}  //el로 getData()출력

<br>

data : ${ex1.data //el로 출력

<jsp:useBean id="Bean이름" scope="범위" class="Bean의 저장위치"/>

<jsp:setProperty name="Bean이름" property="속성이름"> Bean의 속성에 값을 설정하는 태그

<jsp:getProperty name="Bean이름" property="속성 이름"> Bean의 속성 값을 얻을 때 사용하는 태그


beanEx1 결과


beanFormEx2

Ex1과 똑같지만

이번엔 데이터를 많이 입력받는

유형을 연습해보았다.

Ex2.java

자바 클래스 파일을 만들어

객체의 변수를 선언하고

getter와 setter를 만든다.

beanResultEx2


<jsp:useBean id="ex2" class="actionTag.Ex2" /> 객체 생성

<jsp:setProperty propert="*" name="ex2"> ex2안에 있는 모든 값을 설정할 준비 완료

 

출력할 때는

스크립트릿 안에 getter 사용해서 가져오는 방법과

el로 가져오는 방법 두가지를 사용했다.

beanEx2 결과


dbconcept 프로젝트에서 썼던

session자바 패키지들과

session폴더를

지금 프로젝트에 복사했다.

(좌) dbconcept index.jsp (우) other index.jsp

같은 화면을 구현하지만

dbconcept에서는 자바식으로

other에서는 jslt과 el을 사용해서

다른 방식으로 구현했다.

 

String id = (String)session.getAttribute("id");

if(id==null)

→ <c:when test="${empty sessionScope.id }">

 

else{} → <c:otherwise></c:otherwise>


(좌) dbconcept LoginService (우) other LoginService

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<fmt:requestEncoding value="UTF-8" />

 

<c:set var="regex" value="^[a-z0-9]{1}[a-z0-9_-]{4,19}$" /> //변수 선언

<c:set var="pattern" value="${Pattern.compile(regex)}" />

<c:set var="m" value="${pattern.matcher(param.id)}" />

<c:set var="regexResult" value="${m.matches()}" />

<c:choose>

 <c:when test="${empty param.id || empty param.pw}"> //매개변수 id와 pw가 비어있을 때 검증

  <script>

   alert('아이디 / 비밀번호를 확인하세요.');

   location.href='login.jsp';

  </script>

 </c:when>

 <c:when test="${regexResult == false }"> //정규표현식에 맞지 않을 때 검증

  <script>

   alert('5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능합니다.');

   location.href='login.jsp';

  </script>

 </c:when>

 <c:otherwise> //else일 때 memberDao 객체 생성 후 id를 가져오는 check변수 생성

  <jsp:useBean id="memberDao" class="session.MemberDAO" />

  <c:set var="check" value="${memberDao.selectId(param.id) }" />

 

  <c:choose>

   <c:when test="${not empty check && check.pw == param.pw}"> //check데이터가 비어있지 않고 비번이 일치하면

    <c:set var="id" value="${check.id }" scope="session" />  //session값을 가져 올 변수 생성(로그인 성공)

    <c:set var="name" value="${check.name }" scope="session" />

    <c:set var="email" value="${check.email }" scope="session" />

    <script>

     alert('로그인 성공');

     location.href='index.jsp';

    </script>

   </c:when>

   <c:otherwise> //if 조건 만족하지 않을 때 경고창 띄우고 login페이지 이동

    <script>

     alert('아이디 / 비밀번호를 확인하세요.');

     location.href='login.jsp';

    </script>

   </c:otherwise>

  </c:choose>

 </c:otherwise>

</c:choose>


other memberService_1
other memberService_2

위의 LoginService처럼

여러가지 검증을 해주고

회원가입에서는 id가 중복되지 않게 

추가적으로 검증을 해준다.

<jsp:useBean id="memberDao" class="session.MemberDAO"/>

<c:set var="check" value="${memberDao.selectId(member.id) }"/>

.

.

<c:when test="${empty check}">

${memberDao.insert(member) }


list.jsp는

원래 내용이 많기도 했고

연산과 형변환 등이 있어서

jstl과 el, 그리고 액션태그 만으로

대체할 수 없었고

자바 코드가 조금씩 필요했다.

other list_1
other list_2
other list_3

이전 프로젝트에서 썼던 코드들을 읽고

하나씩 찬찬히 대입해보고

잘 안되는 것들은 이유를 잘 찾아보면서

자바 코드와 함께 병행하는

방법을 찾아볼 것이다.

 


어느새 2022년의 마지막 날이 다가왔다.

늦은 나이에

또 지금의 경제 상황 속에서

수많은 고민들을 겪고

개발자라는 직업에 도전해보자

어렵사리 결정했지만

아직도 내가 잘해낼 수 있을지 미지수다.

 

하지만 이렇다 저렇다

핑계를 늘어놓기엔 시간 아까우니까

최대한 공부하는 거에 집중하고

 

새해가 밝아오고 그 이후부터의 나는

처음 흥미를 가지고 재밌게 공부했을 때를

떠올리며 쉽게 무너지지 않았으면 한다.

2022년 안뇽 Bye

반응형

댓글