본문 바로가기

Java/JSP

07.06 JSP 실습문제 풀이, 에러페이지 , 간단한 양방향 암호화

값이 있는지 JS로 확인하는 파일

/**

* js/input.js

* 작성되지 않은 것을 알려주고, submit 이벤트 무시.

*/

// 문서가 모두 로드 되면 실행 할 함수

window.onload = function(){

var input

= document.getElementsByTagName("input");

var btn = document.querySelector("button");

btn.onclick = function(event){

for(var i=0; i<input.length; i++){

// 작성된 value 값이 없을 때

// 작성이 안된 요소를 찾아서 이름이 msg인 것을 불러옴.

if(input[i].value.length == 0){

var msg = input[i].dataset.msg+"를 확인해주세요.";

alert(msg);

input[i].focus();

// submit 기본 이벤트 무시

event.preventDefault();

// 반복문 종료

break;

}

}

}

}


<!-- joinCheck.jsp -->

<%request.setCharacterEncoding("utf-8");%>

 

<!-- 현재 페이지에서만 사용하도록 scope지정x(page가 디폴트) -->

<jsp:useBean id="joinMember" class="vo.MemberVO"/>

<jsp:setProperty name="joinMember" property="*" />

<!-- List<MemberVO> memberList = new ArrayList(); -->

<!-- application영역에 이미 존재하면 그대로 가지고 올거고, 아니면 생성한다. -->

<jsp:useBean id="memberList" type="java.util.List<vo.MemberVO>" class="java.util.ArrayList" scope="application"/>

useBean 사용할 때 

 해당 scope영역에 이미 존재하면 그대로 가지고 올거고, 아니면 생성한다

 


동적 페이지 구현

 

<%@ page pageEncoding="UTF-8"%>

<%

// 동적 화면구성 (header에 경로 수정해줘야함)

 

String selectedPage = request.getParameter("page");

// info, join, login, default

if(selectedPage == null){

selectedPage = "default";

}

%>

<jsp:include page="common/header.jsp" />

<section>

<jsp:include page='<%=selectedPage+".jsp"%>'/>

</section>

<jsp:include page="common/footer.jsp" />

 

header에 경로 설정해놓은 것  참고하기.

<%@ 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>

<link href="css/common.css" rel="stylesheet" type="text/css">

</head>

<body>

<header>

<ul>

<li><a href="index.jsp">HOME</a></li>

<!-- 로그인 상태 -->

<li><a href="index.jsp?page=info"> <!-- 회원이름 --> </a>님 반갑습니다.</li>

<li><a href="logOut.jsp">로그아웃</a></li>

 

<!-- 비 로그인 상태 -->

<li><a href="index.jsp?page=login">로그인</a></li>

<li><a href="index.jsp?page=join">회원가입</a></li>

</ul>

</header>

 

 

 

vo에 id로 비교하는 equals 만들어져 있어서 쿠키로 멤버리스트에서 일치하는거 찾아오기 편함.

package vo;

 

public class MemberVO {

 

private String id;

private String pass;

private String name;

private String addr;

private String phone;

private String gender;

private int age;

 

public MemberVO() {

}

 

public MemberVO(String id) {

this.id = id;

}

 

 

@Override

public boolean equals(Object o) {

if (o instanceof MemberVO) {

return this.id.equals(((MemberVO) o).getId());

}

return false;

}

 

 

Cookie[] cookies = request.getCookies();

if(cookies != null && !memberList.isEmpty() && loginMember.getId() == null){

for(int i = 0; i < cookies.length; i++){

Cookie cookie = cookies[i];

String name = cookie.getName();

String id = cookie.getValue();

 

if(name.equals("rememberMe")){

// for문 돌리는 대신~

// equals로 비교함.

int index = memberList.indexOf(new MemberVO(id));

if(index >=0){

loginMember = memberList.get(index);

session.setAttribute("loginMember",loginMember);

break;

}

 

}

}

}


error_page 설정

 

배포서술자에 작성

<error-page>

<error-code>500</error-code>

<location>/error/error_500.jsp</location>

</error-page>

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

pageEncoding="UTF-8" isErrorPage="true"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>error_500.jsp</title>

</head>

<body>

<h1>내부 공사중 빠르게 수정하겠습니다.</h1>

<h2>(--)(__)(--)\\</h2>

<h3><%=exception.getMessage()%></h3>

<a href="../index.jsp">메인으로</a>

</body>

</html>

모든 자바코드 오류 발생시 나오는 에러 페이지 완성!

 

 

페이지 내에 에러 페이지 작성시 제일 높은 우선순위를 가짐.

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

pageEncoding="UTF-8" errorPage="../error/error.jsp"%>


 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" id="WebApp_ID" version="6.0">

<display-name>15_error_page</display-name>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<error-page>

<error-code>500</error-code>

<location>/error/error_500.jsp</location>

</error-page>

 

<error-page>

<error-code>405</error-code>

<location>/error/error_405.jsp</location>

</error-page>

<!-- errorPage와 throwable을 제외한 우선권을 가짐 -->

<error-page>

<error-code>404</error-code>

<location>/error/error_404.jsp</location>

</error-page>

<error-page>

<exception-type>java.lang.NullPointerException</exception-type>

<location>/error/error_null.jsp</location>

</error-page>

</web-app>

// 전달된 요청 전송 방식

String method = request.getMethod().toLowerCase();

if(method.equals("get")){

//response.setStatus(405);

response.sendError(405,"지정된 전송방식이 아닙니다.");

return;

}

에러상태코드 브라우저에 보내기. (이때exception은 사용 불가)

 

 



실습문제 2단계 version~

 

 

loginCheck.jsp

<%

for(MemberVO m : memberList){

if(dto.getId().equals(m.getId())&& dto.getPass().equals(m.getPass())){

session.setAttribute("loginMember",m);

 

if(dto.isRememberMe()){

// BASE64 바이너리 데이터를 문자코드에 영향을 받지 않는

// 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩

// 간단한 양방향 암호화방식

byte[] encodedID = Base64.getEncoder().encode(m.getId().getBytes());

 

String id = new String(encodedID);

 

Cookie cookie = new Cookie("rememberMe",id);

cookie.setMaxAge(60*60*24*10);

response.addCookie(cookie);

}

 

out.print("<script>");

out.print("alert('로그인성공');");

out.print("location.href='index.jsp';");

out.print("</script>");

return;

}

}

out.print("<script>");

out.print("alert('로그인 실패!');");

out.print("history.back();");

out.print("</script>");

 

 

 

%>

header.jsp

 

<%

Cookie[] cookies = request.getCookies();

if(cookies != null && !memberList.isEmpty() && loginMember.getId() == null){

for(int i = 0 ; i < cookies.length; i++){

Cookie cookie = cookies[i];

String name = cookie.getName();

String id = cookie.getValue();

 

// BASE64 ASCII 문자로 표현된 문자를 원본 문자로 복원

byte[] encodedID = Base64.getDecoder().decode(id.getBytes());

id = new String(encodedID);

 

if(name.equals("rememberMe")){

int index = memberList.indexOf(new MemberVO(id));

if(index >= 0){

loginMember = memberList.get(index);

session.setAttribute("loginMember",loginMember);

break;

}

}

}

}

%>