-
JSP내장객체정리, 로그인하기(jsp버전)JAVA 2021. 7. 25. 00:41
1. JSP 내장객체(Implicit Object: 내포된 객체)
jsp란 java의 서버규격이다.
window 10(OS) -- webserver(여러 JSP) -- webapp(회원등록창, 게시물등록) 등이 차례로 시작된다.
* 도커로 linux 환경구축시 = 가상화
Linux (OS)컨테이너 -- webserver(여러 JSP) -- webapp(회원등록창, 게시물등록)
요청객체(request)와 응답객체(response)
요청객체와 응답객체는 특정요청에 대한 전용객체로 1요청 1요청객체&응답객체들로 만들어진다.
( 즉 , 로그인준비.jsp 요청시 : 받아오는 요청객체, 로그인창HTML을 주는 응답객체 1쌍.
준비에서 action 으로 로그인.jsp 요청시 : 받아오는 요청객체, 업무규칙검사(존재여부확인) 후 결과HTML을 주는 응답객체 1쌍
요청마다 따로 생긴다.)
JSP 서버: 클라이언트의 IP, PORT , DATA, 요청URL 을 가져온다(그래야 던져주니까)
이 객체들의 요청이 오면 생기고 응답한 후 없어진다. 이것이 생명주기이다.
응답하며 요청한 클라이언트의 정보들(위에정리)을 세션에 넘긴다.
세션객체( session ) - 계속 ( 첫 요청&응답객체들에게 정보를 받아 다음 요청시 필요한 정보를 꺼내쓸 수 있다.)
- request : 요청객체 ( 응답완료시 사라짐 )
- response : 응답객체 ( 응답완료시 사라짐 )
- session : 세션객체 ( 서버 종류시 사라짐//내용도 함께 )
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true"%>
session = "true" 는 default 값으로 생략되어 있다. session 객체가 만들어져있어 사용할 수 있다는 의미이다.
("false" 로 넣으면 생성되지 않는다.)
1-1. session 객체
webserver(web-project)에 한개의 IP당 하나의 세션공간이 있다.
따라서 한 개의IP로 들어왔을 때 web-project 의 jsp 파일들은 같은 세션공간이라서
a.jsp 에서 세션공간에 저장한 값을 b.jsp 에서 꺼내올 수 있다.
아래가 예제이다.
>> a.jsp
- setAttribute("name", value) : 세션에 name 라는 이름으로 value값을 설정해 넣는다. (한번 run시켜야 값이 설정된다!!)
<% int a = 7; session.setAttribute("a", a); // 세션에 name라는 이름으로 value값을 설정해 넣는다. %>
>> b.jsp
- getAttribute("name") : 세션에 name 이라는 이름의 value값을 가져온다.
(보관한 값의 자료형을 판단하지 않았기 때문에 꺼낼 때 형변환 필요)
<% int 가져온값 = (Integer)session.getAttribute("a"); System.out.println(가져온값); %>
1-2. response 객체
- sendRedirect("name.jsp") : 응답객체가 조건에 의해 다시 direct를 보내줌.
( 특정 활동이 끝난 후 다시 name.jsp 로 위치를 보내버림 .)
- setCharacterEncoding() : 어떤 인코딩으로 설정할지 미리 정해놔야한다.
if(존재하는회원){ response.setCharacterEncoding("uft-8"); response.sendRedirect("main.jsp"); }
2. location : browser 내장 객체(BOM)
- href 속성 : 프로그램적으로 주소를 요청 ( 브라우저가 요청한다 )
3. LOGIN
>> 회원DAO.java
public class 회원DAO { public String 존재회원인가(String id, String password) { String 성명 = null; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD); PreparedStatement st = c.prepareStatement("select 성명 from 회원 where 아이디 = ? and 패스워드 = ?"); st.setString(1, id); st.setString(2, password); ResultSet set = st.executeQuery(); if(set.next()) { 성명 = set.getString("성명"); } set.close(); c.close(); }catch(Exception e){ e.printStackTrace(); } return 성명; }
아이디와 패스워드를 매개로 받아 where절에 넣고 가져오는 열은 성명으로 성명열의 값을 return 하는 메서드다.
만약 where절에서 없다면 성명은 안나올 것이고 null로 return 한다.
>> main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); String 성명 = (String)session.getAttribute("name"); boolean 로그인중 = (성명==null)? false:true; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>메인 내용</h1> <a href="로그인후사용가능.jsp">로그인후사용가능경로</a> <% if(!로그인중){ %> <form action="로그인.jsp" method="post"> ID <input type="text" name="id"><br> password <input type="password" name="password"><br> <input type="submit" value="로그인"> </form> <input type="button" value="회원등록" onclick="location.href='회원등록준비.jsp'"> <% } else { %> <%= 성명 %> 님 환영합니다. <button onclick="location.href='로그아웃.jsp'">로그아웃</button> <% } %> </body>
>> 로그인.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% // 1. 업무규칙검사 // 1-1. 회원가입여부 검사 boolean 존재하는회원 = true; String 성명= "가길동"; // 세션기록 if(존재하는회원){ session.setAttribute("name", 성명); } // 경로 if(존재하는회원){ response.sendRedirect("main.jsp"); }else{ response.setCharacterEncoding("UTF-8"); response.sendRedirect("prepare_login.jsp"); } %>
>> 로그아웃.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% session.removeAttribute("name"); response.setCharacterEncoding("UTF-8"); response.sendRedirect("prepare_login.jsp");//이 jsp의 html은 비어있고 똑같이 쓰는건 낭비다. 그래서 다시 main.jsp로 돌려보냄 %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> </body> </html>
'JAVA' 카테고리의 다른 글
게시물상세(model2.ver) (0) 2021.07.25 RequestDispatcher,forward(),게시물등록(model2.ver) (0) 2021.07.25 회원등록.ver2,PreparedStatement(jsp버전) (0) 2021.07.25 회원등록(jsp버전) (0) 2021.07.25 게시물Paging+페이지블럭(jsp버전),DAO (0) 2021.07.25