코드 구현 (게시판)
세션 객체를 을 활용하여 사용자의 로그인 상태를 확인하고, 어플리케이션 객체를 활용하여 등록된 글 목록을 관리하는 실습
a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지</title>
</head>
<body>
<%
if (session.getAttribute("id") == null) {
%>
<form action="b.jsp" method="post">
<input type="text" name="mid" placeholder="아이디" required="required">
<input type="password" name="mpw" placeholder="비밀번호" required="required">
<input type="submit" value="로그인">
</form>
<%
} else {
%>
<form action="d.jsp">
<input type="submit" value="로그아웃">
</form>
<%
}
%>
<%
if (session.getAttribute("id") != null) {
%>
<hr>
<form action="c.jsp">
<input type="text" name="content" placeholder="내용을 입력해주세요.">
<input type="submit" value="글작성">
</form>
<%
}
%>
<hr>
<ul>
<%
ArrayList<String> list = (ArrayList<String>)application.getAttribute("list");
if (list == null) {
out.println("등록된 글이 없습니다.");
} else {
for (String v : list) {
out.println("<li>" + v + "</li>");
}
}
%>
</ul>
</body>
</html>
현재 페이지에 사용자가 로그인을 한 상태인지 확인 후 로그인이 되어 있지 않은 경우엔 로그인 폼을 제공하고, 로그인이 된 상태라면 로그아웃 버튼만 제공한다
또한, 로그인이 되어있는 상태라면 글 작성 버튼이 활성화 된다
게시판의 글 목록은 어플리케이션으로 관리하고, 로그인 여부와 관계없이 출력한다
b.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="mDAO" class="model.MemberDAO"/>
<jsp:useBean id="mVO" class="model.MemberVO"/>
<jsp:setProperty property="*" name="mVO"/>
<%
mVO = mDAO.selectOne(mVO);
if (mVO == null) {
out.println("<script>alert('로그인 실패...'); history.go(-1);</script>");
} else {
session.setAttribute("id", mVO.getMid());
response.sendRedirect("a.jsp");
}
%>
DB에 데이터가 존재하는지를 확인 후 데이터가 존재하지 않는다면 '로그인 실패'를 알럿으로 출력한 후 a.jsp로 이동하고, 그렇지 않다면 id라는 이름으로 세션에 현재 사용자의 아이디를 저장한 후 a.jsp로 이동한다
c.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<%
String id = (String)session.getAttribute("id");
String content = request.getParameter("content");
ArrayList<String> list = (ArrayList<String>)application.getAttribute("list");
System.out.println("글정보: " + content);
if (request.getParameter("content").equals("")) { // 현재 내용이 공백인지 확인
out.println("<script>alert('내용을 입력해주세요.');</script>");
} else {
if (list == null) {
list = new ArrayList<String>();
application.setAttribute("list", list);
}
list.add(0, id + ": " + content);
}
out.println("<script>location.href = 'a.jsp';</script>");
%>
application 객체에 저장할 글을 선언한 후 만약에 내용이 공백이라면 '내용을 입력해주세요' 라는 알럿을 출력 후 a.jsp로 이동하고,
내용을 제대로 입력했다면 application 객체에 저장한 후에 '아이디 : 글 내용' 으로 저장하여 a.jsp로 이동한다
d.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.removeAttribute("id");
response.sendRedirect("a.jsp");
%>
a.jsp 에서 로그아웃 버튼을 클릭했다면, 해당 세션의 id를 제거한후 a.jsp로 이동한다
코드 구현 (방문자 수 증가)
방문할 때마다 방문 수를 1씩 증가 시키는 실습
test1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test01</title>
</head>
<body>
<%
application.setAttribute("memberName", "홍길동");
application.setAttribute("cnt", 0);
%>
<a href="test02.jsp">방문자수 확인하기</a>
</body>
</html>
application 객체에 memberName이라는 이름으로 홍길동 값을 저장하고 cnt라는 이름의 값을 0으로 초기화 한다
또한, <a> 태그의 '방문자수 확인하기' 를 클릭 시 test02.jsp 로 이동한다
test02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방문자수 확인 페이지</title>
</head>
<body>
<%
Integer cnt = (Integer)application.getAttribute("cnt");
cnt++;
application.setAttribute("cnt", cnt);
%>
오늘의 방문자수는 <%= cnt %> 명입니다.
</body>
</html>
test01.jsp 에서 <a> 태그를 통해 test02.jsp 로 이동했다면, cnt를 1 늘리는 로직으로 현재 cnt의 값을 요청하여 가져온 후 (현재 0) cnt의 값을 1 증가 시키고 그 값을 다시 application 객체에 저장한다
또한, 화면에는 cnt의 값을 사용자가 볼 수 있도록 출력한다
'Web > JSP' 카테고리의 다른 글
[JSP] JSTL (0) | 2023.07.03 |
---|---|
[JSP] 웹 페이지 MVC 분리 (0) | 2023.07.03 |
[JSP] Application과 Out (0) | 2023.07.02 |
[JSP] session을 활용하여 쇼핑몰 만들기 (실습) (0) | 2023.07.02 |
[JSP] 웹 개발에서 Session (0) | 2023.07.01 |