250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
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
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (JSP,SESSION,로그인, 로그아웃) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (JSP,SESSION,로그인, 로그아웃)

개린이9999 2023. 1. 25. 00:29
728x90

세션을 이용해서 로그인 구현 

 

아이디, 비밀번호 입력-> 로그인 버튼일 클릭 

 

(데이터베이스에있는)입력한 아이디랑 비밀번호가 맞는지 검사한 후\

true일때 -> 세션 생성-> 로그인성공화면으로 이동

 

false일때  -> 로그인 실패 페이지(다시 로그인 페이지)

 

로그인화면 구현

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	if(session.getAttribute("id")!=null){
		response.sendRedirect("loginSucess.jsp");
	}
%>

 <form method="post" action="checkLogin.jsp">
 	아이디 : <input type="text" name="id"> <br>
 	비밀번호 : <input type="password" name="pw"> <br>
 	<input type ="submit" value="로그인">
 </form>
 <br>
 <a href="loginSuccess.jsp">메일</a>

</body>
</html>

 

로그인 아이디, 비밀번호가 맞는 지 확인

<%@page import="org.apache.jasper.tagplugins.jstl.core.Redirect"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	String id ="user";
	String pw = "1234";
	
	String user_id = request.getParameter("id");
	String user_pw = request.getParameter("pw");

	if(id.equals(user_id) && pw.equals(user_pw)) {
		// 세션 생성 
		session.setAttribute("id", user_id);
		
		// 로그인 성공페이지
			response.sendRedirect("loginSuccess.jsp");
	} else {
%>
	<script>
		alert("로그인실패");
		history.go(-1);
	</script>	
<% 			// 실패 -> 다시 로그인페이지
		// response.sendRedirect("loginForm.jsp");
	}
%>

</body>
</html>

로그인 성공화면 구현 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>메일보관함</h1>
<%
	if(session.getAttribute("id")==null){
		response.sendRedirect("loginForm.jsp");
	}
%>
	
	<%=session.getAttribute("id")%>님 환영합니다. <br>
	
	<form method="post" action="logout.jsp">
		<input type="submit" value="로그아웃">
	</form>

</body>
</html>

세션 처리

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	session.invalidate(); // 세션 전부 제거
	
	//session.removeAttribute("id") 특정 세션만 제거/
	
	response.sendRedirect("loginForm.jsp");
%>

</body>
</html>


액션 태그 

forward 

 

<%
	//RequestDispatcher dispatcher = request.getRequestDispatcher("forwardTest.jsp");
	//dispatcher.forward(request, response);
%>

	<!--<jsp:forward page="forwardTest.jsp"></jsp:forward> -->
	
		<jsp:forward page="forwardTest.jsp"/>

위의 3개가 전부 다 같은 뜻 

 

 

 

 


 

param

param(setattribute와 비슷한 개념) -> forward액션태그 안쪽에 넣어서 사용 가능  

< jsp:forward page ="url">

            <jsp:param name="이름" value="값 />

</jsp:forward>

 

forwardForm->forward->forwardTest로 이동 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>껍데기</h1>
	<h2>기존방식</h2>
	<form method="get" action="forward.jsp">
		아이디 :<input type="text" name="id"> <br>
		비밀번호 : <input type="password" name="pw"> <br>
		<input type="radio" name="select" value="user">사용자
		<input type="radio" name="select" value="admin">관리자<br>
		<input type="submit" value="전송">
	</form>
	
	<h2>액션 태그 방식</h2>
	<form method="get" action="actionForward.jsp">
		아이디 :<input type="text" name="id"> <br>
		비밀번호 : <input type="password" name="pw"> <br>
		<input type="radio" name="select" value="user">사용자
		<input type="radio" name="select" value="admin">관리자<br>
		<input type="submit" value="전송">
	</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <%
      String select = request.getParameter("select");
      
      if(select.equals("user")) {
         request.setAttribute("s", "사용자");
      } else {
         request.setAttribute("s", "관리자");
      }
   
      RequestDispatcher dispatcher = request.getRequestDispatcher("forwardTest.jsp");
      dispatcher.forward(request, response);
   %>

   
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>기존방식(포워드)</h1>
	<h2>아이디 : <%=request.getParameter("id")%></h2>
	<h2>권환 : <%=request.getAttribute("s")%></h2>
	
	<h1>액션태그(포워드)</h1>
	<h2>아이디 : <%=request.getParameter("id")%></h2>
	<h2>권환 : <%=request.getParameter("s")%></h2>
	
</body>
</html>

 

 

액션포워드방식

<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<% 
		String select = request.getParameter("select");

		if (select.equals("user")) {
%>
	<jsp:forward page="forwardTest.jsp">
		<jsp:param name="s" value='<%=URLEncoder.encode("사용자","utf-8") %>' />
	</jsp:forward>
<%
		} else {
%>

	<jsp:forward page="forwardTest.jsp">
		<jsp:param name="s" value='<%=URLEncoder.encode("관리자","utf-8") %>' />
	</jsp:forward>

<%
		}
%>

</body>
</html>



include

<%@ include file="주소" %>

<jsp:include page="header.jsp" flush="false/true">

flush="true": 출력 버퍼에 저장된 데이터를 전송  

 

header.jsp 

footer.jsp

actionMain01.jsp

 

actionMain01.jsp부터 실행 

-> 순서대로 읽으면서 header.jsp 로 흐름이 넘어가서header.jsp 실행 

-> 끝나면 다시 흐름이 actionMain01.jsp 넘어옴

-> footer.jsp 로 흐름이 넘어가서 footer.jsp 실행되고

-> 끝나면 다시 흐름이 actionMain01.jsp 넘어옴 나머지코드 실행 후 종료

<%@page import="org.apache.jasper.tagplugins.jstl.core.Redirect"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>여기는  header</h1>

</body>
</html>
<%@page import="org.apache.jasper.tagplugins.jstl.core.Redirect"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>여기는 footer</h1>

</body>
</html>
<%@page import="org.apache.jasper.tagplugins.jstl.core.Redirect"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="header.jsp"%>
	
	<h1>메인페이지</h1>
	<a href="main02.jsp">두번째 페이지</a>

	<%@ include file="footer.jsp"%>
	
</body>
</html>
<%@page import="org.apache.jasper.tagplugins.jstl.core.Redirect"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="header.jsp"%>
	
	<h1>메인02페이지</h1>
	<a href="main01.jsp">첫번째 페이지</a>

	<%@ include file="footer.jsp"%>
	
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<jsp:include page="header.jsp"/>
<h1>메인01페이지</h1>
<a href="actionMain02.jsp">두번째 페이지</a>
<jsp:include page="footer.jsp"></jsp:include>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<jsp:include page="header.jsp"/>
<h1>메인02페이지</h1>
<a href="actionMain01.jsp">첫번째 페이지</a>
<jsp:include page="footer.jsp"></jsp:include>

</body>
</html>

자바 빈 (java bean) 

데이터를 하나하나 전송하는 것 보다 하나로 묶어서 전송하는게 더 효율적임

여러 데이터를 보관하는 하나의 저장소 ( 클래스) 

 

특징

-클래스로 생성: 생성자는 매개변수가 없는 기본생성자를 가져야함

Public class aaa() {

   private String a;

   private int b;

   private doublc c;

}

 

aaa.b=10;

 

-클래스에 변수들을 property 라고 함 접근제한자는 private으로 함 

-프로퍼티들이 private 이므로 getter/setter로 접근

         >get~~ ,set~~~ 으로 만들어짐

 자료형이 boolean 같은 경우는 -> is~~로 

get메서드는 매개변수가 없음 

set메서드는 매겨변수가 하나 이상 존재

-패키지안에 보관 

 

useBean액션태그

useBean 액션태그

형식

<jsp:useBean id="빈이름"  class="빈으로 사용할 클래스">   [scope="사용범위"] />

                                           class="MemberBean" 이거안됨

                                           class="com.study.javabeans.MemberBean" 이렇게 패키지명 등의 경로를 정확하게 써줘야함

 

== MemberBean member = new MemberBean();  이것과 같은것임 (객체생성) 

 

사용범위-

page: 해당 페이지에서만 자바빈객체 사용가능

request: 요청된 페이지까지 사용가능함

session: 브라우저가 열려있는 동안 사용가능

application: 다 사용가능 (서버연결되어있는동안)

 

 

예시

package com.study.javabeans;

public class MemberBean {
		private String name; 
		private String id;
		private String nickName;
		private String pw;
		private String email;
		private String phone;
		
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getId() {
			return id;
		}
		public void setId(String id) {
			this.id = id;
		}
		public String getNickName() {
			return nickName;
		}
		public void setNickName(String nickName) {
			this.nickName = nickName;
		}
		public String getPw() {
			return pw;
		}
		public void setPw(String pw) {
			this.pw = pw;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		public String getPhone() {
			return phone;
		}
		public void setPhone(String phone) {
			this.phone = phone;
		}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<jsp:useBean id="member" class="com.study.javabeans.MemberBean"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 그냥 출력 <br>
	이름: <%=member.getName() %> <br>
	아이디: <%=member.getId() %> <br>
	 
	 setter 설정 <br>
<%
		member.setName("고길동");
		member.setId("goroad");

%>
	setter 설정 후 출력  <br>
	 이름: <%=member.getName() %> <br>
	아이디: <%=member.getId() %>
	 
</body>
</html>


<jsp: getProperty name= "자바빈이름" property="프로퍼티이름"/>

== member.getName();

 

<jsp: setProperty name="자바빈이름" property="프로퍼티이름" value="값"/>

== member.setName

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

<jsp:useBean id="member" class="com.study.javabeans.MemberBean"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 
	 그냥 출력 <br>
	 이름: <jsp:getProperty name="member" property="name"/> <br>
	 아이디: <jsp:getProperty name="member" property="id"/> <br>
	 
	 setProperty 작업 <br>
	 <jsp:setProperty  name="member" property="name" value="고길동"/>
	 <jsp:setProperty  name="member" property="id" value="go"/>


	 설정 후 출력 <br>
	 이름: <jsp:getProperty name="member" property="name"/> <br>
	 아이디: <jsp:getProperty name="member" property="id"/> <br>
	 	
</body>
</html>


자바 빈 이용(위에 거랑 같은)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>회원가입 페이지</h1>
	<form method="post" action="info.jsp">
			이름 : <input type="text" name="name"><br>
			아이디 : <input type="text" name="id"><br>
			닉네임 : <input type="text" name="nickName"><br>
			비밀번호 : <input type="password" name="pw"><br>
			이메일 : <input type="text" name="email"><br>
			전화번호 : <input type="text" name="phone"><br>
			<input type="submit" value="가입">
	</form>



</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("utf-8");%>
<jsp:useBean id="member" class="com.study.javabeans.MemberBean"/>
<jsp:setProperty name="member" property="*"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>정보 출력</h1>
	이름: <jsp:getProperty name="member" property="name"/> <br>
	아이디: <jsp:getProperty name="member" property="id"/> <br>
	닉네임: <jsp:getProperty name="member" property="nickName"/> <br>
	비밀번호: <jsp:getProperty name="member" property="pw"/> <br>
	이메일: <jsp:getProperty name="member" property="email"/> <br>
	전화번호: <jsp:getProperty name="member" property="phone"/> <br>
</body>
</html>



위의 사진처럼 만들어보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h2>게시판 글쓰기</h2>
   <form method="post" action="boardResult.jsp">
      <table border="1">
         <tr>
            <td>작성자</td>
            <td><input type="text" name="name"></td>

         </tr>
         <tr>
            <td>비밀번호</td>
            <td><input type="password" name="pw"></td>
         </tr>
         <tr>
            <td>이메일</td>
            <td><input type="text" size="50" name="email"></td>
         </tr>
         <tr>
            <td>글 제목</td>
            <td><input type="text" size="80" name="title"></td>
         </tr>
         <tr>
            <td height="100px">글 내용</td>
            <td>
            <textarea cols="80" rows="20" name="content"></textarea>
            </td>
         </tr>
         <tr>
      </table>
      <input type="submit" value="등록">
      <input type="reset" value="다시작성">
   </form>
</body>
</html>
package com.study.javabeans;

public class MemberBean {
		private String name; 
		private String pw;
		private String email;
		private String title;
		private String content;
		
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getPw() {
			return pw;
		}
		public void setPw(String pw) {
			this.pw = pw;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		public String getTitle() {
			return title;
		}
		public void setTitle(String title) {
			this.title = title;
		}
		public String getContent() {
			return content;
		}
		public void setContent(String content) {
			this.content = content;
		}
		
		
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("utf-8");%>
<jsp:useBean id="member" class="com.study.javabeans.MemberBean"/>
<jsp:setProperty name="member" property="*"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>입력된 정보</h1>
	작성자: <jsp:getProperty name="member" property="name"/> <br>
	비밀번호: <jsp:getProperty name="member" property="pw"/> <br>
	이메일: <jsp:getProperty name="member" property="email"/> <br>
	제목: <jsp:getProperty name="member" property="title"/> <br>
	내용: <jsp:getProperty name="member" property="content"/> <br>
</body>
</html>

완성


표현언어 EL (이엘) (Expression Language)

${ }

${item.name}

${param.id}

정수 : ${10}<br>
	실수 : ${3.14}<br>
	문자 : ${"표현언어"}<br>
	불린 : ${true}<br>
	널값 : ${null}<br>

널값만 공란으로 나옴, 나머지는 형변환 없이 그대로 나옴

형변환 필요없어서 간편함 

 

+기본적인 연산도 가능

 

<h1>
	\${5+2}=${5+2}<br>
	\${5/2}=${5/2}<br>
	\${5 div 2 }=${5 div 2}<br> <!-- 나누기 -->
	\${5%2 }=${5%2}<br>
	${5 mod 2 }<br> <!-- 나머지 구하기 -->
	${5>2}<br>
	${(5>2) ? "참" : "거짓" } <br>  <!-- 삼항 연산-->
	${(5>2) || (10>20) } <br> 
	</h1>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form method="get" action="elResult.jsp">
	아이디 : <input type="text" name="id"> <br>
	비밀번호 : <input type="password" name="pw"> <br>
	 	<input type="submit" value="전송"> <br>
	</form>

 </body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	예전 하던 방식<br>
	아이디: <%= request.getParameter("id") %> <br>
	비밀번호: <%= request.getParameter("pw") %> <br>
	<br>
	표현언어(EL)<br>
	아이디: ${param.id}<br>
	비밀번호: ${param.pw}<br>

	

 </body>
</html>

내장객체 보다 EL을 이용하면 훨씬 간편하게 이용 가능 

${param.이름} ==<%= request.getParameter("이름 ") %>

 

String[] xx = request.getParameterValues("이름");

${paramValues.이름} => JSTL 할 때 

 

표현언어 장점 비교

이퀄같은 것 없이 바로 비교 가능한 점 확인가능 

 

폼에서 숫자 두개 입력해서 전송 누르면

결과부분에서 두 수의 합이 출력

예전방식+ EL 방식

728x90