반응형
- POST 방식
- 한글 인코딩 (utf-8)
- src/main/java에 서블릿(LoginServlet3)을 만들어주고 doGet()과 doPost()만 남기고 다 지움
- webapp에 login3.html 생성
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login3")
public class LoginServlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); // 마임타입 지정
PrintWriter out = response.getWriter();
String id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
System.out.println("아이디 : " + id);
System.out.println("비밀번호 : " + pw);
StringBuffer sb = new StringBuffer();
sb.append("아이디 : " + id + "<br>");
sb.append("비밀번호 : " + pw);
out.print(sb);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login3" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="text" name="user_pw"><br>
<button>로그인</button>
</form>
</body>
</html>
한글로 아이디 비번을 요청했을때 안깨지고 잘 나오면 된다
- get과 post의 요청과 응답을 한곳에서 처리하기
- src/main/java에 서블릿(LoginServlet4)을 만들어주고 doGet()과 doPost()와 doHandle() 만들어 준다
- doHandle()에 throws 부분을 붙여준다.
- webapp에 login4.html 생성
package sec01.ex02;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login4")
public class LoginServlet4 extends HttpServlet {
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doHandle");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
out.print("<h3>아이디 : " + id + "</h3>");
out.print("<h3>비밀번호 : " + pw + "</h3>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet");
doHandle(request, response); // request든 response든 어떤 걸로 받더라도 doHandle에서 처리
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost");
doHandle(request, response);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login4" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="text" name="user_pw"><br>
<button>로그인</button>
</form>
</body>
</html>
콘솔을 확인하면 get 요청해도 doHandle이 받고 post 요청해도 doHandle이 받는다.
- 자바스크립트로 서블릿에 요청 & 로그인 요청시 유효성 검사하기
- src/main/java에 서블릿(LoginServlet5)을 만들어주고 doPost()만 만들어 준다
- webapp에 login5.html 생성
package sec01.ex03;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login5")
public class LoginServlet5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
String addr = request.getParameter("user_addr");
StringBuffer sb = new StringBuffer();
sb.append("아이디 : " + id + "<br>" );
sb.append("비밀번호 : " + pw + "<br>" );
sb.append("주소 : " + addr);
out.print(sb);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLogin">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="text" name="user_pw"><br>
<input type="hidden" name="user_addr" value="대구광역시"><br>
<button type="button" onclick="fn_validate()">전송</button>
</form>
</body>
<script>
function fn_validate() {
var frmLogin = document.frmLogin;
var id = frmLogin.user_id.value.trim();
var pw = frmLogin.user_pw.value.trim();
if (id == '' || id == '') {
alert("아이디 또는 비밀번호를 입력하세요");
return;
}
frmLogin.action = 'login5'; // 폼태그의 action속성값 설정
frmLogin.method = 'post'; // 폼태그의 method속성값 설정
frmLogin.submit(); // 폼태그의 action 속성 실행
}
</script>
</html>
주소는 input type이 hidden이고 value로 "대구광역시"로 줬기때문에 로그인 시에는 안보이지만
로그인 한뒤에는 같이 표시된다.
- 데이터베이스 처럼 값 지정 해놓고 로그인 하기
- src/main/java에 서블릿(LoginTest)을 만들어주고 doGet()과 doPost()와 doHandle() 만들어 준다
- src/main/java에 클래스(MemberDao) 만들어준다 (싱글톤으로 작성)
- webapp에 loginTest.html 생성
package sec01.ex04;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/loginTest")
public class LoginTest extends HttpServlet {
private MemberDao dao = MemberDao.getInstance();
private 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 id = request.getParameter("user_id");
String pw = request.getParameter("user_pw");
boolean result = dao.login(id, pw);
if(result) {
// 로그인 성공
out.print("<div>" + id + "님이 로그인 함.</div>");
} else {
// 로그인 실패
out.print("로그인 실패<br>");
out.print("<a href='/pro07/loginTest.html'>로그인 페이지로</a>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request,response);
}
}
package sec01.ex04;
import java.util.HashMap;
import java.util.Map;
public class MemberDao {
private static MemberDao dao = new MemberDao();
private Map<String, String> members = new HashMap<String, String>();
private MemberDao() {
members.put("kim", "1234");
members.put("na", "3456");
members.put("park", "6789");
members.put("lee", "0000");
}
public static MemberDao getInstance() {
return dao;
}
public boolean login(String id, String pw) {
String value = members.get(id);
if(pw.equals(value)) {
System.out.println("로그인 성공");
return true;
}
return false;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="loginTest" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<button>로그인</button>
</form>
</body>
</html>
MemberDao에 있는 값들이 맞게 들어가면
MemberDao에 있는 값들이 다르게 들어가면
반응형
'학습 > JSP' 카테고리의 다른 글
7. 서블릿의 데이터베이스 연동하기(오라클) (0) | 2022.11.03 |
---|---|
6. 서블릿 (서블릿으로 요청 시 구구단 출력하기) (0) | 2022.11.02 |
4. 서블릿(form태그 이용 서블릿에 요청, 환율 계산기) (0) | 2022.11.01 |
3. 서블릿 (서블릿 만들기, 애너테이션 이용한 서블릿 매핑) (0) | 2022.11.01 |
2. 서블릿 (0) | 2022.10.31 |
댓글