@@@@@@@@@@@@@@@@@ 0819 실습
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>first</title>
</head>
<body>
<input type="button" value="회원가입하기" onClick="location.href='signup.jsp'">
<input type="button" value="로그인하기" onClick="location.href='login.jsp'">
</body>
</html>
===========
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="day0819.*"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="m" class="day0819.MemberBean" scope="session"/>
<jsp:setProperty property="*" name="m" />
<jsp:setProperty property="name" name="m" value="<%=m.getName()%>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 창</title>
</head>
<body>
<form method = "post" action="/pro14/MemberServlet">
아이디 : <input type = "text" name = "member_id"><br>
암호 : <input type = "password" name = "password"><br>
<input type = "submit" value = "로그인">
<input type="hidden" name="name" value=<jsp:getProperty name="m" property="name" />>
<input type="hidden" name="mode" value="login">
</form>
</body>
</html>
==============================
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="day0819.*"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function fn_validate(){
var frmLogin = document.frmLogin;
var member_id = frmLogin.member_id.value;
var name = frmLogin.name.value;
var password = frmLogin.password.value;
var password_chk = frmLogin.password_chk.value;
if(member_id.length == 0 || member_id == ""){
alert("아이디는 필수입니다.");
} else if (name.length == 0 || name == ""){
alert("이름은 필수입니다.");
} else if (password.length == 0 || password == ""){
alert("비밀번호는 필수입니다.");
} else if (password !== password_chk){
alert("비밀번호가 동일하지 않습니다.");
} else {
frmLogin.method = "post";
frmLogin.action = "/pro14/MemberServlet";
frmLogin.submit();
}
}
</script>
<title>회원가입 창</title>
</head>
<body>
<form name="frmLogin" method="post" encType="UTF-8">
ID<input type="text" name="member_id"><br>
이름<input type="text" name="name"><br>
암호<input type="password" name="password"><br>
확인<input type="password" name="password_chk"><br>
<input type="submit" value="가입" onClick="fn_validate()">
<input type="hidden" name="mode" value="signup">
</form>
</body>
</html>
====================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String member_id = request.getParameter("member_id");
session.getAttribute("member_id");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>암호변경 창</title>
</head>
<body>
<form method = "post" action="/pro14/MemberServlet">
현재 암호 : <input type = "password" name = "password"><br>
새 암호 : <input type = "password" name = "password_new"><br>
<input type = "submit" value = "암호변경">
<input type="hidden" name="member_id" value=<%= member_id %>>
<input type="hidden" name="mode" value="changeok">
</form>
</body>
</html>
========================
package day0819;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class MemberServlet
*/
@WebServlet("/MemberServlet")
public class MemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String p_mode = request.getParameter("mode");
MemberDAO dao=new MemberDAO();
MemberBean vo = new MemberBean();
String member_id = request.getParameter("member_id");
String password = request.getParameter("password");
String password_new = request.getParameter("password_new");
String name = request.getParameter("name");
vo.setMember_id(member_id);
vo.setName(name);
vo.setPassword(password);
if(p_mode != null && p_mode.equals("change")) {
RequestDispatcher dispatch = request.getRequestDispatcher("/pro14/day0819/change.jsp");
dispatch.forward(request, response);
// request.setAttribute("member_id", member_id);
// response.sendRedirect("/pro14/day0819/change/?member_id=member_id.jsp");
}else if(p_mode != null && p_mode.equals("changeok")) {
HttpSession session = request.getSession();
session.setAttribute("result", true); //조회 결과가 true이면 isLogOn 속성을 true로 세션에 저장.
session.setAttribute("change.member_id", member_id); // 조회한 결과가 true이면 ID와 pwd를 세션에 저장.
session.setAttribute("change.password", password);
dao.change(member_id, password, password_new);
response.sendRedirect("/pro14/day0819/first.jsp");
}else if(p_mode != null && p_mode.equals("signup")) {
dao.signup(vo);
response.sendRedirect("/pro14/day0819/first.jsp");
}else if(p_mode != null && p_mode.equals("login")) {
boolean result = dao.isExisted(vo);
if(result) {
// 사용자 존재하므로 세션에 사용자 정보 설정
// member_id="";
// password="";
// result=false;
System.out.println(name + "2");
HttpSession session = request.getSession();
// 로그인 성공여부 설정
// if(session!= null) {
session.setAttribute("result", true); //조회 결과가 true이면 isLogOn 속성을 true로 세션에 저장.
session.setAttribute("login.member_id", member_id); // 조회한 결과가 true이면 ID와 pwd를 세션에 저장.
session.setAttribute("login.name", name); // 조회한 결과가 true이면 ID와 pwd를 세션에 저장.
session.setAttribute("change.member_id", member_id); // 조회한 결과가 true이면 ID와 pwd를 세션에 저장.
session.setAttribute("login.password", password);
out.print("<html><body>");
out.print("안녕하세요 " + name + "님!!!");
out.println("<input type=\"button\" value=\"로그아웃하기\" onClick=\"location.href='/pro14/day0819/first.jsp'\">");
out.println("<input type=\"button\" value=\"암호변경하기\" onClick=\"location.href='/pro14/day0819/change.jsp?member_id=" + member_id + "'\">");
out.print("</html></body>");
// } else {
// response.sendRedirect("/pro14/day0819/first.jsp");
// }
} else {
out.println("<html><body><center>회원 아이디가 틀립니다.");
out.println("<a href='/pro14/day0819/login.jsp'\">다시 로그인 하기</a>");
out.println("</html></body>");
}
// RequestDispatcher dispatch = request.getRequestDispatcher("/pro14/day0819/first.jsp");
// dispatch.forward(request, response);
}
}
}
====================
package day0819;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private Connection con;
private PreparedStatement pstmt; // 실무에선 PreparedStatement를 더 많이씀.
private DataSource dataFactory;
public MemberDAO()
{
try
{
Context ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
dataFactory = (DataSource)envContext.lookup("jdbc/oracle");
} catch (Exception e)
{
e.printStackTrace();
}
}
public boolean isExisted(MemberBean memberBean) {
boolean result = false;
String member_id = memberBean.getMember_id();
String password = memberBean.getPassword();
try {
con = dataFactory.getConnection();
// 오라클의 decode 함수를 이용해 조회하여 ID와 비밀번호가 테이블에 존재하면 true를, 존재하지 않으면 false를 조회함.
String query = "select decode(count(*),1,'true','false') as result from member";
query += " where member_id=? and password=?";
pstmt = con.prepareStatement(query);
pstmt.setString(1, member_id);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
rs.next(); // 커서를 첫번째 레코드로 위치시킴.
result = Boolean.parseBoolean(rs.getString("result"));
System.out.println("result=" + result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public void signup(MemberBean memberBean)
{ // 회원 가입
try
{
Connection con = dataFactory.getConnection();
String member_id = memberBean.getMember_id();
String password = memberBean.getPassword();
String name = memberBean.getName();
String query = "insert into member";
query += " (member_id,password,name,regdate)";
query += " values(?,?,?,sysdate)"; // 순서대로 값을 assign 해야함.
System.out.println("prepareStatement: " + query);
pstmt = con.prepareStatement(query);
pstmt.setString(1, member_id);
pstmt.setString(2, password);
pstmt.setString(3, name);
// pstmt.setDate(4, regdate);
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
public void change(String member_id, String password, String password_new)
{ // 비밀번호 변경
try
{
Connection con = dataFactory.getConnection();
String query = "UPDATE member";
query += " SET password = ?";
query += " WHERE member_id = '" + member_id + "'";
query += " AND password ='" + password + "'";
System.out.println("prepareStatement: " + query);
pstmt = con.prepareStatement(query);
pstmt.setString(1, password_new);
pstmt.executeUpdate();
pstmt.close();
System.out.println("비밀번호 변경 로그확인");
} catch (Exception e)
{
e.printStackTrace();
}
}
}
========================
package day0819;
import java.sql.Date;
public class MemberBean {
private String member_id;
private String password;
private String name;
private Date regdate;
public MemberBean()
{
System.out.println("MemberBean 생성자 호출");
}
public String getMember_id() {
return member_id;
}
public void setMember_id(String member_id) {
this.member_id = member_id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getRegdate() {
return regdate;
}
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
}