값이 있는지 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;
}
}
}
}
%>
'Java > JSP' 카테고리의 다른 글
07.10 connection pool (7.7 실습문제 풀이) (0) | 2023.07.10 |
---|---|
07.07 JDBC와 JSP연동 (0) | 2023.07.07 |
7.04 dto,vo / useBean (0) | 2023.07.04 |
7.03 리스트를 이용한 회원가입 구현 (0) | 2023.07.03 |
6.30 JSP 진짜 시작 / path , 절대경로, 디렉티브 태그 / 4대 영역 객체 - 속성객체 (0) | 2023.07.03 |